パソコン活用研究5番街(Visual Basic、Excel(VBA)、BASIC プログラミング研究)
BASIC超基本(10語でシューティングゲームを作る) (一般/互換/QB)
最近は、いわゆる手つづき型BASICについての書籍も少なくなってきましたが、BASIC
の命令、関数については、それらの書籍を一読していただくとして、ここではたった10語で
シューティングゲームの基本骨格を作成してみたいとおもいます。
サンプルプログラムは潮田氏による N88互換BASIC for Win用ですが、QBasic他にも
容易にコンヴァートできます。もし、分からない点があれば、リンク集にBASIC入門のサイトも
いくつか掲載しましたので参照して下さい。
(参考)BASICゲームのプログラム
BASICゲームサンプル1
Sample Programは基本的にはLOCATE, PRINT, FOR .....NEXT, IF THEN, RND,
INKEY$, GOSUB, RETURN, GOTO, INPUT(ここではINPUT$) しか使っており
ません。とりあえず、この10語あればなんとかなります。いずれも、基本中の基本の命令、
関数ですね。
シューティングゲームの基本構造として、次のような構造をとっています。
初期設定
|
|−> キー入力−−>自機移動、ミサイル発射処理
| |
| ミサイル移動(発射中の時)−−>当たり判定
| |
| 敵移動−−>当たり判定
| |
|−−−−−
ゲーム自体は下のような単純なシューティングゲームです。
Sample Program(N88互換BASIC用)
プログラムリストの赤字の行は、下に解説をつけました。
10 width 80,20
'10〜96行まで初期設定 |
95 randomize(val(right$(time$,2)))
RNDは乱数(1未満)を発生させますが、毎回同じ系列の乱数を発生させます。
乱数の系列をかえるには、RANDOMIZE(数値) を使う必要があります。
そこで、ここでは TIME$(時間の文字列関数)
の右2文字(すなわち秒です)を取って、
VALで文字列を数値に変換してRANDOMIZEに渡しています。これで、0〜59まで
をRANDOMIZEに渡すことができます。ゲームを開始するタイミングで違った乱数の
系列を得ることができます。
RNDが毎回、同じ乱数系列を発生させることは、以下のプログラムを繰り返して確認して
みて下さい。毎回同じ乱数のパターンが表示されるはずです。
10 FOR I= TO 20
20 PRINT RND(1)
30 NEXT
96 ey=int(rnd(1)*10)+6:ex=5
RNDは1未満の乱数を発生させますので、RND*10は、0から10未満の実数になります。
これをINTで整数に直すと(INTは少数点切り捨てで整数にします)、INT(RND*10)で
0から9までの整数をランダムにつくることができます。敵の出現位置をランダムに決める時
などによく使う方法です。
ちなみに、サイコロ(1〜6のランダム)は、INT(RND*6)+1とすればよいわけです。
乱数(RND)に乱数についての解説がありますので、ここの説明では不足と思う方は参照して
下さい。
100 gosub 200
キー入力(自機移動)、敵移動、ミサイル移動などのそれぞれの処理はサブルーチン化して
メインルーチンからGOSUBで呼び出すのが、普通のやり方
200 b$=""
202 a$=inkey$
205 if a$<>"" then b$=a$:goto 202
押されたキーはキーバッファにためられていきます。キーを押しっぱなしにしていると、
キーのオートリピートが働いて、同じキーがどんどんバッファに溜まっていきます。
プログラムの処理がキーのオートリピートより遅いと、キーから手を放してもバッファに
キーが溜まったままなので、バッファのキーをINKEY$で拾って、いつまでも予期せぬ
動きをすることになります。
そこで、毎回キーバッファを空にして、その最後のキーだけを有効にさせるための工夫が
必要になります。それが、ここの部分です。バッファが空になるまで202行に戻して、からに
なったら、最後のキーだけを拾っていきます。
210 if b$="1" and
x>1 then x=x-1
215 if b$="2" and x<37 then x=x+1
キー 1
が押された時、自機は左に移動するが、X>1
という条件をつけることにより、移動できるX座標の限界を 1
までにしている。
同じく、X<37という条件をつけることにより、移動できる右の範囲を37までに制限している。
分かりやすく書くなら
210 if b$="1" then x=x-1
220 if b$="2" then x=x+1
222 if x<1 then x=1
224 if x>37 then x=37
と言う風にしても同じ。
非常にシンプルなシューティングゲームの基本骨格となるプログラムです。後は、
ミサイル、敵の数を増やしたり、敵の動きのパターンを複雑にしたり、グラフィックに
凝ったりすれば、そこそこのものができるでしょう。
敵の数を増やしや動きに少し変化をもたせたプログラム例として、FM8KAME.BAS
(N88互換Basic for WIN用)などがおじさんの自作プログラムとしてあります。きたないコーディングですが、参考にしてみて下さい。
(自作BASICプログラムのページへ)