Enjoy programming more!
Kidspod is a post site which supports young programmers.
First step to join us.
Register as a member
For members

2018/06/24 14:48:50

MixJuice GET URL : kidspod.club/mj/504

きほんのおいかけゲーム

ゲームを作るときの基本パターンっぽいものを作ってみました。

矢印キーで移動。画面の端に行くと反対側にワープします。
一定周期ごとに出る宝「*」を取ると得点になります。
敵「K」は、自分「M」を追いかけてきます。つかまるとゲームオーバーです。

自分がプログラムを始めたとき、いろいろ悩んだことを思い出して、書いてみました。
このプログラムをいろいろいじって(書き替えて)みてください。新しい発見があると思います。

いじったプログラムをKidspod;に投稿してくてたらうれしいです。

【説明です】

10 'キホン ノ オイカケ ケ゛ーム
20 CLS   'ゲームを始める前に、画面の文字を全部消します

行番号30から90までは、ゲームを始めるときに1回だけ使う設定です。
XとYを自分の位置を示すために使います。
30 X=10   '自分の横位置です
40 Y=10   '自分のたて位置です

ZとVを敵の位置を示すために使います。
50 Z=30   '敵の横位置です
60 V=20   '敵のたて位置です

そのほかのゲーム内で使う値(変数)の初期値を設定します。(変数の初期値は0なので、設定しなくてもいいです。)
70 T=0   '敵の動きを遅くするために使います
80 U=0   '宝を追加するタイミングに使います
90 S=0   '得点です。最初は0点です。

100 'シ゛フ゛ン ヲ ウコ゛カシマス
110 LOCATE X,Y:PRINT " ";    'これから自分を動かすので、その前に自分の表示を消します。
120 IF BTN(LEFT)=1 THEN X=X-1  'もし、左ボタン(レフト)が押されているならば、自分の横位置を1減らします。つまり左に動きます。
130 IF BTN(RIGHT)=1 THEN X=X+1  'もし、右ボタン(ライト)が押されているならば、自分の横位置を1増やします。つまり右に動きます。
140 IF BTN(UP)=1 THEN Y=Y-1  'もし、上ボタン(アップ)が押されているならば、自分のたて位置を1減らします。つまり上に動きます。
150 IF BTN(DOWN)=1 THEN Y=Y+1  'もし、下ボタン(ダウン)が押されているならば、自分のたて位置を1増やします。つまり下に動きます。

ここからワープ処理です。
160 IF X<1 THEN X=30 '自分が左端に来たら、右端に移動させます
170 IF X>30 THEN X=1 '自分が右端に来たら、左端に移動させます
180 IF Y<1 THEN Y=22 '自分がいちばん上に来たら、下の端に移動させます
190 IF Y>22 THEN Y=1 '自分がいちばん下に来たら、上の端に移動させます

宝を取ったか判断します。
200 IF SCR(X,Y)=ASC("*") THEN BEEP:S=S+10:LOCATE 0,23:PRINT "SCORE ";S;
'画面の自分の位置を調べます。宝の文字「*」があったら、下の3つの事をします。
・音を鳴らす
・得点(S)に10点足す
・画面の左下にSCORE(得点)を表示する

210 LOCATE X,Y:PRINT "M"; '横がX、たてがYの位置に自分を「M」の文字で表示します。

敵を動かします。敵が自分と同じ速さで動くと敵の動きが速すぎなので、3分の1の速さにします
220 '3カイ ニ イチト゛、テキ ヲ ウコ゛カシマス
230 T=T+1 '敵の動くタイミングを決める値(T)を1増やします。
240 IF T<3 THEN GOTO 330 'Tが3より小さいならば、敵を動かす処理(行番号250から310)を飛ばして行番号330に行きます。

250 LOCATE Z,V:PRINT " "; 'これから敵を動かすので、その前に敵の表示を消します。

ここから敵が自分を追いかけるところです。
自分と敵の横位置どうしを比べます。
260 IF X<Z THEN Z=Z-1 '自分の値が敵の値より小さいならば、敵の横位置を1減らします。つまり、敵は左に動きます。
270 IF X>Z THEN Z=Z+1 '自分の値が敵の値より大きいならば、敵の横位置を1増やします。つまり、敵は右に動きます。

