`(kakko ,man)

Find a guide into tomorrow by taking lessons from the past

Lisp Game Programming <Step3-2>

step3の2番目はクラスの設計

objectクラス

 ⇒ イメージデータのID番号 Imageid

   イメージデータ内のキャラクタデータのID番号 id  

           キャラクタオブジェクトの位置 x

   キャラクタオブジェクトの位置 y    

   キャラクタオブジェクトの長さ width

   キャラクタオブジェクトの高さ height

entityクラス(objectクラスを継承)

 ⇒ x方向のスピード dx

   y方向のスピード dy

   移動距離(カウンタ)    move-cnt

   復活中の時間(カウンタ)  revival-cnt 

   爆発中の時間(カウンタ)  explosion-cnt

   死活状況のステータスフラグ    state

ここを参照

http://pages.cs.wisc.edu/~psilord/lisp-public/option-9.html

;;step3 <Character object>
;; -----------------------------------------------------------------------------------------------
(defclass object ()
   ((%imageid :initarg :imageid :initform 0 :accessor imageid) ; 3 imageid available
     (%id :initarg :id :initform 0 :accessor id) ; graphic id in imageid
     (%x :initarg :x :initform 0 :accessor x) ; x (upper left corner)
     (%y :initarg :y :initform 0 :accessor y) ; y (upper left corner)
     (%width :initarg :width :initform 0 :accessor width) ; width (from upper left corner)
     (%height :initarg :height :initform 0 :accessor height)) ; height (from upper left corner)
  (:documentation "The Object Class"))

(defclass entity (object)
    ((%dx :initarg :dx :initform 0 :accessor dx) ; x direction speed
     (%dy :initarg :dy :initform 0 :accessor dy) ; y direction speed
     (%move-cnt :initarg :move-cnt :initform 0 :accessor move-cnt) ; moving counter(distance)
     (%revival-cnt :initarg :revival-cnt :initform 0 :accessor revival-cnt) ; revival counter(wait)
     (%explode-cnt :initarg :explode-cnt :initform 0 :accessor explode-cnt) ; explosion counter(wait)
     (%state :initarg :state :initform 0 :accessor state)) ; 0:dead 1:alive 2:explosion 3:revival
  (:documentation "The Entity Class"))