Lisp Game Programming <Step11-2>
2番目はshipの爆発処理のプログラム
爆発音を鳴らし、爆発カウンタが100になったらスコアボードのshipを1つ減らす
shipが残っていたら、stateを3(revival)にしてshipを初期位置に戻し、revival-cntを0にしてリバイバルカウンターを起動する
;; Step11 <Explode Ship>
;; -----------------------------------------------------------------------------------------------
(defvar *shipbom-sound-flag* nil)
(defgeneric Explode-counter (ship score))
(defmethod Explode-counter (ship score)
(when (= (state ship) 2) ; ship is explode
(when (eql *shipbom-sound-flag* nil)
(setf *shipbom-sound-flag* t)
(Play-sample *shipbom-sound*)) ; shipbom sound
(incf (explode-cnt ship) 1)
(when (= (explode-cnt ship) 100)
(decf (n-ship score) 1)
(when (> (n-ship score) 0)
(setf (state ship) 3 ; set ship revival
*shipbom-sound-flag* nil
(revival-cnt ship) 0
(x ship) (/ (- *graphic-width* 32) 2)
(y ship) (- *graphic-height* 64))))))