マクロで作ったマインスイーパーの解説 全体像編
どうもこんにちは。
今回からマクロで作ったマインスイーパーの解説をしていきたいと思います。
どんな感じのものになっているかはこちらからご確認ください。
programminghajimetemita.hatenablog.com
細かい内容の解説に入る前に、
マインスイーパーのマクロの全体的な構造と、
実際のコードをご紹介します。
1.マインスイーパーの全体像
まずはマクロの全体像からです。
マクロの処理の流れをパワポにまとめましたのでご確認ください。
細かい図なのでわかりづらいかもしれませんが、
どんな処理をしているかざっくり言うと、以下のとおりです。
・図の一行目(Startから初期配置の記録まで)で、
ゲーム画面のマス目に爆弾と数字を設置
・図の三行目(operationからcnt_bombまで)で、
各種操作(マス目を開いたりフラグを設置したり)と
残爆弾数と経過時間のカウントを実施
・図の四行目でゲームオーバーになったか判定
⇒ゲームオーバーであれば全マスを開いてゲーム終了
・図の五行目でゲームクリアになったか判定
⇒ゲームクリアであればゲーム終了
・四行目、五行目の判定がFalseであれば、三行目の処理を繰り返す
どんな処理をしているか、大体ご理解してもらえたでしょうか?
次にこれらの実際のコードを紹介していきたいと思います。
2.マインスイーパーのコード
では実際に記述したコードの内容をご紹介します。
以下かなりボリュームが多いです。
興味がある部分のマクロだけ参照するなどして、適宜読み飛ばしてもらえたらと思います。
まずはマクロ内で使用した変数や定数について紹介します。
以下で紹介するマクロにはここで定義した変数・定数が出てきますので、
適宜参照しながら内容を見てもらえればと思います。
ここから各マクロのコードの内容の紹介です。
まずはマインスイーパーのメインのマクロです。
上で紹介したもののコード版と思ってもらえればよいかと思います。
次は「難易度選択」です。
ユーザーフォームは以下のように整えました。
OKボタンに登録したコードは以下の通りです。
次は「ms_setting」です。
以下のゲーム画面になるように書式を設定するマクロになります。
(以下は難易度上級に対応するものです)
コードの内容は以下の通りです。
次は「set_bomb」です。マス目内に爆弾を設置するマクロです。
次は「set_num」です。マス目内に爆弾に対応する数字を設置するマクロです。
次は「operation」です。キーボード操作に応じてゲーム内の処理を行うマクロです。
次は空白セルを開いたときの動作を制御する「act_blank」です。
全体像の中では触れていないマクロになります。
ただ、「operation」のパーツになっているマクロですので、ここで併せて紹介しておきます。
次は空白セルを開いたときに周囲にある空白セルを登録する「rec_blank」です。
これも全体像の中では触れていないマクロですが、
上で紹介した「act_blank」のパーツになっているマクロですのでここで紹介します。
次は「cnt_time」です。経過時間をカウントするマクロです。
次は「cnt_bomb」です。残爆弾数をカウントするマクロです。
ここからは関数をご紹介します。
まずは設置した数字のフォントの色を制御する「SetNumColor」関数です。
全体像の中で触れていない関数ですが、「set_num」マクロのパーツとして働く関数になっています。
次は「CheckGameOver」です。ゲームオーバーを判定する関数です。
最後に「CheckGameClear」です。ゲームクリアを判定する関数です。
以上、コードの内容のご紹介でした。
次回以降、これらのコードを詳しく解説していきたいと思います。
3.おわりに
今回はマクロで作ったマインスイーパーの全体像についてご紹介しました。
このマクロを作るのにかかった時間は約35時間でした。
空白セルを開けたときの挙動を再現するコードを組むのがかなり難しく、
ほぼそのコードの内容を考えるのに時間を費やしました。
次回はゲーム画面の書式設定を行う「ms_setting」について解説します。
ではまた。