Twitter上のVBAer界隈で集まるZoom飲み会で初の女子会が企画されました。
この要項の中に「♡男子禁制」の文字があり、僕を含めてどうしたら参加できるかの討論がTwitter上で繰り広げられました。
そんな様子が面白かった(奇怪だった)ため、このネタゲームを作ってみようと思い作成しました。
ver.1の作成
ver.1と言ってもこの時はまだバージョンアップを考えていなかったので無印で作成しました。
内容としては画面の右側を女子会会場と見立て、画面の左側から会場へ向かっていく男共(Twitter上のアイコンをデフォルメしたキャラクター)を阻止するという単純なゲームです。
それでは中身を解説していきます。(「Show Code」「Edit Code」で中身を確認できます)
プログラムの中身を確認する前にまずはアセットの内容を見てみましょう。
アセットはこのプロジェクトで使うイメージを管理できるみたいです。
このver.1では4枚のイメージを使っているのですが2枚目が背景です。
背景は白いキャンパスに手書き(マウス)で「女子会」と書いた物を準備しました。
残りのキャラクターはそれぞれ元画像を見ながらドットを手打ちして作りました。(画像の取り込み機能が有れば良いのですが現状MakeCode Arcadeにはありません)
それではプログラムの内容を見てみましょう。
「最初だけ」ブロックでは名前の通り、以下のゲームの準備をしています。
- 背景画像の設定
- プレイヤーキャラクターを設定
- 初期位置を設定
- コントローラーの有効化
- 画面外に出ないように制限
- 敵キャラクターの種類用(渡り鳥)フラグの初期値設定
特に難しいブロックを使っているわけではないので詳細は省きます。
「2000ミリ秒でゲームが更新された時」ブロックでは2秒間隔で実行する以下の機能を行います。
- 敵キャラクターを設定(2種類の敵を交互に設定)
- 敵キャラクターの動作を設定(右方向へ100の速度で移動)
- 敵キャラクターの出現位置を設定(画面左端のランダムな位置)
- 敵キャラクターの種類用フラグを切り替え
ここも基本的にはよく使うブロックなので詳細は省きます。
特筆するとしたら敵キャラクターの種類用フラグ「渡り鳥フラグ」の扱いで2で割ったあまりを使う0か1で敵キャラクターの種類を変更しています。
「スプライトと重なったとき」ブロックではプレイヤーキャラクターと敵キャラクターがぶつかった時に以下の機能を行います。
- 敵キャラクターを消す
ここもよく使うブロックなので詳細は省きます。
「ゲームが更新されたとき」ブロックではゲーム中、常に以下の機能を行います。
- 敵キャラクターが画面右端に来たらゲームオーバー(負け)
ここもよく使うブロックなので詳細は省きます。
以上でver.1のプログラムすべてです。
特に難しい事はしていないので簡単に読めると思います。
ver.2にバージョンアップ
悪乗りする人が増えたため、敵キャラクターの種類を増やす事にしてver.2が出来上がりました。
変更内容は以下の通りです。
- 敵キャラクターの種類を1つ追加
キャラクターが増えたため、アセットも追加しています。
特に説明不要ですね。
キャラクター用イメージを1つ追加しただけです。
プログラムの内容については変更箇所のみ解説します。
「2000ミリ秒でゲームが更新された時」ブロックにて以下の機能を変更しました。
- 敵キャラクターを設定(2種類→3種類)
- 敵キャラクターの種類用フラグを切り替え
変更内容については特に難しいところが無いと思いますので省略します。
ver.3にバージョンアップ
スコア追加のユーザー要望があったので対応したver.3を作りました。
変更内容は以下の通りです。
- スコア追加
- 徐々に難易度が上がるように調整
スコアを追加に伴い、単調より徐々に難易度を上げた方が競う意味も出てくると判断して徐々に難易度を上げる仕様を追加しました。
アセットに変更は無いため、省略します。
プログラムの内容については変更箇所のみ解説します。
「最初だけ」ブロックにて以下の機能を変更しました。
- スコアの初期化
- 敵の速度を変数化
ユーザー要望に対応するために「最初だけ」ブロックにスコアの初期化を追加しました。
難易度調整用に敵キャラクターの速度を変数化して可変に対応できるようにしました。
「1800ミリ秒でゲームが更新された時」ブロックにて以下の機能を変更しました。
- 更新間隔を2000ミリ秒→1800ミリ秒
- 敵キャラクターの速度を変数化
- 敵キャラクターの速度アップ(変数値「鳥速さ」増加)
更新間隔と速度アップ量は数値を変えながらテストしてみてよさそうな値を探り、決定しました。
今回のバージョンアップでは値の変更だけなのでそれ以上の説明は不要と思います。
「スプライトと重なったとき」ブロックにて以下の機能を追加しました。
- スコアアップ
ゲーム内にスコアを追加したので女子会を守れた回数をカウントアップするようにして対応しています。
これもよく使うブロックなので詳細は省きます。
ver.4にバージョンアップ
悪乗りする人が更に増えたので対応するためにver.4を作りました。
変更内容は以下の通りです。
- タイトル画面追加
- 敵キャラクターの種類を1つ追加
- お助けキャラクターの追加
敵キャラクターの追加は悪乗りする人が増えるたびに行っています。
お助けキャラクターは十字キーによるプレイヤーキャラクターの単調な操作に何かスパイスが欲しいと思っていたので奥の手的に絶対的な侵入防止を行えるAボタンを追加しました。
ここまでのバージョンアップでだいぶそれらしくなってきたので雰囲気を出す&ちょっとした操作説明的な事も考えてタイトル画面を追加しました。
今回は敵キャラクターとお助けキャラクターの2つのイメージを新たに作る必要があったのでアセットを追加しています。
アセットには2つのイメージ追加のほかにお助けキャラクターがもう1つ追加されています。
これは後述するお助け発動時のイメージとして必用だったので追加しています。(キャラクターのサイズは16×16ですが最後のお助けキャラクターだけ48×48になっています)
プログラムの内容については変更箇所のみ解説します。
「最初だけ」ブロックにて以下の機能を追加・変更しました。
- タイトル画面追加
- お助けキャラクター追加
- お助けフラグ設定を追加
- 敵キャラクターの種類用(渡り鳥)フラグの初期値変更
タイトル画面の追加ではいろいろとやるべき処理が有ったので関数化し、「最初だけ」ブロックではその関数の呼び出しだけを行っています。
お助けキャラクターは未使用時に画面上部中央に配置するため、お助けキャラクターの設定と配置を行っています。
お助けキャラクターは使用後に居なくなり、1度しか使えない仕様としたかったので使ったかどうかを判断するためのフラグを追加しました。
敵キャラクターの種類用(渡り鳥)フラグの初期値変更は単なるバグフィックスです。(仕様として「1800ミリ秒でゲームが更新された時」ブロックの記載順に敵キャラクターの入れ替えを行うつもりが一番下のキャラクターから始まってしまった)
「タイトル画面」関数ブロックは呼び出される事で以下の機能を実行します。
- 各キャラクターの設定と配置
- タイトルとサブタイトルを表示
- お助けキャラクター以外のキャラクター消去
- お助けキャラクターを配置
- テキスト表示
- お助けキャラクター消去
タイトル画面では全キャラクターを表示させるために設定と配置を行います。
タイトル画面の文字(タイトル・サブタイトル)を設定して表示させています。
タイトル画面表示後はお助けキャラクターの説明のため、お助けキャラクター以外を消してお助けキャラクターの再配置とテキスト表示をしています。
説明後はすべてのキャラクターを消去するためにお助けキャラクターも消しています。
「1800ミリ秒でゲームが更新された時」ブロックにて以下の機能を追加・変更しました。
- 敵キャラクターを設定(3種類→4種類)
- 敵キャラクターの種類用フラグを切り替え
変更内容については特に難しいところが無いと思いますので省略します。
「Aボタンが押された時」ブロックにて以下の機能を追加・変更しました。
- お助けキャラクター使用可否判定
- お助けキャラクター(大)の設定&配置
- テキスト表示
- お助けキャラクター(大)の消去
- 敵キャラクターの動作を停止&消去(エフェクト付き)
- お助けフラグ変更
- お助けキャラクターの消去(エフェクト付き)
ここでも使っているブロック自体は難しい物がありません。
特筆するならAボタンのエフェクト(効果)を強調するためにテキスト表示+巨大キャラクターでインパクトを表現しようとしたところぐらいです。
まとめ
これで今回ネタゲームとして作った内容は以上です。
いずれもチュートリアルをこなせばゼロからでも作れる規模の物です。
チュートリアルについては当ブログでも紹介記事を書いているので参考にしてみてください。
また、↓の書籍でも解りやすく学習できるのでこれらも参考にしてみてください。
コメント