テキスト(PDF)

ICT ジュニア(上田パソコンクラブ)
プチコンで横スクロールシューティングゲームを作る(3)
●敵がミサイルを発射する
前回までで、敵をビームでうつ、敵が
自機に当たるとミスになる、という基
本的なシューティングゲームの仕組
みができました。
今のままだと敵が全く攻撃してこない
ので、敵がミサイルをうってくるように
してみましょう。
★ミサイルの設定
プログラムの最初で、ミサイルのスプライトなどを設定します。
基本的に、敵の設定と同じです。
1 ‘*** SHOOT8 *** タイトルを「SHOOT8」にする
(中略)
33 ‘--- テキ --(中略)
37 SPCOL 11,0,0,16,16
38
39
40
41
42
43
44
45
46
47
‘--- ミサイル --MS=0 ミサイルが存在するかどうかの変数。最初は 0
SPSET 21,1322
ミサイルのスプライトを
SPHOME 21,4,4
管理番号 21 番で設定
SPCOL 21,-4,-4,8,8
最初はミサイルが発射されていないので、表示しない
SPHIDE 21
‘--- ジキヲ ウゴカス
@MOVELOOP
---
ミサイルのスプライトは、1322 番を使います。
プチコンで横スクロールシューティングゲームを作る(3)/1
ICT ジュニア(上田パソコンクラブ)
★ミサイルを発射する
続いて、自機を動かすループのプログラムを改造します。
乱数を使って、ある確率でミサイルを発射するサブルーチンを呼ぶようにします。
46 ‘--- ジキヲ ウゴカス --(中略)
56 IF RND(100)<1 AND TK==0 THEN GOSUB
@TEKIDERU
57 IF TK==1 THEN GOSUB @TEKIMOVE
58 IF RND(100)<2 AND MS==0 AND TK==1
2%の確率で、かつミサイルが画面に無く、
THEN GOSUB @MISLFIRE
59 VSYNC 1
60 GOTO @MOVELOOP
かつ敵が登場していたら、ミサイルを発射
するサブルーチンを呼ぶ
「RND(100)<2」として、ミサイルが発射される確率は 2%にしています。
ミサイルが既に画面にある時(MS が 1 の時)は、発射しません。
また、敵が画面にいない時も、ミサイルを発射しません。
プログラムの最後に、ミサイルを発射するサブルーチンを追加します。
122
123
‘---
124
125
126
127
128
129
130
131
132
@MISLFIRE ラベル
MS=1 ミサイル存在変数を 1 にする
MX=TX
ミサイルの座標 MX,MY を、敵の座標 TX,TY から設定
MY=TY
MDX=RND(4)-2 ミサイルの移動量 MDX,MDY を-2~2 の乱数で設定
MDY=RND(4)-2
ミサイルのスプライトを座標(MX,MY)へ
SPOFS 21,MX,MY
SPSHOW 21 ミサイルのスプライトを表示
RETURN
ミサイル
ハッシャ
---
コメント
プログラムを実行してみましょう。
敵がミサイルを発射します。
ただし、発射されるだけでそれ以上
は動きません。
ミサイルを動かすプログラムを、まだ
作っていないからです。
プチコンで横スクロールシューティングゲームを作る(3)/2
ICT ジュニア(上田パソコンクラブ)
★ミサイルを動かす
発射されたミサイルを動かすプログラムを作りましょう。
自機を動かすループプログラムで、ミサイルが存在している時は、ミサイルを動かすサブル
ーチンを呼ぶようにします。
46 ‘--- ジキヲ ウゴカス --47 @MOVELOOP
(中略)
58 IF RND(100)<2 AND MS==0 AND
TK==1 THEN GOSUB @MISLFIRE
59 IF MS==1 THEN GOSUB @MISLMOVE
60
61
VSYNC 1
GOTO @MOVELOOP
もしミサイルが存在していたら、
ミサイルを動かすサブルーチンを呼ぶ
ミサイルが存在している(MS が 1)の時だけ、ミサイルを動かすサブルーチンを呼びます。
プログラムの最後に、ミサイルを動かすサブルーチンを追加します。
134
135
136
137
138
‘--- ミサイル
@MISLMOVE
MX=MX+MDX
MY=MY+MDY
イドウ
---
コメント
ラベル
ミサイルの座標 MX,MY を、MDX,MDY だけ移動
139 SPOFS 21,MX,MY ミサイルのスプライトを座標(MX,MY)へ移動
140 IF MX<0 OR MX>399 THEN MS=0:SP
ミサイルが画面をはみだしたら消す
HIDE 1
141 IF MY<0 OR MY>239 THEN MS=0:SP
ミサイルが画面をはみだしたら消す
HIDE 1
142 IF SPHITSP(0,21)==1 THEN GM=1
143 RETURN
プログラムを実行してみましょう。
発射されたミサイルが移動して、画面のはじまで行くと
消えます。
ミサイルが消えると、また次のミサイルが発射されま
す。
また、自機にミサイルが当たるとミスになります。
プチコンで横スクロールシューティングゲームを作る(3)/3
ICT ジュニア(上田パソコンクラブ)
★ミサイルの動きを改善する
今のプログラムだと、ミサイルが勝手な方向へ発射されるので、怖くありません。
また、乱数によってはミサイルが停止した状態になるので、いつまでもミサイルが消えません。
ミサイル発射サブルーチンを、以下のように改造します。
124
125
126
127
128
129
‘--- ミサイル ハッシャ --@MISLFIRE
MS=1
MX=TX
MY=TY
MA=ATAN(TY-PY,TX-PX)
130
131
132
133
134
ミサイルの移動量 MDX,MDY を
MDX=-COS(MA)
自機へ向かうように設定
MDY=-SIN(MA)
SPOFS 21,MX,MY
SPSHOW 21
RETURN
プログラムを実行してみましょう。
ミサイルが自機へ向かって発射さ
れます。
ここでは逆三角関数「ATAN」(ア
ークタンジェント)、三角関数
「COS」(コサイン)と「SIN」(サイン)
を使っています。
三角関数は高校の数学で、逆三
角関数は大学の数学で習います。
図に描くと右のようになりますが、
難しいので説明しません。
★プログラムを「SHOOT8」の名前で保存しましょう。
SAVE ”SHOOT8”
プチコンで横スクロールシューティングゲームを作る(3)/4
ICT ジュニア(上田パソコンクラブ)
●ビームを連射する
これまでのプログラムでは、ビーム・敵・ミ
サイルなどが全て 1 個ずつしか画面上に
存在できません。
まず、ビームの数を増やして、連射できる
ようにしましょう。
ビームをいくつも増やして、それぞれ動かすには、
 ビームのスプライト管理番号
 ビームの存在変数 BM
 ビームのx座標変数 BX
 ビームのy座標変数 BY
