その昔 倉庫番 というゲームがありました。
Excelで完全に再現することは不可能ですが、できるだけ再現してみたいと思います。
ゲームプログラミングを勉強したい方には、あまり参考にならないと思います。
しかし、VBAの学習に多少寄与できるよう無駄なことをしながら挑戦してみます。
途中で挫折するかもしれませんので、ご承知ください。
はじめに
最近VBAでゲームを作成する記事をいくつか見つけました。
私にはゲームをVBAで作成するという発想がなかったので、ちょっと気になりました。
検索してみると、テトリスをプログラミングしているものが多かったのです。
一見簡単そうなものの、時間とともに下に移動していくという部分は、イベントドリブンのプログラミングをしたことがない私にはハードルが高そうで、かつ今後も使わないように思えました。
簡単そうなものとしてはセルを移動させてゴールをめざすようなオリジナルゲームも多かったのですが、連想したのが倉庫番でした。
倉庫番ならテトリスより簡単そうなので、VBAで作る倉庫番を検索してみたのですが、私には見つけることができませんでした。
ひょっとすると著作権にひっかかったりするのかな?という懸念もありますが、あくまで個人的な利用であり、コード品質が低いので売り上げのお邪魔はしないかな、と思っています。
まだ作成している人がいないなら挑戦してみたいのですが、VBAは通常のゲームのようにスムーズに動くことはなく、見るに絶えないカクカクした動きになるはずです。
目的はVBAのおさらいとし、効率的なコードでなくあえて無駄なものを目指して作成していきます。
倉庫番とは
現在でもスマホアプリにあるので実際にやってみたり、YouTubeでもあるので見てもらうのが早いですが、説明します。
作成しようとしている画面はこちらです。
壁に囲まれた中に倉庫作業者がいて、同じく中に複数個の荷物があります。
倉庫作業者は上下左右に動くことができ、荷物を押すことができます。
すべての荷物を目的地(上の図では×印)に運び終えることがクリア条件です。
壁を通り抜けることができないのは想像通りだと思いますが、荷物を引っ張ることはできないことと2つ以上の荷物をいちどに運ぶことはできません。
目的地に運び終えた荷物でも(押して)動かすことは可能です。
画面内でも説明を記述していますので、ご覧ください。
画面の14行目にあるピクチャ(シェイプ)をテンプレートとして、コピペして作成します。
シェイプの下に書いてあるのはシェイプ名です。
シェイプ名の設定方法はこの記事のなかで触れていますので、ご存じない方はこちらをご覧ください。
account-it-dentist.hatenablog.com
実装していく機能
VBAは通常コマンドボタンなどを配置して、それらをクリックすることでプログラムが動くのですが、今回はすべてキーボードで操作するようにする予定です。
作るのは1面のみで、クリアすると次の面に進むようなことはなくプログラム終了とします。
ギブアップして最初からやり直す機能と中途でゲーム(プログラム)を終了する機能は用意します。
ひとつ前の操作に戻すUNDO機能は実装しません。
角に荷物を押し込んでしまって動かせない状態にすると自動的にゲームオーバーとするような機能も用意しません。
次回から少しずつコードを作成していきます。
なお、これからのコードの変数型に "Integer" を使用していますが、通常VBAでは "Long"型 を使用します。
Integer型は使用禁止という場合もあります。
ちなみに、すべて Variant型 にする人もいますが、ExcelVBAだけならこれでいいのですが、他の言語でデータベースに書き込むようなプログラムのときにデータ型を意識しないとあとで痛い目にあうことになるので、あまりお勧めできません。
ご質問は下の 「コメントを書く」 からお願いします。
ExcelやVBA全般に関わる質問で、比較的簡単にお答えできるものはできる限り回答したいと思います。
回答を公開でなくメールでやり取りしたいという場合は、その旨記載していただければ非公開で回答することも可能です。
有償での作業依頼は非公開にしますので、条件等をお知らせください。