敵のいないシューティングゲームなんて、「○○の入らないコーヒーみたい」（このフレーズを知っている人は相当なオジサン）なので、オリジナルのサイトをまねてやってみた。かなり汚いコードになったが、動けばヨシと割り切る。

まずは、８つの敵の配置データを３面分作成。

50とか70というのは敵の画像データのid。

enemy-map-list.lisp ⇒

(defpackage :enemy-map-list

(:use :common-lisp)

(:export #:*enemy-map1* #:*enemy-map2* #:*enemy-map3*))

(in-package :enemy-map-list)

;; step3 <Enemy Map>

;; -----------------------------------------------------------------------------------------------

(defparameter *enemy-map1* (make-array '(65 10):initial-contents

'((-1 -1 -1 -1 70 -1 -1 -1 -1 -1) ; 0

(-1 -1 -1 -1 -1 -1 -1 -1 -1 -1)

(-1 -1 -1 -1 -1 -1 -1 -1 -1 -1)

(-1 -1 -1 -1 -1 -1 -1 -1 -1 -1)

(-1 -1 50 50 -1 -1 -1 -1 -1 -1)

(-1 50 50 50 50 -1 -1 -1 -1 -1)

(-1 -1 50 50 -1 -1 -1 -1 -1 -1)

(-1 -1 -1 -1 -1 -1 -1 -1 -1 -1)

(-1 7 -1 -1 -1 -1 -1 -1 50 -1)

(-1 7 -1 -1 -1 -1 -1 -1 50 -1)

(-1 7 -1 -1 -1 -1 -1 -1 50 -1) ; 10

(-1 7 -1 -1 -1 -1 -1 -1 50 -1)

(-1 -1 -1 -1 -1 -1 -1 -1 -1 -1)

(-1 -1 -1 -1 -1 -1 -1 -1 -1 -1)

(-1 17 -1 -1 -1 -1 -1 -1 -1 -1)

(-1 -1 -1 -1 -1 -1 -1 -1 -1 -1)

(-1 -1 -1 -1 -1 -1 76 -1 -1 -1)

(-1 -1 -1 -1 -1 -1 -1 -1 -1 -1)

(80 -1 -1 -1 -1 -1 -1 -1 -1 80)

(80 -1 -1 -1 -1 -1 -1 -1 -1 80)

(80 -1 -1 -1 -1 -1 -1 -1 -1 80) ; 20

(80 -1 -1 -1 -1 -1 -1 -1 -1 80)

(80 -1 -1 -1 -1 -1 -1 -1 -1 80)

(-1 -1 -1 -1 -1 -1 -1 -1 -1 -1)

(-1 -1 -1 18 -1 -1 -1 -1 -1 -1)

(50 -1 -1 -1 -1 -1 -1 -1 -1 50)

(-1 50 -1 -1 -1 -1 -1 -1 50 -1)

(-1 -1 50 -1 -1 -1 -1 50 -1 -1)

(-1 -1 -1 50 -1 -1 50 -1 -1 -1)

(-1 -1 -1 -1 -1 50 -1 -1 -1 -1)

(-1 -1 -1 -1 50 -1 -1 -1 -1 -1) ; 30

(-1 -1 -1 -1 -1 50 -1 -1 -1 -1)

(-1 -1 -1 -1 50 -1 -1 -1 -1 -1)

(-1 -1 -1 -1 -1 -1 -1 -1 -1 -1)

(-1 -1 7 -1 -1 -1 -1 7 -1 -1)

(-1 7 -1 -1 -1 -1 -1 -1 7 -1)

(7 -1 -1 -1 -1 -1 -1 -1 -1 7)

(-1 7 -1 -1 -1 -1 -1 -1 7 -1)

(-1 -1 -1 -1 -1 -1 -1 -1 -1 -1)

(-1 -1 -1 -1 -1 -1 -1 -1 -1 -1)

(-1 -1 -1 -1 -1 -1 -1 -1 -1 -1) ; 40

(-1 -1 -1 -1 -1 -1 -1 -1 -1 -1)

(-1 -1 -1 -1 -1 -1 -1 -1 -1 -1)

(-1 -1 -1 -1 76 -1 -1 -1 -1 -1)

(-1 -1 -1 -1 -1 -1 -1 -1 17 -1)

(-1 -1 -1 -1 -1 -1 -1 -1 -1 -1)

(-1 -1 80 -1 -1 -1 -1 -1 80 -1)

(-1 -1 80 -1 -1 -1 -1 -1 80 -1)

(-1 -1 80 -1 -1 -1 -1 -1 80 -1)

(-1 -1 80 -1 -1 -1 -1 -1 80 -1)

(-1 -1 -1 -1 -1 -1 -1 -1 -1 -1) ; 50

(-1 -1 -1 -1 50 50 -1 -1 -1 -1)

(-1 -1 -1 50 -1 -1 50 -1 -1 -1)

(-1 -1 50 -1 -1 -1 -1 50 -1 -1)

(-1 50 -1 -1 -1 -1 -1 -1 50 -1)

(-1 -1 -1 -1 -1 -1 -1 -1 -1 -1)

(-1 -1 -1 -1 50 -1 -1 -1 -1 -1)

(-1 -1 -1 -1 -1 -1 -1 -1 -1 -1)

(-1 -1 -1 -1 -1 -1 -1 -1 7 -1)

(-1 -1 -1 -1 -1 -1 -1 7 -1 -1)

(-1 -1 -1 -1 -1 -1 7 -1 -1 -1) ; 60

(-1 -1 -1 -1 17 -1 -1 -1 -1 -1)

(-1 7 -1 -1 -1 -1 -1 -1 -1 -1)

(-1 -1 7 -1 -1 -1 -1 -1 -1 -1)

(-1 -1 -1 7 -1 -1 -1 -1 -1 -1))))

(defparameter *enemy-map2* (make-array '(65 10) :initial-contents

'((-1 -1 -1 -1 71 -1 -1 -1 -1 -1) ; 0

(-1 -1 -1 -1 -1 -1 -1 -1 -1 -1)

(-1 -1 -1 -1 -1 -1 -1 -1 -1 -1)

(-1 -1 -1 -1 -1 -1 -1 -1 -1 -1)

(-1 -1 -1 -1 -1 -1 -1 -1 -1 -1)

(-1 -1 7 -1 -1 -1 -1 7 -1 -1)

(-1 -1 -1 -1 78 -1 -1 -1 -1 -1)

(-1 -1 -1 -1 -1 -1 -1 -1 -1 -1)

(78 -1 -1 -1 -1 -1 -1 -1 78 -1)

(-1 -1 -1 -1 -1 -1 -1 18 -1 -1)

(7 -1 80 -1 -1 -1 -1 -1 -1 -1) ; 10

(-1 50 -1 7 -1 80 -1 -1 -1 -1)

(-1 -1 7 -1 50 -1 80 -1 -1 -1)

(-1 -1 -1 50 -1 80 -1 -1 -1 -1)

(-1 -1 -1 -1 80 -1 7 -1 -1 -1)

(-1 -1 -1 -1 -1 50 -1 7 -1 -1)

(-1 -1 -1 -1 -1 -1 -1 -1 -1 -1)

(-1 80 80 -1 -1 -1 -1 -1 7 -1)

(-1 80 80 -1 -1 -1 7 -1 -1 -1)

(-1 80 80 -1 -1 -1 -1 -1 7 -1)

(-1 -1 -1 -1 -1 -1 -1 -1 -1 -1) ; 20

(-1 -1 -1 -1 -1 -1 -1 -1 -1 -1)

(-1 -1 -1 -1 -1 -1 -1 -1 -1 -1)

(-1 -1 -1 -1 -1 -1 -1 -1 -1 -1)

(78 -1 -1 -1 -1 -1 -1 -1 -1 78)

(-1 -1 -1 -1 -1 -1 -1 -1 -1 -1)

(-1 -1 -1 -1 -1 -1 -1 18 -1 -1)

(-1 -1 -1 -1 -1 -1 -1 -1 7 -1)

(-1 7 -1 -1 -1 -1 -1 7 -1 -1)

(-1 -1 7 -1 -1 -1 -1 7 -1 -1)

(-1 -1 -1 7 -1 -1 -1 -1 -1 -1) ; 30

(80 -1 80 -1 80 80 -1 80 -1 80)

(-1 -1 -1 -1 -1 -1 -1 -1 -1 -1)

(-1 -1 -1 -1 -1 -1 -1 -1 -1 -1)

(-1 -1 -1 -1 80 80 -1 -1 -1 -1)

(-1 7 -1 -1 -1 -1 80 80 -1 -1)

(-1 -1 80 80 -1 -1 -1 -1 7 -1)

(-1 -1 -1 -1 -1 -1 -1 -1 80 80)

(80 80 -1 -1 -1 -1 -1 -1 -1 -1)

(-1 -1 -1 -1 80 80 -1 -1 -1 -1)

(-1 -1 -1 -1 -1 -1 -1 -1 -1 -1) ; 40

(-1 -1 -1 -1 -1 -1 -1 -1 -1 -1)

(-1 -1 -1 -1 -1 -1 -1 -1 -1 -1)

(-1 -1 -1 -1 -1 -1 -1 -1 -1 -1)

(78 -1 -1 -1 -1 -1 -1 -1 -1 -1)

(-1 -1 -1 -1 -1 -1 -1 -1 -1 -1)

(-1 -1 -1 -1 -1 -1 17 -1 -1 -1)

(-1 -1 7 -1 -1 -1 -1 7 -1 -1)

(-1 7 -1 50 -1 -1 50 -1 7 -1)

(-1 -1 7 -1 -1 -1 -1 7 -1 -1)

(-1 -1 -1 50 -1 -1 50 -1 -1 -1) ; 50

(-1 -1 7 -1 -1 -1 -1 7 -1 -1)

(-1 -1 -1 50 -1 -1 50 -1 -1 -1)

(-1 -1 -1 -1 -1 -1 -1 -1 -1 -1)

(7 -1 -1 -1 -1 -1 -1 -1 -1 7)

(-1 80 -1 7 -1 -1 7 -1 80 -1)

(-1 -1 7 -1 -1 -1 -1 7 -1 -1)

(-1 -1 -1 80 -1 -1 -1 80 -1 -1)

(-1 -1 -1 -1 7 7 -1 -1 -1 -1)

(-1 -1 -1 -1 -1 -1 -1 -1 -1 -1)

(-1 -1 50 -1 50 50 -1 50 -1 -1) ; 60

(-1 -1 -1 17 -1 -1 -1 -1 -1 -1)

(-1 -1 -1 50 -1 -1 50 -1 -1 -1)

(-1 -1 -1 -1 50 50 -1 -1 -1 -1)

(-1 -1 -1 -1 50 50 -1 -1 -1 -1))))

