Menu

第8回 簡単なゲームの作成1


 第6回では、文字や記号を動かしてみた。そして第7回では、キーボードからの入力に従って文字や記号を動かしてみた。この2つを組み合わせることで簡単なゲームの仕組みを作ることができるよ。今日は、このことを使って簡単なゲームの基礎を作ってみよう。
第6回のプログラムを参考にして、まず、コンピュータが計算した結果に従って逃げるキャラクタを作って表示することを考えてみよう。
逃げるキャラクタはなるべく右に左に、不規則に動いた方がゲームとしては面白いから、第6回の最後に使った不規則な数を創り出す命令RND( )を使うことにしよう。
まず、次のようなプログラムを作ってみよう。

10 CLS
20 B=12
30 C=12
40 D=21
50 FOR I=1 TO 60
60 N=RND(20)+1
70 LOCATE B+(10-N)/5, I/3
80 PRINT CHR$(#FF)
90 WAIT 30
100 B=B+(10-N)/5
110 CLS
120 NEXT

<プログラムの説明>
10 CLS では、画面をクリアしているよ。
20 B=12 ここでは、Bという箱を用意して、その中に12という数値を入れているよ。ここでBは、キャラクタの横方向の位置(左から何文字目か)を表す数値だよ。
30 C=12 ここでは、Cという箱を用意して、その中に12という数値を入れているよ。ここでCは、逃げるキャラクタを追いかけるキャラクタの横方向の位置(左から何文字目か)を表す数値だよ。でもここまでのプログラムでは使わない。この後で追加して作るプログラムで使うよ。
40 D=21 ここでは、Dという箱を用意して、その中に21という数値を入れているよ。ここでDは、逃げるキャラクタを追いかけるキャラクタの縦方向の位置(上から何行目か)を表す数値だよ。でもここまでのプログラムでは使わない。この後で追加して作るプログラムで使うよ。
50 FOR I=1 TO 60 これは、120行目のNEXTまでの間を60回繰り返す命令だよ。Iの値は、1回繰り返すごとに、一つずつ増えていくよ。
60 N=RND(20)+1 ここでは、第6回でも使ったけど、不規則な数値を作り出すRND( )という命令を使っているよ。カッコの中に20を入れているから、0~19までの数値からコンピュータが不規則に選びだした値を返してくれるんだ。
70 LOCATE B+(10-N)/5, I/3 ここでは、現在の位置から横方向に不規則な数値で指定した位置を、縦方向には、3回にいっぺん、下方向に移動する位置を指定しているよ。
80 PRINT CHR$(#FF) 70行目で指定した位置に「イチゴ」のキャラクタを表示するよ。
90 WAIT 30 ここでは、すぐにキャラクタ動かすと分かり難いから、時間をかせいでゆっくりと動かすようにしているよ。
100 B=B+(10-N)/5 ここでは、新しく動いた位置を次の位置の計算のために記憶しておくよ。
110 画面をクリアしているよ。
120 50行目に戻して、繰り返し動作を行うよ。その際、Iの値を一つ増やすよ。

できあがったら、RUNで実行してみよう。
ゆっくりとイチゴが左右にゆれながら落ちてくるかな。

さて次に、落ちてくる「イチゴ」を第7回で作った、キーボードからの入力に従って、一番下で待ち構えて追いかける「人」のキャラクタを作ろう。
先ほど、作ったプログラムを次のように変更してみよう。

まず、120行目は以下のように変更しよう。
120 FOR J=1 TO 5

あとの行は以下のように追加していこう。
130 A=INKEY()
140 IF A=28 THEN X=-1
150 IF A=29 THEN X=1
160 LOCATE C+X, D
170 PRINT CHR$(#F9)
180 C=C+X
190 X=0: A=0:
200 WAIT 5
210 NEXT
220 NEXT

<プログラムの説明>
120 FOR J=1 TO 5 これは、210行目のNEXTまでの間を5回繰り返す命令だよ。Jの値は、1回繰り返すごとに、一つずつ増えていくよ。
130 A=INKEY() これは、第7回でも使ったキーボードで入力されたキーを数値で返す命令だよ。左向き「←」は「28」、右向き「→」は「29」が割当てられているよ。
140 IF A=28 THEN X=-1 ここでは、左向き「←」が押された場合の処理として、Xの箱の中に「-1」をセットしているよ。
150 IF A=29 THEN X=1 ここでは、右向き「→」が押された場合の処理として、Xの箱の中に「1」をセットしているよ。
160 LOCATE C+X, D ここでは、押されたキーに応じて、現在の位置から横方向に右や左に移動するよ。縦方向は一番下で固定だよ。
170 PRINT CHR$(#F9) ここでは、「人」のキャラクタを指定された場所に表示するよ。
180 C=C+X これは新しく動いた位置を次の位置の計算のために記憶しておくよ。
190 X=0: A=0: ここでは、左右の移動距離、押されたキーの値をゼロに戻しているよ。
200 WAIT 5 ここでは表示のための時間をかせいでいるよ。
210 NEXT ここでは、120行目のFOR まで戻って繰り返し作業をするよ。
220 NEXT ここでは、50行目のFORまで戻って繰り返し作業をするよ。

できあがったら、RUNで実行してみよう。
落ちてくる「イチゴ」をキーボードの矢印キー「←」と「→」を使った一番下で待ち構えながら追いかけてみよう。
上手く左右に動かせるかな。

余裕がある人は、落ちてくるキャラクタを「イチゴ」から別なキャラクタに変えてみたり、追いかけるキャラクタを「人」から別なキャラクタに変えてみよう。

あるいは、落ちてくるスピードや、追いかける際の左右の動きのスピードを変えてみよう。