解答例1
@MAPCHKT
GOSUB @GETMAPDT
IF C$=”壁” GOTO @L001
NAPRES=0
RETURN
@L001
MAPRES=1
RETURN
解説
最初にすでに紹介した@GETMAPDTサブルーチンを
使用するものと仮定しましょう。
このサブルーチンは指定位置(X,Y)のキャラクタをC$に返します。
そのキャラクタが通れないキャラクタだったら@L001へジャンプ
そうでないときは通れるキャラクタなのでMAPRESに0を入れて帰ります。
@L001はラベルを毎回考えているのが面倒なので重要でないラベルは
一時的な名前をつけておきます。
@L001以降は通れないキャラクタだったのでMAPRESに1を入れて帰ります。
解答例2
@MAPCHKT
MAPRES=1
GOSUB @GETMAPDT
IF C$=”壁” THEN RETURN
NAPRES=0
RETURN
解説
これは解答例1とほとんど同じですが、
サブルーチンの最初にMAPRES変数に1を代入した後で
通れないキャラクタの判定をします。
通れない場合にはRETURNで戻ればMAPRES変数には1が入っています。
最後にそうでない場合に0を代入して戻ります。
このサブルーチンは余計なラベルが減るのでプログラムが見やすくなります。
ではマップのデータを元にゲームで必要になるかもしれない判定について考えてみたいと思います。
【通路・壁判定】
指定した位置が通路であるか壁であるかを判定する。
使用例1
プレイヤを初期設定する場合、プレイヤは通路の位置に置く必要があるため、
指定位置が通路であるか判定したい。
使用例2
通路にいるプレイヤが指定された方向に進めるか判定したい。
この判定をする時必要になるものを考えてみましょう。
必要なものはすべてにおいてマップの調べたい位置が必要です。
ここで位置を代入する変数をXとYとしましょう。
指定された位置が壁なのか、通路なのかを判定し、
それを返してくれる変数が必要です。
言い換えるとプレイヤなどが通れるか通れないかですね。
今はマップに通路(空白)と壁しかないので、
マップのキャラクタを判定するだけで良いのですが、
今後判定するものが増えるかもしれません。
そこで判定するサブルーチンを使い判定結果を数値で返すようにします。
判定結果はMAPRES(MAP RESult)という変数に代入して返します。
このサブルーチンを@MAPCHKT(MAP CHecK Type)とすると
このサブルーチンを呼び出す方法は。。。
X=調べたい位置のX座標
Y=調べたい位置のY座標
GOSUB @MAPCHKT
IF MAPRES GOTO @NOTMOVE ←(移動できない場合)
(移動できる場合)
となります。
では、この@MAPCHKTのプログラムを作成してみてください。
回答は次回。。。
【通路・壁判定】
指定した位置が通路であるか壁であるかを判定する。
使用例1
プレイヤを初期設定する場合、プレイヤは通路の位置に置く必要があるため、
指定位置が通路であるか判定したい。
使用例2
通路にいるプレイヤが指定された方向に進めるか判定したい。
この判定をする時必要になるものを考えてみましょう。
必要なものはすべてにおいてマップの調べたい位置が必要です。
ここで位置を代入する変数をXとYとしましょう。
指定された位置が壁なのか、通路なのかを判定し、
それを返してくれる変数が必要です。
言い換えるとプレイヤなどが通れるか通れないかですね。
今はマップに通路(空白)と壁しかないので、
マップのキャラクタを判定するだけで良いのですが、
今後判定するものが増えるかもしれません。
そこで判定するサブルーチンを使い判定結果を数値で返すようにします。
判定結果はMAPRES(MAP RESult)という変数に代入して返します。
このサブルーチンを@MAPCHKT(MAP CHecK Type)とすると
このサブルーチンを呼び出す方法は。。。
X=調べたい位置のX座標
Y=調べたい位置のY座標
GOSUB @MAPCHKT
IF MAPRES GOTO @NOTMOVE ←(移動できない場合)
(移動できる場合)
となります。
では、この@MAPCHKTのプログラムを作成してみてください。
回答は次回。。。
問題
マップデータを読み込み表示するプログラムを作成しなさい
解答例
マップデータを読み込み表示するプログラムを作成しなさい
解答例
’
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
END
@MAPDATA
DATA”壁壁壁壁壁壁壁壁壁”
DATA”壁 壁”
DATA”壁 壁 壁 壁 壁”
DATA”壁 壁”
DATA”壁 壁 壁 壁 壁”
DATA”壁 壁”
DATA”壁 壁 壁 壁 壁”
DATA”壁 壁”
DATA”壁壁壁壁壁壁壁壁壁”