`(kakko ,man)

Find a guide into tomorrow by taking lessons from the past

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