(defparameter *enemy-map3* (make-array '(65 10) :initial-contents

'((-1 -1 -1 -1 72 -1 -1 -1 -1 -1) ; 0

(-1 -1 -1 -1 -1 -1 -1 -1 -1 -1)

(-1 -1 -1 -1 -1 -1 -1 -1 -1 -1)

(-1 -1 -1 -1 -1 -1 -1 -1 -1 -1)

(-1 -1 -1 -1 -1 -1 -1 -1 -1 -1)

(-1 -1 -1 -1 -1 -1 -1 -1 -1 -1)

(-1 -1 -1 -1 -1 -1 -1 -1 -1 -1)

(-1 -1 -1 -1 -1 -1 -1 -1 -1 -1)

(-1 -1 -1 18 -1 -1 -1 -1 -1 -1)

(-1 76 -1 -1 -1 -1 -1 76 -1 -1)

(-1 -1 -1 -1 -1 -1 -1 -1 -1 -1) ; 10

(-1 -1 -1 -1 -1 -1 -1 -1 7 -1)

(-1 -1 -1 -1 76 -1 -1 -1 -1 -1)

(-1 -1 -1 -1 -1 -1 -1 -1 -1 -1)

(-1 -1 -1 -1 -1 -1 -1 -1 -1 -1)

(-1 -1 76 -1 -1 -1 -1 76 -1 -1)

(-1 -1 -1 -1 -1 -1 -1 -1 -1 -1)

(-1 -1 -1 -1 -1 -1 -1 -1 -1 -1)

(-1 -1 80 -1 80 -1 -1 -1 -1 -1)

(80 -1 -1 7 -1 -1 -1 -1 -1 80)

(-1 -1 -1 -1 -1 80 -1 80 -1 -1) ; 20

(-1 50 -1 -1 50 -1 -1 -1 -1 -1)

(-1 50 -1 -1 50 -1 -1 -1 7 -1)

(-1 50 -1 -1 50 -1 -1 -1 -1 -1)

(-1 -1 -1 -1 -1 -1 -1 -1 -1 -1)

(-1 -1 -1 -1 -1 -1 17 -1 -1 -1)

(-1 -1 -1 -1 -1 -1 -1 -1 -1 -1)

(78 -1 -1 -1 -1 -1 -1 -1 -1 -1)

(-1 -1 80 -1 -1 -1 -1 -1 -1 -1)

(-1 -1 -1 -1 -1 -1 -1 -1 80 -1)

(-1 78 -1 -1 -1 -1 -1 -1 -1 -1) ; 30

(-1 -1 -1 -1 -1 -1 -1 -1 -1 -1)

(-1 -1 -1 -1 -1 -1 -1 -1 -1 -1)

(-1 -1 78 -1 -1 -1 78 -1 -1 -1)

(-1 -1 -1 -1 -1 -1 -1 -1 -1 -1)

(-1 -1 -1 -1 -1 -1 -1 -1 -1 -1)

(50 50 50 -1 -1 -1 -1 -1 50 -1)

(50 50 50 -1 -1 -1 -1 -1 50 -1)

(-1 -1 -1 -1 -1 -1 -1 -1 -1 -1)

(-1 -1 -1 -1 -1 -1 -1 -1 -1 -1)

(-1 -1 -1 -1 -1 -1 -1 -1 -1 -1) ; 40

(-1 -1 -1 -1 -1 -1 -1 -1 -1 -1)

(7 -1 -1 -1 76 -1 -1 -1 -1 -1)

(-1 7 -1 -1 -1 -1 -1 76 -1 -1)

(-1 -1 7 -1 -1 -1 -1 -1 -1 -1)

(-1 -1 -1 -1 76 -1 -1 -1 -1 -1)

(-1 -1 -1 -1 -1 -1 -1 -1 -1 -1)

(-1 17 -1 -1 -1 -1 -1 -1 -1 -1)

(-1 -1 -1 -1 -1 -1 -1 -1 -1 -1)

(-1 -1 -1 -1 -1 -1 -1 -1 -1 -1)

(-1 -1 -1 -1 78 -1 -1 -1 -1 -1) ; 50

(-1 -1 80 -1 -1 -1 -1 -1 -1 -1)

(-1 -1 -1 80 -1 -1 -1 -1 -1 -1)

(-1 -1 -1 -1 80 -1 -1 -1 -1 -1)

(78 -1 -1 -1 -1 -1 -1 -1 -1 78)

(-1 -1 -1 -1 -1 -1 -1 -1 -1 -1)

(-1 -1 -1 -1 -1 -1 -1 -1 -1 -1)

(50 -1 -1 -1 -1 -1 -1 -1 80 -1)

(-1 50 -1 -1 -1 -1 -1 -1 -1 -1)

(-1 -1 50 -1 -1 -1 80 -1 -1 -1)

(-1 -1 -1 50 -1 -1 -1 -1 -1 -1) ; 60

(-1 -1 -1 -1 -1 -1 -1 -1 7 -1)

(-1 -1 -1 -1 -1 -1 -1 7 -1 -1)

(-1 -1 -1 -1 -1 -1 7 -1 -1 -1)

(-1 -1 -1 -1 -1 7 -1 -1 -1 -1))))

