目次

画面版モグラたたき

 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


目次

inserted by FC2 system