プログラムリストの意味を解析
第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行からのミスの処理です。
|