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

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

プログラムリストの意味を解析
第4・5ブロック(520行〜700行 720行〜770行)



変数A、B、C、Dに初期値を入れています。

変数AはRND関数を使い、1〜29までの数字のどれかが入ります。



PLAY文ですが、設定だけ行っています(鳴りません)。



720行からのサブルーチンへ飛びます(第5ブロックになります)。

プログラムどおりに、解析も第5ブロックに飛びます。



「 AMIDER(アミダー) その12 」の480行と似ています。

変数Vには、ある指定した場所のキャラクターコードを調べていて、それが145なら変数Bに1を加えます。

145というキャラクターコードは何か調べてみましょう。



下に向いたロープでした。

「下に向いたロープならば、変数Bに1を足す」ということは、AD+A+B*32という式もあることで、変数BはY座標を示しているようです。

ということは、変数AはX座標でしょうか。



変数Dに1を加えて、2で割ったあまりが0なら、プレイ文で「ドソ」と鳴らします。



STICK関数で、カーソルキーの右が押されていてかつ、変数Xが29より小さければ、1を加える。

これは、自分の操作するキャラクターの右移動の処理です。

右が押されていて一番右に居なければ、右に移動。



これは、カーソルキーが左に押されている処理。



エイリアンのスプライトを表示しています。

ここで、変数Aと変数BはそれぞれX座標とY座標ということが、はっきりしました。

それぞれ8倍するのは、キャラクター座標をスプライト座標へ変換する為です(キャラクターは8*8ドット)。

変数Dを2で割ったあまりをパターンに当てて、交互にパターンを表示させるようです。



マイキャラクタのロープのパターンを表示しています。

上下には動かないのでY座標は固定で159、このX座標もキャラクター座標をスプライト座標へ変換する為で、8倍しています。

最後にRETURN文で550行に戻ります。



今度は変数Vが146ならば570行へ飛び、そうでなく148なら640に飛びます。

146というキャラクターコードは何か調べてみましょう。



右につながるロープのパターンでした。

148というキャラクターコードは何か調べてみましょう。



左につながるロープのパターンでした。

ということは、ここは2つのロープのパターンに着いた時に、それぞれの処理へ飛ぶようにしているようです。



550行のIF文のどちらでもなければこの560行の処理になり、540行へ飛びます。

540行はGOSUB 720で先程のサブルーチンへ飛びます。



こちらもサブルーチンへ飛びます。

560行と同じと思いますが、プログラムの位置が違います。

560行の実行の後は550行からとなり、570行の実行後は580行からとなります。



変数Vが146か147ならば、変数Aに1を足して、変数Cをゼロクリアします。

146というキャラクターコードは何か調べてみましょう。



右につながるロープのパターンでした。

147というキャラクターコードは何か調べてみましょう。



横に伸びるロープのパターンでした。

この2つのパターンならば、変数Aに1を加えることで横に移動します。

変数Cは何かのフラグでしょうか?



変数Cがゼロでかつ、変数Vが148なら、変数Bに1を加えて、変数Cを1にします。

148というキャラクターコードは何か調べてみましょう。



左につながるロープのパターンでした。

このパターンに来たら、Y座標に1を加え(下に移動)すると言う事ですね。

ここで、変数Cが0ならというチェックはどういうことかを考えてみると、このパターンの場合は「右から来た」のか「上から来た」のかという2つの状態があります。

それを区別する為に変数Cに0か1を入れているとすれば、この場合はしたい移動させるということで、横(左)から来た事になる為、変数Cが0だと横移動という状態になります。

580行の変数Cの扱い方もこの考え方であてはまると思います。



変数Cが1でかつ、変数Vが148なら640行に飛べとあります。

この場合、変数Cが1ということは、縦移動という状態で、左につながるロープのパターンに来た時の処理だと思います。



ここは、変数Vが224でかつ、RND(1)<0.2だと、変数Aに1を加えます。

224というキャラクターコードは何か調べてみましょう。



赤い玉のキャラクターでした。

ここは、赤い玉の位置に来たときにRND(1)<0.2の確立で右に進める事になります。



変数AとXが同じでBが20の時というのは、エイリアンが操作するロープと重なった事を意味しています。

そうなら790行(成功の処理)へ飛び、そうでなく変数Bが20のときだけ、830行(ミスの処理)に飛びます。



こちらもサブルーチンへ飛びます。



こちらもサブルーチンへ飛びます。



サブルーチンの処理を終えたらこの処理を行います。

148というキャラクターコードは、



147というキャラクターコードは、



で、

変数Aに1を引くことで、左に移動という事になります。

変数Cに0を入れることで横移動の状態を表します。



変数Cが0(横移動)でかつ、変数Vが146だと、変数Bに1を加えて、変数Cを1にします。

146というキャラクターコードは、



横(左)移動中で、このキャラクターパターンなら、下へ移動する処理をするという事になります。



変数Cが1でかつ、変数Vが146(右につながるロープのパターン)ならば、570行へ飛びます。



ここも先程と同じように左移動の時の赤玉の処理です。



ここも620行と同じで、エイリアンがロープに渡れたか、渡れていないかのチェック&分岐です。

気付いた方もいるかもしれませんが、570行から630行と640行から700行が対称的になっていることがわかります。



640行へ飛びます。



区切りのアポストロフィーです。

エイリアンの移動とプレイヤーの移動処理が主な処理でした。

エイリアンやキャラクターのチェックではキャラクター座標で行い、表示するときにその座標を8倍する事で可能な事がわかりました。

また、ロープのパターンをVRAMから読み込んだキャラクターパターンでチェックしてどのように動くのかという、アミダの動きがプログラムを読むことで理解できました。

特に分岐のロープでは、横から来たのか縦から来たのかということを表す為に変数Cを使って、0か1という数字でチェックするテクニックを知りました。

次は最後の第6・7・8ブロックを解析します。

第6ブロックは790行からの成功の処理で、第7ブロックは830行からのミスの処理です。


 

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