サンプルの修正をお願いします。
修正点は下記の通りです。
0440行
誤)GETDYR
正)GETDIR
0447行
誤)_R(_R2)~DIR
正)_R(_R2)=DIR
それでは今回のサンプルの解説を行います。
今回のサンプルでは汎用的に使うであろうサブルーチンを
ライブラリとして管理していきます。
ゲームに限らずプログラムは各アプリケーションに固有なプログラムと
アプリケーションに共通なプログラムとに分ける事ができます。
共通のプログラムを毎回作成していれば効率が悪くなるので、
これらをライブラリとして管理し、
必要な時にプログラムの一部として利用します。
今後のプログラム作成が楽になるように
こういったライブラリを作成しておくと便利です。
またライブラリは後で再利用するので
そのルーチンがどのようなことをするのか
その他に注意することはないかを
記述しておくと便利です。
今回のルールとして下記の項目を記述することにします。
【名前】サブルーチンの名前
【処理】サブルーチンの処理概要
【入力】サブルーチンを呼び出す前にセットしておかないといけない変数と値の内容
【出力】サブルーチンから復帰したときに指定の変数に返された結果
【破壊】サブルーチンを呼び出すことで値が変化する変数
今回から追加されるライブラリは完成したものでなく
今後も追加されます。
内容は変化しますので気をつけてください。
ライブラリで使用する変数が
アプリケーションと同じものを使用すると
バグとなる事があります。
そこでライブラリで使用する変数は
名前の先頭にアンダーバー(_)をつける規則にし
アプリケーションでは先頭にアンダーバーを使用しない規則にします。
また、アプリケーションでは単純な一時的変数を常時使用します。
一時的な変数を一般的にレジスタと呼びますので
変数R*(*は数字)をレジスタとして使用します。
それでは現状のライブラリの内容は次の通りです。
【名前】LIB_INIT(LIBrary INITialize)
【処理】ライブライの初期化
【入力】なし
【出力】なし
【破壊】なし
【名前】GETMAPDT(GET MAP DaTa)
【処理】指定したマップの座標位置のマップデータを取得する
【入力】X=x座標
Y=y座標
【出力】C$=マップデータ(文字)
【破壊】なし
【名前】MAPCHKW(MAP CHecK Wall)
【処理】指定したマップの座標位置のマップデータが壁であるかチェックする
【入力】X=x座標
Y=y座標
【出力】F=壁フラグ(0:壁でない、1:壁である)
【破壊】なし
【名前】GETSPACE(GET SPACE position)
【処理】マップの中のスペースの座標位置を取得する
【入力】なし
【出力】X=x座標
Y=y座標
【破壊】なし
【名前】GETDIR(GET DIRection)
【処理】指定された座標の上下左右のうち移動できる方向をランダムに選択しその方向を返す
【入力】X=x座標
Y=y座標
【出力】DIR=方向(1:上,2:右,3:下,4:左)
【破壊】なし
【名前】GETKEY(GET direction KEY)
【処理】方向キーの状態を返す
【入力】なし
【出力】R0=方向(0:押されていない,1:上,2:右,3:下,4:左)
【破壊】なし
【名前】UPDPOS(UPDate POSition)
【処理】指定された方向へ座標を移動する
【入力】DIR=移動方向
X=移動前のx座標
Y=移動前のy座標
【出力】X=移動後のx座標
Y=移動後のy座標
【破壊】なし