プログラムの中では、それぞれの画像データにidを振っているので、-1は空白を意味するデータとしてセットする。

この配列は64→63→･･･→0行の順に読み込んでいくために使用する。

加えて、敵の動き方をｘ方向とｙ方向の移動量として（x y）の形で配列にした。

たとえば、（-8 4)は左に8ドット、下に４ドットを意味するから、*enemy-move-pattern1*では、敵が左右にフラフラ動きながら下降していくことになる。

move-pattern.lisp ⇒

(defpackage :move-pattern

(:use :common-lisp)

(:export #:*enemy-move-pattern1* #:*enemy-move-pattern2* #:*enemy-move-pattern3*

#:*enemy-move-pattern4* #:*enemy-move-pattern5* #:*enemy-move-pattern6*

#:*enemy-move-pattern7* #:*enemy-move-pattern8*))

(in-package :move-pattern)

;; step7 <Enemy-move-pattern>

;; -----------------------------------------------------------------------------------------------

(defparameter *enemy-move-pattern1* (make-array '(16 2) :initial-contents

'((-8 4) ; 0

(-6 4)

(-4 4)

(-2 4)

(0 4)

(2 4)

(4 4)

(6 4)

(8 4)

(6 4)

(4 4) ; 10

(2 4)

(0 4)

(-2 4)

(-4 4)

(-6 4))))

(defparameter *enemy-move-pattern2* (make-array '(12 2) :initial-contents

'((2 2) ; 0

(2 4)

(2 6)

(2 8)

(2 8)

(2 6)

(2 4)

(2 2)

(2 -1)

(2 -2)

(2 -2) ; 10

(2 -1))))



