ひろじいべーしっくch 第17回の動画の解説・補足。(0-017)
プログラム
今回のプログラムはこちら。(公開キー443E4X1、LOAD“N17_UFOCAT”)
本プログラム、「UFOキャット」は、おもちゃをUFOにつながれた猫で掴むゲームです。
このブログにおいてはなるべく専門用語を使用せずに非常に短く簡潔に説明しています。
命令やMML言語の内容など、一部の内容を省略している箇所があります。
詳細を知りたい方は公式リファレンス等も参照してください。
なお、今回は新しい命令の登場はありません。
動作の説明(ゲームの説明)
右ボタンで右に移動。Aボタンで手前に移動です。
これで説明は終わりなのですが、このゲームはちょっとクセがあります。以下、詳細な説明です。
ゲームの説明0(場所等の準備的な説明)
2次元の画面ですが、前後(奥行き)を無理矢理表現しています。
↑動画の2分9秒あたり。
奥4が一番奥、奥1が一番手前です。
↑動画の2分11秒あたり。(奥4のおもちゃの位置の説明)
↑動画の2分12秒あたり。(奥3のおもちゃの位置の説明)
↑動画の2分14秒あたり。(奥2のおもちゃの位置の説明)
↑動画の2分15秒あたり。(奥1のおもちゃの位置の説明)
ゲームの説明1(右に移動。そして前後の位置の決定。)
起動後、まず右に進ませるために「→」(右ボタン)を長押し。離すとUFOが止まります。一度進んだ場所は後戻りできません(「←」(左ボタン)は使用できません)。
UFOが停止した後、Aボタンで手前に「奥4」から「奥1」に、奥から手前に移動し始めます。
なお、右上に「奥4」から「奥1」まで表示がされますが、現在の位置を正しく表示しているのですが、表示された時点で次の手前の位置の処理に進んでいるので、Aボタンを離したとき(位置を決定した時には)その表示の一つ手前の位置(一つ進んだ位置)で決定します。
↑“奥”の表示の位置(画面右上の表示、「奥2」の例。)
「奥4」のおもちゃを狙いたい時には、画面の右上に何も表示されていない内にAボタンを離す(0.5秒くらい)ことで「奥4」に決定します。
「奥1」のおもちゃを狙いたい時には、画面の右上に「奥2」又は「奥1」が表示されている内にAボタンを離すことで「奥1」に決定します。(「奥0は存在せず、ガラスの壁があるという想定で、エラーにはならない。」)
なお、ゲーム内にも「コツ:Aボタンを離した時には奥にさらにひとつずれるので、ひとつ手前でAボタンを離す。」と表示しています。(時間的な「ひとつ手前」と混同した表現になっていますね。場所的には奥から手前に移動しているので、「コツ:Aボタンを離した時には手前にさらにひとつずれるので、ひとつ奥でAボタンを離す。」の方が正しい表現かもしれません。でもこちらも伝わりにくい表現ですね。すみません。)
ゲームの説明2(クレーンを下げる。)
あとは自動です。はたしておもちゃを取れるかどうか。
↑動画の8分58秒あたり。(おもちゃとの中心とのズレの許容範囲はグラフィック上で+―10)
動作の説明(プログラムの説明)
↓おおまかな動作の説明です。
なお、大幅に単純化していますので、正確なフローチャートではありません。主要なラベルのグループを中心に分けて説明しています。
上記の図で内容を留めておきますが、ここでは判定部分のサブルーチンのところだけ説明しておきます。
↑判定部分のサブルーチンです。(59行から66行目。)
スタート時からXに60を加えた値が猫の横の座標位置なので、プラスマイナス10の範囲の判定は、Xに50から70を加えた範囲になっています。
変数Zは前後の位置です。
サブルーチン内では、FOR~NEXT文の中の変数Iで全てのおもちゃをチェックしています。
↓実行画面
↑動画の1分31秒あたり。
↑動画の1分56秒あたり。
まとめ
今回はゲーム内の「コツ」として表示したこのゲームの革新的な部分につき、奥から手前に移動しているにも関わらず、手前から奥に移動している様な表現になっていたことについてはお詫びいたします。なお、訂正したところで「一つ奥で離す」という表現も伝わりにくいものだという点で、しばらくは現状のままにしておきますが、もし問題であるという意見のお持ちの方は遠慮なくご意見をいただきたいと思います。今後ともよろしくお願いいたします。
コメント