
※途中で戻りたい場合は、ブラウザの「戻る」機能を使ってください。
プログラムリストの意味を解析 第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.