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"))