Comments
Description
Transcript
プチコンで横スクロールシューティングゲームを作る(4)
上田市マルチメディア情報センター プチコンで横スクロールシューティングゲームを作る(4) ●ボスを登場させる 敵をうって倒していくと、ボスが登 場するようにしてみましょう。 ルールとしては、敵を 10 機うつと、 ボスが登場することにします。 プログラムの最初で、ボスのスプライトなどを設定します。 基本的に、敵やミサイルの設定と同じです。 1 ‘*** SHOOT13 *** (中略) 56 ‘--- ハイケイ --(中略) 61 BGX=0 タイトルを「SHOOT13」にする 62 63 64 65 66 67 68 69 70 ‘--- ボス --BOS=0 ボスが存在するかどうかの変数。最初は 0 SPSET 100,1457 ボスのスプライトを SPHOME 100,16,32 管理番号 100 番で設定 SPROT 100,270 SPCOL 100,-16,-16,32,32 SPHIDE 100 最初はボスが登場していないので、表示しない TC=0 敵をうった数をカウントする変数。最初は 0 71 72 73 ‘--- ジキヲ ウゴカス @MOVELOOP --- ボスのスプライトは、1457 番を使います。 もともとは上向きなので、SPROT 命令で 270 度回転させて 左向きにします。 プチコンで横スクロールシューティングゲームを作る(4)/1 上田市マルチメディア情報センター 自機を動かすループの中で、ボスを動かすサブルーチンを呼ぶようにします。 72 ‘--- ジキヲ ウゴカス --(中略) 108 FOR M=21 TO 23 109 IF MS[M]==1 THEN GOSUB @MISLMOVE 110 NEXT 111 ボスが登場している時は、ボスを動かすサブルーチンを呼ぶ 112 IF BOS==1 THEN GOSUB @BOSSMOVE 113 114 115 116 GOSUB @BGSCROLL VSYNC 1 IF GM==0 THEN GOTO @MOVELOOP ビームと敵のヒット処理をするサブルーチンで、敵をうった数をカウントして、10 機うったらボ スを登場させるようにします。 172 (中略) ‘--- ビーム・テキ ヒット --- 178 SC=SC+10 179 LOCATE 0,0 180 PRINT ”SCORE ”;SC 181 TC=TC+1 182 IF TC>=10 AND BOS==0 THEN GOSUB @BOSSDERU 敵をうった数を変数 TC でカウント。 183 RETURN もし 10 機になったら、ボスを登場させるサブルーチンを呼ぶ プチコンで横スクロールシューティングゲームを作る(4)/2 上田市マルチメディア情報センター プログラムの最後に、ボスを登場させるサブルーチン、ボスを動かすサブルーチンを追加し ます。 207 (中略) 211 212 213 214 215 ‘--- ハイケイ スクロール --- 216 217 218 219 220 221 222 223 224 BOS=1 ボス存在変数を 1 にする BOX=360 ボスの最初の位置を、画面右はじにする BOY=120 BOT=0 SPOFS 100,BOX,BOY ボスを表示 SPSHOW 100 RETURN 225 226 227 228 229 @BOSSMOVE ボスの位置を表す BOT を変化 BOT=BOT+PI()/200 BOY=120+100*SIN(BOT) sin 関数でボスの縦座標を 計算して、移動 SPOFS 100,BOX,BOY RETURN BGOFS 0,BGX,0 RETURN ‘--- ボス トウジョウ @BOSSDERU ‘--- ボス イドウ --- --- プログラムを実行してみましょう。 敵を 10 機うつと、ボスが画面に登場し て、上下に動きます。 ボスの縦座標は、SIN(サイン)関数と PI(パイ、π)関数を使って計算しています。 プチコンで横スクロールシューティングゲームを作る(4)/3 上田市マルチメディア情報センター ●ボスとビームの当たり判定 今のままだと、ボスにビームをうっても通り過ぎるだけで何も起こりません。 ビームの当たり判定をしてみましょう。 ふつうの敵より強くしたいので、ビームを 10 発当てたら倒せるようにしましょう。 ボス登場のサブルーチンで、ボスにビームが当たった数をカウントする変数をセットします。 214 215 ‘--- ボス トウジョウ @BOSSDERU --- 216 217 218 219 220 221 222 223 BOS=1 BOX=360 BOY=120 BOT=0 SPOFS 100,BOX,BOY SPSHOW 100 ビームヒットカウントを 0 にする BOH=0 RETURN 次に、ビームを動かすサブルーチンで、ボスとの当たり判定をします。 142 ‘--- ビーム イドウ --(中略) 147 FOR T=11 TO 13 148 IF SPHITSP(B,T)==1 AND TK[T]==1 THEN GOSUB @BEAMTEKIHIT 149 NEXT 150 IF SPHITSP(B,100)==1 AND BOS==1 THEN GOSUB @BOSSHIT ビームとボスが当たっていたら、当たり 151 152 153 RETURN ‘--- テキ の処理をするサブルーチンを呼ぶ トウジョウ --- プチコンで横スクロールシューティングゲームを作る(4)/4 上田市マルチメディア情報センター プログラムの最後に、ボスとビームが当たった処理をするサブルーチンを追加します。 226 227 228 229 230 231 232 233 ‘--- ボス イドウ --@BOSSMOVE BOT=BOT+PI()/200 BOY=120+100*SIN(BOT) SPOFS 100,BOX,BOY RETURN ‘--- ボス・ビーム ヒット --- 234 @BOSSHIT 235 BM[B]=0 ビームを消す 236 SPHIDE B 237 BOH=BOH+1 ボスのヒットカウントを+1 ヒットカウントが 10 より 238 IF BOH<10 THEN RETURN 小さかったらもどる 239 240 SPANIM 100,3,10,1380,10,1381,10 ,1382,10,1383,10,32,1 ボスを爆発のアニメーションに変える 241 SC=SC+300 242 243 244 得点を 300 点加算して表示 LOCATE 0,0 PRINT ”SCORE ”;SC RETURN プログラムを実行してみま しょう。ボスにビームを 10 発当てると、ボスが爆発し ます。 ★プログラムを「SHOOT13」の名前で保存しましょう。 SAVE ”SHOOT13” プチコンで横スクロールシューティングゲームを作る(4)/5 上田市マルチメディア情報センター ●ステージのシステム 今のままだと、ボスを倒してもゲーム がそのまま続きます。 また、1 回ボスを倒すと、その後は出 てきません。(ボスのヒットカウントなど をリセットしていないからです) ボスを倒したらステージクリアして、次 のステージへ進むようにしましょう。 プログラムの最初で、ステージ数を表す変数 ST を設定して、ステージ数を画面に表示する ようにします。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ‘*** SHOOT14 *** タイトルを「SHOOT14」にする SC=0 PL=3 ST=1 ステージ数を表す変数 ST を 1 にする ‘--- スタート --@START ACLS LOCATE 0,0 PRINT ”SCORE ”;SC LOCATE 15,0 PRINT ”STAGE ”;ST LOCATE 30,0 PRINT ”LEFT ”;PL ステージ数を画面に表示 プログラムを実行してみましょう。ステージ数が画面上に表示されます。 プチコンで横スクロールシューティングゲームを作る(4)/6 上田市マルチメディア情報センター ボスを倒したらステージクリアにするという判断は、ゲームモード変数 GM を使います。 これまでは、 GM=0 通常プレイ中 GM=1 ミスした時 の 2 種類でしたが、これを GM=0 通常プレイ中 GM=1 ミスした時 GM=2 ステージクリアした時 の 3 種類にします。 まず、ボスとビームの当たり判定サブルーチンで、ボスを倒した時に GM=2(ステージクリア) にするようにします。 236 237 (中略) ‘--- ボス・ビーム @BOSSHIT ヒット --- 244 245 246 247 248 SC=SC+300 LOCATE 0,0 PRINT ”SCORE ”;SC GM=2 ゲームモード GM を 2 にする RETURN そして、自機を動かすループの最後で、もし GM=2 だったらステージクリアのサブルーチンを 呼ぶようにします。 75 ‘--- ジキヲ ウゴカス --- (中略) 117 GOSUB @BGSCROLL GM=2 だったら、ステージクリアのサブルーチンを 118 VSYNC 1 呼んで、再スタートする 119 IF GM==2 THEN GOSUB @STAGECLR:GOTO @START 120 IF GM==0 THEN GOTO @MOVELOOP プチコンで横スクロールシューティングゲームを作る(4)/7 上田市マルチメディア情報センター プログラムの最後に、ステージクリアのサブルーチンを追加します。 250 251 252 253 254 255 256 257 ‘--- ステージ クリア --@STAGECLR LOCATE 14,14 ステージクリアの文字を水色で表示 COLOR 13 PRINT ” ★★★ STAGE CLEAR ★★★” 文字色を白にもどす COLOR 15 ステージ数を+1 ST=ST+1 258 259 VSYNC 200 RETURN しばらく待つ プログラムを実行してみましょう。 ボスを倒すとステージクリアになり、次のステージへ進みます。 プチコンで横スクロールシューティングゲームを作る(4)/8 上田市マルチメディア情報センター ●ステージによって敵・ミサイルの数を変える 今のままだと、ステージクリアして次のステージへ行っても、ゲーム内容が変わりません。 ステージが進むと、敵とミサイルの数が増えるようにしてみましょう。 プログラム最初の設定の所で、ステージ数に従って敵とミサイルの数を増やすようにします。 39 40 41 42 ‘--- テキ --TM=2+ST 敵の最大数 TM を ST+2 にする。最初は 3 IF TM>6 THEN TM=6 TM の最大値は6までにする DIM TK[11+TM],TX[11+TM],TY[11+TM] 43 44 45 46 FOR T=11 TO 10+TM TK[T]=0 SPSET T,1210 SPHOME T,8,8 47 48 49 50 51 SPCOL T,-8,-8,16,16 SPHIDE T NEXT ‘--- ミサイル 敵の配列の数を TM を使って指定 --- 52 DIM MS[21+TM],MX[21+TM],MY[21+TM], MDX[21+TM],MDY[21+TM] ミサイルの配列の数を TM を使って指定 48 FOR M=21 TO 20+TM 49 MS[M]=0 50 SPSET M,1322 51 SPHOME M,4,4 52 SPCOL M,-4,-4,8,8 53 SPHIDE M 54 NEXT 55 56 ‘--- ジキヲ ウゴカス --- プチコンで横スクロールシューティングゲームを作る(4)/9 上田市マルチメディア情報センター 次に、自機を動かすループで、敵とミサイルの数を変えます。 77 ‘--- ジキヲ ウゴカス --(中略) 101 FOR T=11 TO 10+TM 102 IF RND(100)<1 AND GOSUB @TEKIDERU 103 NEXT 104 105 FOR T=11 TO 10+TM TK[T]==0 THEN 106 IF TK[T]==1 THEN GOSUB @TEKIMOVE 107 NEXT 108 109 FOR M=21 TO 20+TM 110 IF RND(100)<2 AND MS[M]==0 AND TK[M-10]==1 THEN GOSUB @MISLFIRE 111 NEXT 112 113 FOR M=21 TO 20+TM 114 115 116 117 IF MS[M]==1 NEXT IF BOS==1 THEN THEN GOSUB GOSUB @MISLMOVE @BOSSMOVE ビーム移動サブルーチンでも、敵の数を変えます。 148 (中略) 153 ‘--FOR ビーム T=11 イドウ TO --10+TM 154 IF SPHITSP(B,T)==1 AND TK[T]==1 THEN GOSUB @BEAMTEKIHIT 155 NEXT プチコンで横スクロールシューティングゲームを作る(4)/10 上田市マルチメディア情報センター プログラムを実行してみましょう。 ステージが進むと、だんだん敵とミサイルの数が増えて、ゲームが難しくなります。 ★プログラムを「SHOOT14」の名前で保存しましょう。 SAVE ”SHOOT14” プチコンで横スクロールシューティングゲームを作る(4)/11 上田市マルチメディア情報センター ●BGM をつける ゲームをもり上げるために、BGM(音楽)をつけてみましょう。 BGM を鳴らすには BGMPLAY(ビージーエムプレイ)命令を使います。 ゲームがスタートする時に、BGM を鳴らしてみます。 1 2 3 4 ‘*** 5 6 7 8 ST=1 9 10 11 12 SHOOT15 *** タイトルを「SHOOT15」にする SC=0 PL=3 ‘--- スタート @START --13 番の BGM を鳴らす BGMPLAY 13 ACLS LOCATE 0,0 PRINT ”SCORE ”;SC プログラムを実行してみましょう。ゲームがスタートすると BGM が鳴ります。 ボスが登場した時には、違う BGM が鳴るようにしてみましょう。 ボス登場のサブルーチンに、BGM を追加します。 222 223 224 225 ‘--- ボス トウジョウ --@BOSSDERU BGMPLAY 23 23 番の BGM を鳴らす BOS=1 226 227 228 229 230 231 232 BOX=360 BOY=120 BOT=0 SPOFS 100,BOX,BOY SPSHOW 100 BOH=0 RETURN プログラムを実行してみましょう。ボスが登場すると違う BGM に変わります。 プチコンで横スクロールシューティングゲームを作る(4)/12 上田市マルチメディア情報センター BGMPLAY 命令の文法は、以下のとおりです。 BGMPLAY 0 トラック番号 (0~7) ※省略可 ,2 曲番号 (0~42) ,127 音量 (0~127) ※省略可 曲番号は以下のとおりです。スマイルメニュー(SMILE→BGM)でも確認できます。 0 1 2 3 4 5 6 7 8 9 10 Kung-Fu POP 軽快な曲 With stealthy steps 湿った暗い感じの曲 Flat out run 緊張感高まる曲 Nostalgia TECHNO 激しくアップテンポな曲 Feel easy スタートジングル Have a good time クリアジングル Relief ゲームオーバー Exciting days メニューセレクト Skipping march 結果発表 Valiant departure スタッフロール Important thing スタッフロールその 2 11 12 13 14 15 16 17 18 19 20 21 Chasing at ‘Ooedo’ 時代劇ゲーム風 Funny land 軽快なマーチバンド風 Step on the accelerato 激しいロック調 Experiment 軽快な曲 その 2 New discovery WOND Thinking time 考え中 Mischievous boy WOND2 Float 未来系 Sound of the surf BAL Sound of the surf2 BAL_2 Spy movie スパイ系 22 23 24 25 26 27 28 29 Calculating SCI Take Off! シューティング The evening moon. パッド Sensibility SEN Pure water ピュア Strategy ROA Cure CUR Intense battle FIG 33 Bright blue 34 Storytellar 35 Return trip 36 High spirits 37 Welcome to party 38 Funky claps 39 Night surfer 40 Ready to FLY 30 Keen competition 41 We are heros 31 Heat uuuup! 42 Pure water2 32 Rise with force 曲番号を変えると、鳴る曲が変わります。いろいろ変えて試してみましょう。 BGM を止めたい時は、BGMSTOP(ビージーエムストップ)命令を実行してください。 プチコンで横スクロールシューティングゲームを作る(4)/13 上田市マルチメディア情報センター ●効果音をつける BGM の次は、効果音をつけてみましょう。 効果音を出すには、「BEEP」(ビープ)命令を使います。 まず、ビームを発射する時の効果音をつけてみます。 140 141 142 143 ‘--- ビーム ハッシャ --@BEAMFIRE 10 番の効果音を鳴らす BEEP 10 BM[B]=1 144 145 146 147 BX[B]=PX+16 BY[B]=PY SPOFS B,BX[B],BY[B] SPSHOW B 148 RETURN プログラムを実行してみましょう。ビームを発射するたびに発射音が鳴ります。 敵にビームが当たった時に、ダメージ音が出るようにしましょう。 181 182 183 184 185 186 ‘--- ビーム・テキ ヒット --@BEAMTEKIHIT BEEP 11 11 番の効果音を鳴らす BM[B]=0 SPHIDE B TK=0 ボスにビームが当たった時、ボスが爆発する時にも、音が鳴るようにします。 243 ‘--- ボス・ビーム ヒット --- 244 245 246 247 248 249 250 251 252 @BOSSHIT 11 番の効果音を鳴らす BEEP 11 BM[B]=0 SPHIDE B BOH=BOH+1 IF BOH<10 THEN RETURN 13 番の効果音を鳴らす BEEP 13 SPANIM 100,3,10,1380,10,1381,10 ,1382,10,1383,10,32,1 プチコンで横スクロールシューティングゲームを作る(4)/14 上田市マルチメディア情報センター ミスした時、ゲームオーバーの時、ステージクリアの時にも、効果音や BGM が鳴るようにしま す。 125 ‘--- ミス --126 BGMSTOP BGM を止めて、爆発音を鳴らす 127 BEEP 13 128 SPANIM 0,3,10,3424,10,3425,10,3426, 10,3427,1 129 PL=PL-1 130 LOCATE 30,0 131 132 133 134 135 PRINT ”LEFT ”;PL VSYNC 120 IF PL>0 THEN GOTO 136 137 138 139 BGMPLAY 6 ゲームオーバーの BGM を鳴らす LOCATE 16,14 COLOR 3 PRINT ” GAME OVER ” 140 141 COLOR END 262 263 264 265 266 267 ‘--- ステージ クリア --@STAGECLR ステージクリアの BGM を鳴らす BGMPLAY 5 LOCATE 14,14 COLOR 13 PRINT ” ★★★ STAGE CLEAR ★★★” 268 269 270 271 COLOR 15 ST=ST+1 VSYNC 200 RETURN ‘--- ゲーム オーバー @START --- 15 プチコンで横スクロールシューティングゲームを作る(4)/15 上田市マルチメディア情報センター BEEP 命令の文法は以下のとおりです。 BEEP 0 効果音 番号 ,0 周波数 ,127 音量 ,64 パン ポット 波形番号 ピッチ 音量 パンポット 0~133。省略時は 0。 音の高さ。0=標準。-100=半音下、100=半音上。 0(無音)~127(最大)。 ステレオスピーカーを使って、音を左右にふる。 0=左、64=中央、127=右。 ※それぞれの値は省略可能。 0~69 の波形番号は以下のとおりです。スマイルメニューの「BEEP」でも確認できます。 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 BEEP ノイズ カーソル移動 決定 キャンセル 上昇 下降 コイン ジャンプ 着地 発射 ダメージ 金属 爆発 叫び声 ブレーキ バンジョー シンセストリングス 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 シンセブラス シンセベース ギター オルガン ピアノ カウベル タム シンバル オープンハイハット クローズハイハット ハンドクラップ リムショット スネアドラム バスドラム OK2 BALL 和風 VOLT 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 AUTO キラ ESC バンジョー2 スクラッチ ギター2 オルガン 2 ピアノ 2 PASS UP2 録音 シンセタム カウベル 2 metro tri コンガ ダンス BD ダンス SD 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 ダンス HH ヒット ティンバレス チャイニーズシンバル ミニシンバル シェーカー 鈴 太鼓 シンセ かっこう パフ! nohkan humandr1 humandr2 犬 猫 効果音の番号を変えて、いろいろ試してみましょう。 ★プログラムを「SHOOT15」の名前で保存しましょう。 SAVE ”SHOOT15” プチコンで横スクロールシューティングゲームを作る(4)/16 上田市マルチメディア情報センター ●ボスのファイヤー攻撃 今のままだと、ボスが攻撃してこ ないので、強そうな感じがしませ ん。 ボスが火の玉を発射して攻撃し てくるようにしましょう。 プログラムの最初で、火の玉のスプライトなどを設定します。 ミサイルと同じように配列変数を使って、3 発まで発射されるようにします。 1 ‘*** (中略) 69 ‘--(中略) 76 TC=0 77 SHOOT16 ボス *** タイトルを「SHOOT16」にする --- 78 79 80 81 82 83 84 85 86 ‘--- ファイヤー --ファイヤーの配列を設定 DIM FR[34],FX[34],FY[34] FOR F=31 TO 33 FR[F]=0 ファイヤーが存在するかどうかの変数。最初は 0 SPSET F,3414 ファイヤーのスプライトを設定 SPROT F,90 SPCOL F,-8,-8,16,16 最初はファイヤーは登場していないので SPHIDE F 表示しない NEXT 87 88 73 ‘--- ジキヲ ウゴカス @MOVELOOP --- ファイヤーのスプライトは、3414 番を使います。 プチコンで横スクロールシューティングゲームを作る(4)/17 上田市マルチメディア情報センター 自機を動かすループで、ミサイルと同じように、ファイヤーの発射・移動サブルーチンを呼び ます。 88 ‘--- ジキヲ ウゴカス --(中略) 120 FOR M=21 TO 20+TM 121 IF RND(100)<2 AND TK[M-10]==1 THEN GOSUB 122 NEXT 123 MS[M]==0 AND @MISLFIRE 124 FOR M=21 TO 20+TM 125 IF MS[M]==1 THEN GOSUB @MISLMOVE 126 NEXT 127 2%の確率で、ファイヤーを発射する 128 FOR F=31 TO 33 129 IF RND(100)<2 AND FR[F]==0 AND BOS==1 THEN GOSUB @FIREFIRE 130 NEXT 131 132 133 134 135 136 FOR F=31 TO IF FR[F]==1 NEXT IF BOS==1 33 F 番のファイヤーを移動する THEN GOSUB @FIREMOVE THEN GOSUB @BOSSMOVE プチコンで横スクロールシューティングゲームを作る(4)/18 上田市マルチメディア情報センター ファイヤーの発射・移動サブルーチンを、プログラムの最後に追加します。 290 291 292 293 294 295 296 297 ‘--- ファイヤー ハッシャ --@FIREFIRE F 番目のファイヤーをボスから発射 FR[F]=1 FX[F]=BOX-16 FY[F]=BOY SPOFS F,FX[F],FY[F] SPSHOW F 298 RETURN 299 300 ‘--- ファイヤー 301 @FIREMOVE イドウ --F 番目のファイヤーを移動 302 FX[F]=FX[F]-4 303 SPOFS F,FX[F],FY[F] 304 IF FX[F]<0 THEN FR[F]=0:SPHIDE F 305 IF SPHITSP(0,F)==1 THEN GM=1 306 RETURN プログラムを実行してみましょう。 ボスがファイヤーを発射するよう になります。 ★プログラムを「SHOOT16」の名前で保存しましょう。 SAVE ”SHOOT16” プチコンで横スクロールシューティングゲームを作る(4)/19 上田市マルチメディア情報センター ●改造いろいろ 今回の横スクロールシューティングゲーム作りはここまでです。 できる人は、さらにいろいろ改造してみましょう。 敵の種類を増やす 別のスプライトを使って、別の種類の敵を登場させます。動き方もいろいろ変えるとおもし ろいでしょう。 背景を変える ステージごとに背景を変えると、「別の場所へ来た」感じがしておもしろいでしょう。背景 に星(ドット)を流して、星空にすることもできます。 アイテム、パワーアップ 敵をいくつか倒すとアイテムが出現して、それを取ると自機がパワーアップするようにし ます。ビームの連射数を増やす、動きがスピードアップする、別の武器やシールドを装 備するなど、アイデア次第でいろいろ作れます。 プチコンで横スクロールシューティングゲームを作る(4)/20