自分と敵のたて位置どうしを比べます。
280 IF Y<V THEN V=V-1 '自分の値が敵の値より小さいならば、敵のたて位置を1減らします。つまり、敵は上に動きます。
290 IF Y>V THEN V=V+1 '自分の値が敵の値より大きいならば、敵のたて位置を1増やします。つまり、敵は下に動きます。

300 LOCATE Z,V:PRINT "K"; '横がZ、たてがVの位置に敵を「K」の文字で表示します。
310 T=0 '敵の動くタイミングを決める値(T)を0に戻します。

320 '50カイ ニ イチト゛タカラ ヲ ヒョウシ゛シマス
330 U=U+1 '宝を表示するタイミングを決める値(U)を1増やします。
340 IF U<50 THEN GOTO 380 'Uが50より小さいならば、宝を表示する処理(行番号350と360)を飛ばして行番号380に行きます。
350 LOCATE RND(30)+1,RND(22)+1:PRINT "*" '宝をランダムな場所(横位置 1から30, たて位置 1から22のどこか)に表示します。
360 U=0 '宝を表示するタイミングを決める値(U)を0に戻します。

370 'テキ ニ ツカマッタ?
380 IF X=Z AND Y=V THEN GOTO 410 '自分と敵の横位置とたて位置が同じならば、自分と敵が重なったということです。その場合、行番号410に行きます。
390 GOTO 110 '行番号110からの処理を繰り返します。

400 'ケ゛ームオーハ゛ー
410 LOCATE 11,10:PRINT "GAME OVER" 'ゲームオーバーを表示します。
420 END '終了します。プログラムの最後なので書かなくてもいいです。

(2019/06/06 IchigoJam BASIC 1.2.3と1.3.1で動作確認済)

  • 1
  • 1

SOURCE CODE

10 'キホン ノ オイカケ ケ゛ーム
20 CLS
30 X=10
40 Y=10
50 Z=30
60 V=20
70 T=0
80 U=0
90 S=0
100 'シ゛フ゛ン ヲ ウコ゛カシマス
110 LOCATE X,Y:PRINT " ";
120 IF BTN(LEFT)=1  THEN X=X-1
130 IF BTN(RIGHT)=1 THEN X=X+1
140 IF BTN(UP)=1    THEN Y=Y-1
150 IF BTN(DOWN)=1  THEN Y=Y+1
160 IF X<1  THEN X=30
170 IF X>30 THEN X=1
180 IF Y<1  THEN Y=22
190 IF Y>22 THEN Y=1
200 IF SCR(X,Y)=ASC("*") THEN BEEP:S=S+10:LOCATE 0,23:PRINT "SCORE ";S;
210 LOCATE X,Y:PRINT "M";
220 '3カイ ニ イチト゛、テキ ヲ ウコ゛カシマス
230 T=T+1
240 IF T<3 THEN GOTO 330 
250 LOCATE Z,V:PRINT " ";
260 IF X<Z THEN Z=Z-1
270 IF X>Z THEN Z=Z+1
280 IF Y<V THEN V=V-1
290 IF Y>V THEN V=V+1
300 LOCATE Z,V:PRINT "K";
310 T=0
320 '50カイ ニ イチト゛タカラ ヲ ヒョウシ゛シマス
330 U=U+1
340 IF U<50 THEN GOTO 380
350 LOCATE RND(30)+1,RND(22)+1:PRINT "*"
360 U=0
370 'テキ ニ ツカマッタ?
380 IF X=Z AND Y=V THEN GOTO 410
390 GOTO 110
400 'ケ゛ームオーハ゛ー
410 LOCATE 11,10:PRINT "GAME OVER"
420 END

COMMENT

Kidspod運営チーム
Kidspod運営チーム2018/06/29 19:07:32

追いかけてくる敵キャラクタが容赦ない! 一直線に追いかけてくるので安心できるヒマがなく、ドキドキものです。大変くわしい説明もありがとうございます。これが作れれば、アクションゲームの基本はマスターできそうです。