DATA文はプログラム中に沢山データを記述する場合に使用します。
DATA 97,100,97,97,100,101,0
DATA文自体は何も処理をしません、DATA文の基本的な使い方は、変数に読み出して使います。
DATA文に記載されたデータを読みだすのがREAD命令です。
READ NO
? NO
これで先頭のデータが変数 NO に読み出され、それを表示しています。
READ命令を連続で行えば、DATA文の続きを読み出せます。
READ NO:? NO
READ NO:? NO
READ NO:? NO
READ NO:? NO
毎回こんな記述をしたのではDATA文にした意味が無いので、ループ処理の中で読み出します。
FOR I=0 TO 6
READ NO
? NO
NEXT
この場合FOR文で7回ループして読み込んでいます。
もし、8回読み込んでしまうとデータが無いのでエラーになります。
DATAの最後まで読み込み、その後、更に読み出そうとすると、データが無いためエラーになるのです。
データの数が予め決まっているのなら、これでも良いでしょう。
ですが、DATA文に書くデータは大抵、不特定多数です、有れば有っただけ読み出して使いたい。
そこでDATA文に記述するデータの最後に、「ここでデータの終わりだよ」とする印しとして、
たとえば-1を書いておきます。
DATA 97,100,97,97,100,101,0,-1
無限ループで読み出しして、読みだしたデータが-1なら、ループを抜ければ良いのです。
WHILE 1
READ NO
IF NO < 0 THEN BREAK '変数 NOがマイナス値ならループを抜ける
? NO
WEND
この例では、読み出したデータをそのまま文字で表示しました。
BG画面に地面を表示したいならばBGPUT命令を使います。
L=0:X=12:Y=8:NO=100
BGPUT L,X,Y,NO '←画面中央に林のBGキャラを表示
データを読み込んでBGに表示
DATA 97,100,97,97,100,101,0,-1
L=0:X=0:Y=0
WHILE 1
READ NO
IF NO < 0 THEN BREAK
BGPUT L,X,Y,NO '←読み出したNOのBGキャラを表示
X=X+1 '次のBGの表示位置を1つ右にずらしている
WEND
この例では、BGを横一行しか表示していません。
縦方向にもBGを敷き詰めたいなら、DATA文に「ここで1行の終わりだよ」とする印しとして、例えば 0 を書いておきます。
DATA 97,100, 97, 97, 99, 99,0
DATA 100,100,100, 97, 97, 97,0
DATA 101,101,101,100,100, 97,-1
読み込んだデータが 0の場合、1行下に移動し、更に左端に移動して、続きのBGキャラを表示すれば良いのです。
L=0:X=0:Y=0
WHILE 1
READ NO
IF NO < 0 THEN BREAK
IF NO ==0 THEN Y=Y+1:X=0 '←Y軸を一つ下に移動し、X軸を左端に移動している
BGPUT L,X,Y,NO
X=X+1
WEND