MakeCode Arcade Twitterネタゲーム第3弾 「楽園への扉 女子会最終防衛線」を作ってみた

プログラミング

毎回恒例となりつつある女子会をテーマにしたMakeCode Arcadeのネタゲーム、今回も女子会開催に合わせて作りました。

ちなみに前回のネタゲームは「足を止めるな! ~女子会潜入大作戦!!~」でした。

第1弾は女子会を守る側の視点、第2弾は女子会へ侵入をもくろむ視点で作りました。

なので今回は女子会を守る側の視点で作る事にしました。

ゲーム内容

今回のゲームでは第1弾同様女子会に向かってくる男どもを警官(役のスヌーピー)が次々と捕まえるという物です。

ゲーム画面

「A」ボタンを押す事で手錠を投げ、その手錠が当たると捕まえた事になります。

手錠は「A」ボタンを押している長さで投げる強さが決まります。(長く押していると遠く、短く押すと近くに投げる)

下のバーが投げる距離の目安になるようにしています。

男どもが扉に到達するとライフは減っていき、ライフが無くなるとゲームオーバーです。

また手錠には投げられる数が存在し、0になると投げられなくなります。(無駄うち注意です)

手錠の数は時間とともに少しずつ増え、敵を倒しても少し増えます。

ある程度の男どもを捕まえるとボスが現れます。

ボス登場

ボスを倒せば女子会を守り切ったとしてゲームクリアになります。

プログラムの内容

このゲームのプログラムについて紹介します。(ブロック数が多いのでかなり端折ってます)

「最初から」ブロック

背景色の設定と関数「タイトル画面」を呼び出しています。

「最初から」ブロック

「関数「タイトル画面」」ブロック

タイトル画面の表示からユーザーの入力受付までを行います。

「関数「タイトル画面」」ブロック

背景画像の設定とタイトル文字、カーソルを表示しています。

各種変数は現在の状況を把握するために設定しています。

タイトル画面

変数「フェーズインデックス」はゲーム全体の今のフェーズを示し、タイトル画面は「フェーズ0」としています。

変数「タイトル操作フラグ」はタイトル画面での操作をうけつけるかどうかのフラグです。

タイトル画面に動き(後からタイトル文字が表示される)を付けてから操作を受け付けるようにするための制御用フラグです。

変数「カーソル位置」はカーソルが何を示しているかを保持するためです。

「EASY」は「1」、「NORMAL」は「2」、「HARD」は「3」というように割り振っています。

「ゲームが更新された時」ブロック

フェーズによりそれぞれの常に動き続ける処理を実装しています。

「ゲームが更新された時」ブロック(全体)

「フェーズインデックス」が「1」はゲーム中の処理です。

「ゲームが更新された時」ブロック(フェーズ1,2)

関数「ゲーム更新処理(ゲーム中)」を呼び出しています。

「フェーズインデックス」が「2」はゲームオーバー時の処理です。

関数「ゲーム更新処理(ゲームオーバー)」を呼び出しています。

変数「ゲームオーバーシーン」「処理送り」にて動きのあるゲームオーバー画面を表現しています。

「フェーズインデックス」が「3」はゲームクリア時の処理です。

「ゲームが更新された時」ブロック(フェーズ3)

関数「ゲーム更新処理(ゲームクリア)」を呼び出しています。

変数「ゲームクリアシーン」「処理送り」にて動きのあるゲームクリア画面を表現しています。

各キャラクター毎の「エンドロール~」ブロックでは画像の反転を繰り返して動きを付けています。

「Aボタンが押した時」ブロック

タイトル操作フラグおよびフェーズによりそれぞれのAを押した時の処理を実装しています。

「Aボタンが押した時」ブロック

タイトル画面では難易度選択での決定ボタンとして動作します。

難易度決定後はゲームが始まるように関数「ゲーム画面」を呼び出しています。

関数「ゲーム画面」呼出し後はフェーズインデックスをゲーム中フェーズの「1」にしています。

ゲーム中のフェーズインデックスが「1」の場合は手錠を投げるチャージを開始します。(ただし、手錠の残りが0より大きい場合に限る)

ゲーム内容で紹介した通りAボタンを押している時間で投げる距離を変化させる必要があるため、Aボタンを押した時はチャージを開始するようにしています。

ゲームオーバー画面からタイトルに戻る時はフェーズインデックス「2」として動作します。(ゲームオーバー画面からタイトル画面に戻せるタイミングでゲームオーバーシーンが「5」となるのでその条件に一致した場合のみ)

関数「ゲームをリセット」を呼び出しています。

ゲームクリア画面からタイトルに戻る時はフェーズインデックス「3」として動作します。(ゲームクリア画面からタイトル画面に戻せるタイミングでゲームタイトルシーンが「99」となるのでその条件に一致した場合のみ)

関数「ゲームをリセット」を呼び出しています。

「Aボタンがreleased時」ブロック

フェーズによりそれぞれのAを離した時の処理を実装しています。

「Aボタンがreleased時」ブロック

ゲーム中のフェーズ「1」でのみ実装しています。

ゲーム中に「A」を押した時に開始したチャージ時間が開始している時に警官が手錠を「A」を押していた時間に合わせて距離を変えて発射しています。

手錠は変数「手錠の数」に保持されているので1つ減らし、手錠の数を表示しています。

手錠を投げたのでチャージは初期値にもどしています。

まとめ

プログラムの説明の途中ですが長くなってしまったので今回は一旦ここまでとします。

次回は続きから紹介していきます。

続きはこちらから。

  ↓現在MakeCode Arcadeを学べる唯一の書籍です。

コメント

タイトルとURLをコピーしました