[ AMIDER(アミダー) その12 ]

※途中で戻りたい場合は、ブラウザの「戻る」機能を使ってください。

プログラムリストの意味を解析 第3ブロック(400行〜500行)




変数の初期化(初期設定)を行っています。

「AMIDER(アミダー) その6」でわかったことは、LとL1はレベル、Sはスコア、Xはわかりません。


ゲームの画面づくり


以後、ゲーム画面を設定していますので、1行ずつ読んで内容を理解していきます。

確認のために、ここでもう一度ゲーム画面を示しておきますので、参考にしてください。





FOR文でキャラクター座標(0,20)と(0,21)にSTRING$を使って”く”(ここでは青いブロックのキャラクタ)を31個並べています。

画面の下にある2列分の青いブロックを描いています。



次はFOR文でキャラクターX座標22と23、Y座標1から4ずつ増加させて29までに、”あ”(ここではロープのキャラクタ)を描いています。

青いブロックの下側にあるロープを描いています。



「AMIDER(アミダー) その6」でわかったように変数Fはミスの数とT(こちらは不明)をゼロクリアし、レベルについての処理をし、大きなレベルが3ならば980行に飛びます。

980行以後を表示してみます。






ゲームクリア(ゲームオーバー)の処理ですね。



「AMIDER(アミダー) その6」でもわかったように、レベル、スコア、ミスを一番上に表示しています。



LOCATE文でキャラクタ座標1〜19のY座標に、X座標は1〜29までの4刻みでロープのキャラクターを表示してます。



FOR文があるのにNEXT文がないので、以後を見て行きます。



DEFINTで定義された変数Kに、ランダムでRND(1)*17+2で2〜18までの数字を代入させています。



VPEEKは式のアドレスのVRAMの内容(0〜255の8ビット)を得る命令で、「AMIDER(アミダー) その10」でわかったように、アドレスで「どこに?」を等式で評価して、「何が書き込まれているか?」を得る事によって、キャラクターの表示場所と種類を調べています。

アドレスからみてみますと、変数ADは&H1800でキャラクタ座標の始まりのアドレスを表し、Jは1から4刻みで25までのロープを描く間隔を、Kはランダムで2から18までで、1段に32キャラクタを描ける為、それに32をかけています。

また評価するキャラクタ番号の146と148は、キャラクタを表示させてみればわかります。



146は146÷32で5段目の19番目のキャラクタで、148は21番目のキャラクタとなります。

ためしに表示させて見ましょう。

まずは146番のキャラクタです。



右側へつながりのあるロープのパターンが表示されました。

次は、148番のキャラクタです。



左につながりのあるロープのパターンが表示されました。

VPEEKのアドレスにこのパターンがあれば470行へ飛び、またランダムで数字を拾う事になります。



IFぶんで大きなレベルが1でランダムで拾った数が、0.7よりも大きかったら、先程チェックしたキャラクター座標(J,K)に”いうたうえ”(ロープの横つながりパターンで赤玉が途中にある)を表示、そうでなければキャラクター座標(J,K)に”いうううえ”(ロープの横つながりパターン)を表示させています。

このことから、赤玉は、L1(大きなレベル)が1でないと出てこない事がわかります。



ここで、FOR文の対になるNEXTが書かれています。

ここで、もう一度460行を振り返ってみると、



最初のFOR文で、小さいレベルの変数Lの数だけ繰り返しが行われることで、ロープの横つながりの数が増えるしくみになっています。

そして、キャラクターパターンのチェックをする480行の内容を考えてみます。



最初のVPEEK(AD+J+K*32)=146は右につながるロープパターンをチェックする事で、書き込みのダブりをチェックしています。

次のVPEEK(AD+J+4+K*32)=146はチェックした場所の4ブロック先隣のロープに右につながるパターンがある場合は、横のロープが2本続いてしまう事をチェックしています。

最後のVPEEK(AD+J+K*32)=148は左につながるロープパターンをチェックする事で、2本続いてしまうことをチェックしています。

画面を描くしくみが理解できました。

次は第4ブロックに入ります。

 

Copyright(C) 2006. ピコピコテクノロジー All Right Reserved.