目次
前
次
画面版モグラたたき
IchigoJamでゲームとなると「川下り」が、有名です。
乱数を利用して、モグラたたきをゲームとして
作成してみます。
モグラは、5匹出します。
キャラクタを表示するには、命令はLOCATEを利用
しますが、略式ではLCを使います。
100 @SHOW
110 LC 12,12
120 R=RND(5)+1
130 IF R=1 ?"@____",R
140 IF R=2 ?"_@___",R
150 IF R=3 ?"__@__",R
160 IF R=4 ?"___@_",R
170 IF R=5 ?"____@",R
180 WAIT 10
190 RETURN
動作テストするためのプログラムを
追加してみます。
10 ' test8
20 @LOOP
30 GSB @SHOW
40 IF BTN() GOTO @EXIT
50 GOTO @LOOP
60 @EXIT
70 CLS
80 END
100 @SHOW
110 LC 12,12
120 R=RND(5)+1
130 IF R=1 ?"@____",R
140 IF R=2 ?"_@___",R
150 IF R=3 ?"__@__",R
160 IF R=4 ?"___@_",R
170 IF R=5 ?"____@",R
180 WAIT 10
190 RETURN
モグラに見立てている@の位置は、Rの値で
表示されているので、キーボードから対応
する数字キーを入力したときに、ヒットと
考えます。
キー入力には、関数INKEY()を使います。
関数の動作テストをするプログラムは、以下。
10 ' test inkey()
20 @LOOP
30 K=INKEY()
40 ? K;
50 WAIT 30
60 IF BTN() GOTO @EXIT
70 GOTO @LOOP
80 @EXIT
90 END
このプログラムで動作確認すると、数字を押したのに
次のような値になってきます。
0 => 48
1 => 49
2 => 50
3 => 51
4 => 52
5 => 53
6 => 54
7 => 55
8 => 56
9 => 57
モグラの位置を示す値をもっているRは、1から6で
数値なので、数字を数値に変えるように、48をひいて
みます。
10 ' test inkey()
20 @LOOP
30 K=INKEY():K=K-48
40 ? K;
50 WAIT 30
60 IF BTN() GOTO @EXIT
70 GOTO @LOOP
80 @EXIT
90 END
このプログラムで、数字キーを押したなら
数値となってくることを確認できます。
数字から数値に変換できるので、人がキーを
押したなら数字に対応する数値を返すように
サブルーチンを作成。
200 @GETV
210 K=INKEY():K=K-48
220 RETURN
RとKの値が一致していれば、モグラを叩いたので
得点を増やしていけばよいはず。
サブルーチンで、判定と得点加算を処理。
300 @UPDATE
310 IF R=K S=S+10
320 LC 20,20:? S
330 RETURN
ゲームにするには、時間制限を入れておかないと
競い合うことができません。これを考えます。
CLTで時間をゼロにします。また、経過時間は
関数TICK()でわかるので、1分でゲーム終了
とすればよいでしょう。
判定と得点加算のサブルーチンに、経過時間を表示
するコードを追加。
300 @UPDATE
310 IF R=K S=S+10
320 T=TICK()
330 LC 5,20:? S,"time",T
340 IF T > 3600 G=0
350 RETURN
残っているのは、使う変数の初期化なので
サブルーチンにし、わかりやすくしておき
ましょう。
400 @INIT
410 CLS
420 S=0:G=1
430 CLT
440 RETURN
全体では、次のようになります。
10 ' test8
20 GSB @INIT
30 @LOOP
40 GSB @SHOW:GSB @GETV:GSB @UPDATE
45 IF G=0 GOTO @EXIT
50 IF BTN() GOTO @EXIT
60 GOTO @LOOP
70 @EXIT
80 CLS
90 END
100 @SHOW
110 LC 12,12
120 R=RND(5)+1
130 IF R=1 ?"@____",R
140 IF R=2 ?"_@___",R
150 IF R=3 ?"__@__",R
160 IF R=4 ?"___@_",R
170 IF R=5 ?"____@",R
180 WAIT 10
190 RETURN
200 @GETV
210 K=INKEY():K=K-48
220 RETURN
300 @UPDATE
310 IF R=K S=S+10
320 T=TICK()
330 LC 5,20:? S,"TIME",T
340 IF T > 3600 G=0
350 RETURN
400 @INIT
410 CLS
420 S=0:G=1
430 CLT
440 RETURN
目次
前
次