読者です 読者をやめる 読者になる 読者になる

`(kakko ,man)

Find a guide into tomorrow by taking lessons from the past

Lisp Game Programming <Step3-4>

step3の4番目はクラスから生成したオブジェクトのイメージidからキャラクタidを指定しての描画

;; step3 <Draw images>
;; -----------------------------------------------------------------------------------------------
(defun Draw (obj)
  "character draw"
  (ecase (imageid obj)
    (0 (sdl:draw-surface-at-* *image0* (x obj) (y obj) :cell (id obj)))
    (1 (sdl:draw-surface-at-* *image1* (x obj) (y obj) :cell (id obj)))
    (2 (sdl:draw-surface-at-* *image2* (x obj) (y obj) :cell (id obj)))))

そしてイニシャライズ

ゲームのフレームレートを60にセット
乱数の設定
step<3-1>で作ったイメージデータのセット
カーソルの非表示

;; step3 <Initialize>
;; -----------------------------------------------------------------------------------------------
(defun Initialize ()
   "graphics initialize"
   (setf (sdl:frame-rate) 60) ; frame rate set
   (setf *random-state* (make-random-state t)) ; random set
   (Set-imageid) ; imageid set
   (sdl:show-cursor nil)) ; cursor not show

 

プログラムは以下のような形となる

(defun Common-shooter ()
  "main routine"
    ・・・・・・
 ; step 3
 (Initialize)
 ; step 3
 (let((ship (make-instance 'entity :imageid 0 :id 0 :x 224 :y 416 :width 32 :height 32 :dx 4 :dy 4 :state 1)))
    ・・・・・・

    (sdl:with-events (:poll)
    ・・・・・・

      ;step 3
      (when (= (state ship) 1)
        (Draw ship))

(sdl:update-display))))