(defparameter *enemy-move-pattern3* (make-array '(16 2) :initial-contents

'((1 3) ; 0

(1 3)

(1 3)

(1 3)

(1 3)

(1 3)

(1 3)

(1 3)

(0 1)

(0 1)

(0 1) ; 10

(0 1)

(0 1)

(0 1)

(0 1)

(0 1))))

(defparameter *enemy-move-pattern4* '(0 2)) ; 0

(defparameter *enemy-move-pattern5* '(1 2)) ; 0

(defparameter *enemy-move-pattern6* (make-array '(32 2) :initial-contents

'((-2 1) ; 0

(-2 1)

(-2 1)

(-2 1)

(-2 1)

(-2 1)

(-2 1)

(-2 1)

(2 1)

(2 1)

(2 1) ; 10

(2 1)

(2 1)

(2 1)

(2 1)

(2 1)

(2 -1)

(2 -1)

(2 -1)

(2 -1)

(2 -1) ; 20

(2 -1)

(2 -1)

(2 -1)

(-2 -1)

(-2 -1)

(-2 -1)

(-2 -1)

(-2 -1)

(-2 -1)

(-2 -1) ; 30

(-2 -1))))

(defparameter *enemy-move-pattern7* (make-array '(32 2) :initial-contents

'((-2 -2) ; 0

(-2 -2)

(-2 -2)

(-2 -2)

(2 2)

(2 2)

(2 2)

(2 2)

(-2 2)

(-2 2)

(-2 2) ; 10

(-2 2)

(2 -2)

(2 -2)

(2 -2)

(2 -2)

(2 2)

(2 2)

(2 2)

(2 2)

(-2 -2) ; 20

(-2 -2)

(-2 -2)

(-2 -2)

(2 -2)

(2 -2)

(2 -2)

(2 -2)

(-2 2)

(-2 2)

(-2 2) ; 30

(-2 2))))

(defparameter *enemy-move-pattern8* '(0 0)) ; 0

敵の配置データを使用するとこんな感じの画面になる。