`(kakko ,man)

Find a guide into tomorrow by taking lessons from the past

Lisp Game Programming <Step17 Information>

クラスをマクロ化していく中で、工夫が必要な点がでた

;; Step13 <Stage Class> <----------- step 14 correct
;; -----------------------------------------------------------------------------------------------

;(defclass stage ()
; ((%stage-flag :initarg :stage-flage :initform t :accessor stage-flag)
;  (%stage-number :initarg :stage-number :initform 0 :accessor stage-number)
;  (%title-loop :initarg :title-loop :initform t :accessor title-loop)
;  (%start :initarg :start :initform t :accessor start))
;  (:documentation "The Stage Class"))

(define-class stage ()
   (stage-flag stage-number title-loop start) t)

 

:initform 0で設計したものを、マクロ化で:initform tにしたため、初期値tを0に設定しなおすことが必要になった

この場合、nilではなく0を返す以下のコードが使える

(or nil 0)

http://www46.atpages.jp/tatsuro3q/tips/common-lisp.html

なので、インスタンスを生成するコードでは以下のようなコードを記述する

(stage (make-instance 'stage :stage-number (or nil 0)))

 

また、しばらくネタ探し期間に突入!