りょうのゲーム塾 -77ページ目

りょうのゲーム塾

再開、準備中。



今日もブロックとにらめっこ。。。
この写真では部屋に置ける家具の限界が500個に対し
406個のブロックを置いています。


。。。このスケールで作るとブロックが不足するのは目に見えてる。。。

どうする。。。俺!!
今回は前回の応用でできると思います。

通路にいるプレイヤが指定された方向に進めるか、
判定するプログラムはどうなるでしょうか?

ここでプレイヤの位置を保存する変数をPX,PYとします。
プレイヤが右に進むためには右キー(ボタン)が押されている必要がありますが、
押されていたとしても右に壁があったら進めません。

要するに進めるか判定する必要があります。

すでに位置X,Yのマップデータが通路かどうかをチェックする
MAPCHKTサブルーチンがあるのでそれを利用します。

ここでは右に進めるか判断するサブルーチンを作成してみましょう。

MAPCHKTサブルーチンは変数X,Yの位置を調べ変数MAPRESに、
通路であれば0そうでなければ1が代入されて帰ってきます。

この条件で右に移動できるかどうかを判定するプログラムは、

X=PX+1
Y=PY
GOSUB @MAPCHKT
IF MAPRES GOTO @L0001
LOCATE PX,PY
PRINT ” ”;
PX=X
LOCATE PX,PY
PRINT ”人”;
@L0001

プレイヤの右を調べたいので調べる位置X,Yは
プレイヤのX座標がPX+1となります。

MAPCHKTサブルーチンで判定して壁だった場合には次のステップへ進みます。
通路だったら現在位置のプレイヤを消して、プレイヤ位置の更新をし、
その位置に人を表示します。
プログラムを作る場合、ただプログラムを書けばいいのかというと、そうではありません。

まず必要なのはエラーを修正しプログラムが動作できるようにしなけらばなりません。

動作してもプログラムにバグがある場合にはデバッグというバグを修正していく工程が必要です。

バグを見つけるためには実際にプログラムを実行しなければなりませんが、
ゲームを作っている場合には、バグのあるプログラムを組み込むのは危険なため、
一旦、テストを行うためのテストプログラムを作ることをお勧めします。

前回のMAPCHKTサブルーチンのテストを行うテストプログラムを作ってみましょう。

では、どんなテストプログラムを作りますか?


テストプログラムサンプル1

DIM MAP$(9)
RESTORE @MAPDATA
FOR I=0 TO 8
READ MAP$(I)
NEXT I

CLS
FOR I=0 TO 8
LOCATE 0、I
PRINT MAP$(I);
NEXT I
’ここからテストプログラムです
X=1
Y=1
GOSUB @MAPCHKT
IF MAPRES GOTO @ENDLOOP
LOCATE X,Y
PRINT ”人”;
’ここまでがテストプログラムです
@ENDLOOP
GOTO @ENDLOOP

@MAPCHKT
MAPRES=1
GOSUB @GETMAPDT
IF C$=”壁” THEN RETURN
NAPRES=0
RETURN

@GETMAPDT
C$=MID$(MAP$(Y),X,1)
RETURN

@MAPDATA
DATA”壁壁壁壁壁壁壁壁壁”
DATA”壁       壁”
DATA”壁 壁 壁 壁 壁”
DATA”壁       壁”
DATA”壁 壁 壁 壁 壁”
DATA”壁       壁”
DATA”壁 壁 壁 壁 壁”
DATA”壁       壁”
DATA”壁壁壁壁壁壁壁壁壁”


上記のテストプログラムは座標(1,1)の位置に”人”
(ただし、これはプチコンでは人型のキャラクタ)を表示します。
ただ、指定された位置が人が歩ける通路であれば人を表示します。
もし、完全にテストするのであれば下記のようにした方がより良いと思います。



テストプログラム部分だけ記述します。

’ここからテストプログラムです
FOR Y=0 TO 8
FOR X=0 TO 8
GOSUB @MAPCHKT
IF MAPRES GOTO @L0001
LOCATE X,Y
PRINT ”人”;
@L0001
NEXT X
NEXT Y
’ここまでがテストプログラムです

このプログラムはマップすべての位置をチェックし、
人が通れる場所に人を表示します。