などを、ビームの個数分だけ管理しなければいけません。
そのために、配列変数(はいれつへんすう)を使います。
配列変数は、「[」「]」(中かっこ)で番号が付いた変数です。
例
A[0]
A[1]
A[2]
…それぞれ別の変数として扱われる。
この配列変数を使って、それぞれのビームを管理します。
今回は配列変数を 1~3 まで用意して、3 発まで連射できるようにします。
●ビーム 1 個目
スプライト管理番号 1
ビームの存在変数 BM[1]
ビームの x 座標 BX[1]
ビームの y 座標 BY[1]
●ビーム 2 個目
スプライト管理番号 2
ビームの存在変数 BM[2]
ビームの x 座標 BX[2]
ビームの y 座標 BY[2]
●ビーム 3 個目
スプライト管理番号 3
ビームの存在変数 BM[3]
ビームの x 座標 BX[3]
ビームの y 座標 BY[3]
プチコンで横スクロールシューティングゲームを作る(3)/5
ICT ジュニア(上田パソコンクラブ)
プログラムの最初の、ビームの設定をする部分で、配列変数を使って 3 個分の設定をします。
1 ‘*** SHOOT9 *** タイトルを「SHOOT9」にする
(中略)
25 ‘--- ビーム --配列変数を 0~3 まで 4 個設定
26 DIM BM[4],BX[4],BY[4]
27 FOR B=1 TO 3 変数 B を 1~3 までくり返し
28 BM[B]=0 ビーム存在変数を配列にする。0 を設定。
29 SPSET B,1305
30 SPHOME B,4,8
ビームのスプライト
31 SPROT B,90
(管理番号 B 番)を設定
32 SPHIDE B
33
34
SPCOL
NEXT
35
36
‘---
B,-8,-4,16,8
変数 B を変化させてくり返し
テキ
---
配列変数を使うには、まず DIM(ディム、ディメンジョン)命令で、配列の個数を指定します。
DIM
BM[4]
配列の個数
配列の個数
,BX[4]
配列の個数
,BY[4]
配列の個数
…
配列変数として使う個数を指定する。
配列の番号は「0」から始まるので、最大番号は「個数-1」になる。
例えば、BM[4]と指定すると、BM[0]~BM[3]が使える。
3 個分の配列変数を設定するために、FOR(フォー)・NEXT(ネクスト)命令を使って、設定プ
ログラムを 3 個分くり返します。
FOR
B=1
ループ変数
の初期値
ループ変数の初期値
終値
増分
TO
3
終値
STEP
1
増分
くり返しの中で変化させる変数(ループ変数)の最初の値。
ループ変数の最後の値。
ループ変数を変化させる値。
STEP 以下を省略すると 1 ずつ増やす。
NEXT
FOR で始まったくり返し部分の最後。ループ変数が終値になっていなければ FOR まで戻る。
プチコンで横スクロールシューティングゲームを作る(3)/6
ICT ジュニア(上田パソコンクラブ)
今回は、ループ変数 B を 1,2,3 にして 3 回くり返して、ビームのスプライトなどを 3 個分設定
しています。
次に、自機を動かすループで、ビームを 3 個分処理するようにします。
49 ‘--- ジキヲ ウゴカス --(中略)
56 SPOFS 0,PX,PY
わかりやすくするため、1 行空ける
57
B を 1~3 までくり返し
58 FOR B=1 TO 3
59
I F (BUTTON(2)
AND
16)= = 16 A N D
BM[B]==0 THEN GOSUB @BEAMFIRE:B=3
60 NEXT
ビームを 1 個発射したら
くり返しを終わる
わかりやすくするため、1 行空ける
61
B を 1~3 までくり返し
62 FOR B=1 TO 3
63 IF BM[B]==1 THEN GOSUB @BEAMMOVE
64 NEXT
わかりやすくするため、1 行空ける
65
66
IF
RND(100)<1
AND
TK==0
THEN
GOSUB @TEKIDERU
ビーム発射・ビーム移動サブルーチンは、配列変数を使ってB番目のビームを処理します。
88
89
90
91
92
93
94
95
96
97
98
‘--- ビーム ハッシャ --B 番目のビームを発射する
@BEAMFIRE
BM[B]=1
BX[B]=PX+16
BY[B]=PY
SPOFS B,BX[B],BY[B]
SPSHOW B
RETURN
‘--- ビーム イドウ
@BEAMMOVE
--B 番目のビームを移動
99 BX[B]=BX[B]+8
100 SPOFS B,BX[B],BY[B]
101 IF BX[B]>400 THEN BM[B]=0:SPHIDE B
102 IF SPHITSP(B,11)==1 THEN GOSUB @
BEAMTEKIHIT
103 RETURN
プチコンで横スクロールシューティングゲームを作る(3)/7
ICT ジュニア(上田パソコンクラブ)
ビームと敵が当たった時のプログラムも、B 番目のビームを消すようにします。
123 ‘--- ビーム・テキ ヒット --124 @BEAMTEKIHIT
125 BM[B]=0
B 番目のビームを消す
126 SPHIDE B
127 TK=0
128 SPANIM 11,3,10,1376,10,1377,
10,1378,10,1379,10,32,1
プログラムを実行してみましょう。
ビームが 3 発まで連射できるようになりま
す。
配列の個数や、それぞれの FOR~NEXT のくり返し数を変えると、ビームが連射できる数が
変わります。いろいろ試してみましょう。
★プログラムを「SHOOT9」の名前で保存しましょう。
SAVE ”SHOOT9”
プチコンで横スクロールシューティングゲームを作る(3)/8
ICT ジュニア(上田パソコンクラブ)
●敵の数を増やす
配列変数を使って、ビームが連射で
きるようになりました。
同じように配列変数を使って、敵とミ
サイルの数を増やしてみましょう。
まずは敵を 3 機に増やします。
プログラムの最初、敵の設定で、配列変数を設定します。
1
‘***
SHOOT10
*** タイトルを「SHOOT10」にする
(中略)
36 ‘--- テキ --配列変数を 14 個設定
37 DIM TK[14],TX[14],TY[14]
38 FOR T=11 TO 13 T を 11~13 までくり返し
敵存在変数を配列にする。0 を設定。
39 TK[T]=0
40 SPSET T,1210
敵のスプライト
41 SPHOME T,8,8
(管理番号 T 番)を設定
42 SPCOL T,-8,-8,16,16
43
44
45
46
SPHIDE
NEXT
‘---
T
T を変化させてくり返し
ミサイル ---
敵の配列変数は 14 個設定していますが、実際は 11~13 番の 3 個しか使いません。
(スプライトの管理番号に合わせています)
プチコンで横スクロールシューティングゲームを作る(3)/9
ICT ジュニア(上田パソコンクラブ)
次に、自機を動かすループで、敵を 3 機分処理するようにします。
53
‘---
ジキヲ ウゴカス
---
(中略)
66 FOR B=1 TO 3
67 IF BM[B]==1 THEN GOSUB @BEAMMOVE
68 NEXT
69
T を 11~13 までくり返し
70 FOR T=11 TO 13
71 IF RND(100)<1 AND TK[T]==0 THEN
GOSUB @TEKIDERU
72 NEXT
73 わかりやすくするため、1 行空ける
74 FOR T=11 TO 13 T を 11~13 までくり返し
75 IF TK[T]==1 THEN GOSUB @TEKIMOVE
76 NEXT
わかりやすくするため、1 行空ける
77
78
IF
RND(100)<2
AND
MS==0
AND
TK[11]==1 THEN GOSUB @MISLFIRE
79 IF MS==1 THEN GOSUB @MISLMOVE
とりあえず 11 番の敵からミサイル発射 (※あとで直します)
ビーム移動サブルーチンで、それぞれの敵との当たり判定をするようにします。
104 ‘--- ビーム イドウ --105 @BEAMMOVE
106 BX[B]=BX[B]+8
107 SPOFS B,BX[B],BY[B]
108 IF BX[B]>400 THEN BM[B]=0:SPHIDE B
109 FOR T=11 TO 13
110
IF
S P HITSP(B , T)= = 1
THEN
GOSUB
@
BEAMTEKIHIT
111 NEXT
112 RETURN
1~3 番目の敵とそれぞれ当たり判定
113
114 ‘---
テキ
トウジョウ ---
プチコンで横スクロールシューティングゲームを作る(3)/10
ICT ジュニア(上田パソコンクラブ)
敵登場サブルーチンも、配列変数をTで指定しながら、各機の処理をします。
114 ‘--- テキ トウジョウ --115 @TEKIDERU
116 TK[T]=1
T 番目の敵の処理をするように変更
117 TX[T]=391
118 TY[T]=RND(208)
119 SPOFS T,TX[T],TY[T]
120 SPSHOW T
121 SPANIM T,3,10,1210,10,1211,10,1212,0
122 RETURN
敵の移動・ビームとの当たり処理サブルーチンも、配列変数で各機の処理をします。
124 ‘--- テキ イドウ --125 @TEKIMOVE
T 番目の敵の処理をするように変更
126 TX[T]=TX[T]-2
127 SPOFS T,TX[T],TY[T]
128 IF TX[T]<0 THEN TK[T]=0:SP
HIDE T
129 IF SPHITSP(0,T)==1 THEN GM=1
130 RETURN
131
132 ‘--- ビーム・テキ ヒット --133 @BEAMTEKIHIT
134 BM[B]=0
135 SPHIDE B
T 番目の敵の処理をするように変更
136 TK[T]=0
137 SPANIM T,3,10,1376,10,1377,10,
1378,10,1379,10,32,1
138 SC=SC+10
139 LOCATE 0,0
140 PRINT ”SCORE ”;SC
141 RETURN
プチコンで横スクロールシューティングゲームを作る(3)/11
ICT ジュニア(上田パソコンクラブ)
ミサイル発射サブルーチンは、とりあえず 1 機目の敵からミサイルを発射するようにします。
(※あとで直します)
143
144
145
146
147
148
149
150
151
‘--- ミサイル ハッシャ --@MISLFIRE
MS=1
ミサイルを 1 機目(11 番)の
MX=TX[11]
敵から発射するように設定
MY=TY[11]
MA=ATAN(TY[11]-PY,TX[11]-PX)
MDX=-COS(MA)
MDY=-SIN(MA)
SPOFS 21,MX,MY
152
153
SPSHOW
RETURN
21
プログラムを実行してみましょう。
敵が 3 機登場するようになります。
プチコンで横スクロールシューティングゲームを作る(3)/12
ICT ジュニア(上田パソコンクラブ)
●ミサイルの数を増やす
敵と同じように、配列変数を使ってミサイルの数を 3 発まで増やしてみましょう。
プログラムの最初、ミサイルの設定部分で、配列変数を使って設定します。
46 ‘--- ミサイル --47 DIM MS[24],MX[24],MY[24] ,MDX[24],
MDY[24]
配列を 24 個(0~23 番)設定
48 FOR M=21 TO 23
21~23 番の変数とスプライトを設定
49 MS[M]=0
50 SPSET M,1322
51 SPHOME M,4,4
52
53
54
55
56
SPCOL M,-4,-4,8,8
SPHIDE M
NEXT
‘---
ジキヲ
ウゴカス
---
配列変数は 0~23 番で設定しますが、実際は 21~23 番の 3 個しか使いません。
次に、自機を動かすループで、ミサイルを 3 発分処理するようにします。
56 ‘--- ジキヲ
(中略)
77 FOR T=11
ウゴカス
TO
---
13
78 IF TK[T]==1 THEN GOSUB @TEKIMOVE
79 NEXT
80
わかりやすくするため、1 行空ける
M を 21~23 までくり返し
81 FOR M=21 TO 23
82 IF RND(100)<2 AND MS[M]==0 AND
TK[M-10]==1 THEN GOSUB @MISLFIRE
83 NEXT
わかりやすくするため、1 行空ける
84
M を 21~23 までくり返し
85 FOR M=21 TO 23
86 IF MS[M]==1 THEN GOSUB @MISLMOVE
87 NEXT
わかりやすくするため、1 行空ける
88
89 VSYNC 1
90 IF GM==0 THEN GOTO
@MOVELOOP
82 行では、ミサイルのループ変数 M が 21~23、敵の管理番号が 11~13 番なので、敵の存
在変数を「TK[M-10]」と指定しています。
プチコンで横スクロールシューティングゲームを作る(3)/13
ICT ジュニア(上田パソコンクラブ)
ミサイルの発射・移動サブルーチンも、配列変数を使ったプログラムに変更します。
155 ‘--- ミサイル ハッシャ --156 @MISLFIRE
157 MS[M]=1
M 番目のミサイルを M-10 番の
158 MX[M]=TX[M-10]
敵から発射するように設定
159 MY[M]=TY[M-10]
160 MA=ATAN(TY[M-10]-PY,TX[M-10]
-PX)
161 MDX[M]=-COS(MA)
162 MDY[M]=-SIN(MA)
163 SPOFS M,MX[M],MY[M]
164 SPSHOW M
165 RETURN
166
167 ‘--- ミサイル イドウ --M 番目のミサイルを移動
168 @MISLMOVE
169 MX[M]=MX[M]+MDX[M]
170 MY[M]=MY[M]+MDY[M]
171 SPOFS M,MX[M],MY[M]
172 IF MX[M]<0 OR MX[M]>399 THEN
MS[M]=0:SPHIDE M
173 IF MY[M]<0 OR MX[M]>239 THEN
MS[M]=0:SPHIDE M
174 IF SPHITSP(0,M)==1 THEN GM=1
175 RETURN
プログラムを実行してみましょう。
ミサイルも 3 発まで出るようになりま
す。
★プログラムを
「SHOOT10」の名前で
保存しましょう。
SAVE ”SHOOT10”
プチコンで横スクロールシューティングゲームを作る(3)/14
ICT ジュニア(上田パソコンクラブ)
●敵の動きを変える
敵の動きがただ真っ直ぐ飛んでくるだけなので、動き方を変えてみましょう。
まず、プログラムの最初の敵の設定で、新しい配列変数 TY0[]を設定します。
1 ‘*** SHOOT11 *** タイトルを「SHOOT11」にする
(中略)
配列変数 TY0[]を追加
36 ‘--- テキ --37 DIM TK[14],TX[14],TY[14],TY0[14]
38 FOR T=11 TO 13
敵の登場・移動サブルーチンで、動きを変えます。
126
127
128
129
130
131
132
133
134
135
‘--- テキ トウジョウ --@TEKIDERU
TK[T]=1
TX[T]=391
TY0 と SIN 関数を使って y 座標を設定
TY0[T]=RND(208)
TY[T]=TY0[T]+50*SIN(TX[T]/50)
SPOFS T,TX[T],TY[T]
SPSHOW T
SPANIM T,3,10,1210,10,1211,10,1212,0
RETURN
136
137
138
139
140
141
142
143
144
‘--- テキ イドウ --@TEKIMOVE
TX[T]=TX[T]-2
TY0 と SIN 関数を使って y 座標を設定
TY[T]=TY0[T]+50*SIN(TX[T]/50)
SPOFS T,TX[T],TY[T]
IF TX[T]<-16 THEN TK[T]=0:SPHIDE 11
IF SPHITSP(0,T)==1 THEN GM=1
RETURN
プログラムを実行してみましょう。敵が上下にカーブしながら飛んできます。
プチコンで横スクロールシューティングゲームを作る(3)/15
ICT ジュニア(上田パソコンクラブ)
●自機をスライドパッドで操作する
これまで自機の操作は十字キーだけでしたが、スライドパッドでも操作で
きるようにしてみましょう。斜めの動きがやりやすくなります。
自機を動かすループで、スライドパッドの操作を読み取るプログラムを追
加します。
56 ‘--- ジキヲ ウゴカス --(中略)
62 IF (B AND 8)==8 AND PX<384 THEN PX
=PX+2
63 STICK OUT SX,SY
スライドパッドを読み取って
64
65
66
67
68
69
70
PX=PX+SX*2.5
自機の座標 PX,PY を変える
PY=PY-SY*2.5
IF PX<16 THEN PX=16
IF PX>384 THEN PX=384
はみ出しチェック
IF PY<16 THEN PY=16
IF PY>224 THEN PY=224
SPOFS 0,PX,PY
プログラムを実行してみましょう。
自機をスライドパッドで操作できます。
スライドパッドの操作を読み取るには、
STICK OUT(スティックアウト)命令を使います。
STICK
OUT
横方向のスライド量変数
縦方向のスライド量変数
SX
横方向の
スライド量
変数
,SY
縦方向の
スライド量
変数
横方向のスライド量を格納する変数。返る値は-1~+1。
縦方向のスライド量を格納する変数。返る値は-1~+1。
★プログラムを「SHOOT11」の名前で保存しましょう。
SAVE ”SHOOT11”
プチコンで横スクロールシューティングゲームを作る(3)/16
ICT ジュニア(上田パソコンクラブ)
●背景を表示する
これまで真っ暗な背景でゲームを作ってきましたが、背景を表示してみましょう。
まず、画面下に地面を表示してみます。
1 ‘***
(中略)
46 ‘--(中略)
54 NEXT
55
56 ‘--57
58
59
60
61
62
63
SHOOT12
***
タイトルを「SHOOT12」にする
BGSCREEN 0,50,15
FOR X=0 TO 49
BGPUT 0,X,14,334
NEXT
背景スクリーンの大きさを設定
ミサイル
---
ハイケイ
---
‘--- ジキヲ ウゴカス
@MOVELOOP
BG スクリーンの左下~右下に
地面の BG パーツを置く
---
プログラムを実行してみましょう。
画面下に地面が表示されます。
プチコンでは、背景(BG=バックグラウンド)にいろいろな BG キャラ(16×16 ドット)を表示で
きます。
57 行で、BGSCREEN(ビージースクリーン)命令で背景レイヤーの大きさを設定しています。
BGSCREEN
BG レイヤー番号
横方向の大きさ
縦方向の大きさ
0
BG レイヤー
番号
,50
横方向の
大きさ
,15
縦方向の
大きさ
0~3 で指定。
BG レイヤーの横方向サイズ(キャラ単位で指定。25 で横いっぱい)
BG レイヤーの縦方向サイズ(キャラ単位で指定。15 で縦いっぱい)
プチコンで横スクロールシューティングゲームを作る(3)/17
ICT ジュニア(上田パソコンクラブ)
あとで横にスクロールさせたいので、横 2 画面分のサイズの BG レイヤーを設定しています。
58~60 行では、BGPUT(ビージープット)命令で、BG レイヤーに地面の BG キャラ(334 番)
を横に 50 個並べて表示しています。
BGPUT
0
BG レイヤー
番号
BG レイヤー番号
x 座標
y 座標
キャラ番号
,X
x 座標
,14
y 座標
,334
キャラ
番号
0~3 で指定。
キャラを置く位置の x 座標(キャラ単位で指定)。
キャラを置く位置の y 座標(キャラ単位で指定)。
表示したい BG キャラの番号。
BG キャラの番号を変えると、地面のキャラが変わります。
いろいろ試してみましょう。
プチコンで横スクロールシューティングゲームを作る(3)/18
ICT ジュニア(上田パソコンクラブ)
★背景のスクロール
今表示させた地面を、横にスクロールさせて動かしてみましょう。
最初の設定部分で、BG レイヤーの原点の x 座標を表す変数 BGX を追加します。
56
57
58
59
60
61
62
‘--- ハイケイ --BGSCREEN 0,50,15
FOR X=0 TO 49
BGPUT 0,X,14,334
NEXT
BG レイヤーの原点 x 座標。最初は 0。
BGX=0
63
64
‘--- ジキヲ ウゴカス
@MOVELOOP
---
自機を動かすループの最後で、背景をスクロールするサブルーチンを呼びます。
63 ‘--- ジキヲ ウゴカス --(中略)
99 FOR M=21 TO 23
100 IF MS[M]==1 THEN GOSUB @MISLMOVE
101 NEXT
102
背景をスクロールするサブルーチンを呼ぶ
103
104
105
GOSUB @BGSCROLL
VSYNC 1
IF GM==0 THEN GOTO
@MOVELOOP
プログラムの最後に、背景をスクロールするサブルーチンを追加します。
193
194
195
196
197
‘--- ハイケイ スクロール
@BGSCROLL
BGX=BGX+1
IF BGX>399 THEN
198
199
BGOFS 0,BGX,0
RETURN
---
BGX=0
プログラムを実行してみましょう。
背景の地面がスクロールして動きます。
プチコンで横スクロールシューティングゲームを作る(3)/19
ICT ジュニア(上田パソコンクラブ)
背景のスクロールには、BGOFS(ビージーオフセット)命令を使っています。
BG レイヤーの中で、どの部分を画面に表示するか、位置を指定する命令です。
BGOFS
0
BG レイヤー
番号
BG レイヤー番号
表示位置
x 方向変化量
表示位置
y 方向変化量
,BGX
表示位置
x 方向
変化量
,0
表示位置
y 方向
変化量
0~3 で指定。
BG レイヤー中で、画面に表示する位置を x 方向
にずらす量(ドット単位で指定)。
BG レイヤー中で、画面に表示する位置を y 方向
にずらす量(ドット単位で指定)。
197 行で BGX の値を 1 増やし、199 行の BGOFS 命令で表示位置を 1 ドット右へずらしてい
ます。
そのままだと表示エリアが BG レイヤーの右はじを突きぬけてしまうので、198 行で BGX を元
にもどしています。
197 行の BGX の変化量を変えると、背景スクロールの速さが変わります。
いろいろ試してみましょう。
★プログラムを「SHOOT12」の名前で保存しましょう。
SAVE ”SHOOT12”
プチコンで横スクロールシューティングゲームを作る(3)/20