`(kakko ,man)

Find a guide into tomorrow by taking lessons from the past

Lisp Game Programming <Step1>

ボケ予防にCommon Lispで簡単なゲームを作ってみることにした

分かりやすいサンプルゲームを見つけたので、作者に了承を得て移植してみる

 http://mclass13.web.fc2.com/hspstudy/shooter1.htm

但し、分かりやすさを重視してマクロは使用せず、後の楽しみに取っておく

まずは、Common Lisp で作成するための環境を整える

1.OS    windows 7 (64bit)

2.Tools Emacs-24.2 + sbcl -1.1.12 + slime-2.8 + lispbuilder-sdl-0.9.8.1 +

                lispbuilder-sdl-ttf -0.3.0 + lispbuilder-sdl-mixer-0.4 + lispbuilder-sdl-image-0.5.0

                alexandria-2008-07-29 ,babel_0.3.0,cffi_0.10.7.1,trivial-features_0.7は必須

     ⇒ babel_0.4.0はインストールエラー発生
     ⇒ cffi_0.13.0はプログラム実行時にワーニング発生
           ;; STYLE-WARNING:;; bare references to struct types are deprecated

3.Reference Documents

  <Emacs>

  http://cha.la.coocan.jp/doc/NTEmacs.html

  <slime>

  http://common-lisp.net/project/slime/

  <sbcl>

  http://www.sbcl.org/platform-table.html

  <lispbuilder-sdl>

  http://lispbuilder.sourceforge.net/lispbuilder-sdl.html

  <alexandria>

  http://www.cliki.net/alexandria

  <babel>

  http://www.filewatcher.com/m/babel_0.3.0.tar.gz.91665-0.html

  <cffi>

  http://www.mmnt.net/db/0/0/ftp.ne.jp/040/lang/lisp/common-lisp.net/cffi/public_html/releases

  <trivial-features>

  http://www.cliki.net/trivial-features

インストール方法や開発環境の構築方法は様々なサイトから拾ってきたが、このやり方がcoolだと思う

 http://redplait.blogspot.jp/2012/03/installing-ecl-on-win32.html

以下は、ウィンドウを出すだけのゲームフレームのプログラム

  ⇒ step1.lisp

;;;;The Common-Shooter
;;; Step1 <Game Frame>

;; Step1 <Game Frame>
;; -----------------------------------------------------------------------------------------------
(defun Common-shooter ()
  "main routine"
 (sdl:with-init (sdl:sdl-init-video sdl:sdl-init-audio) ; use video and audio
    (sdl:window 640 480 :position #(192 50) ; size 640*480, position x(192) y(50)
           :title-caption "THE SHOOTER"
           :icon-caption "THE SHOOTER"
           :double-buffer T)
           ; :fullscreen T)

    (sdl:update-display)
  (sdl:with-events (:poll)
    (:quit-event ()
      t)
    (:idle ()
    ; Game body

        (sdl:update-display)))))

 

f:id:tomekame0126:20140703052539p:plain

 

f:id:tomekame0126:20140703052600p:plain