最近switchを買いました。
突然ですがみなさん、VBAはご存知でしょうか。
wikipediaで検索してみると、
VBA
- Visual Basic for Applications - プログラミング言語。
- VisualBoyAdvance - ゲームボーイ・ゲームボーイアドバンスのエミュレータ。
- VOCAL BATTLE AUDITION - 芸能事務所LDHが主催したオーディションである。略称は「VBA」。
と出てきますが、今回は一番上のVisual Basic for Applicationsのお話。
VBAとは?
簡単にいってしまうとエクセルで行われる様々な作業をマクロを組んで自動化するための言語です。
例えば毎回毎回七面倒な書類を同じ形式で作っている時とか、ひょんなことから何万件もあるデータを分類したり整理しなくてはならなくなった時に使います。
今回はエクセルのセルをマスに見立ててローグライクを実装していくといった方針でやっていきたいと思います。
ローグライクとは?
さて、数あるゲームの中でもローグライクというものが如何なる物か。ローグライクの定義は地球の砂粒の数より多いと私の中で話題ですが、ここは国民的websiteであらせれるwikipediaさんに 「ok,google ローグライクの定義を教えて」 をしてみましょうか。。。
ローグライクゲーム(Rogue-like games)は、ローグと同様の特徴を持っているコンピュータRPGの総称である。
ローグライクゲームでは伝統的に全ての情報を文字で表示するが(テキストユーザインタフェース)、オプションでキャラクターや地形等の情報をグラフィカルに表示できるものもある。また、チュンソフトが制作している不思議のダンジョンシリーズ等のコンシューマー用のローグライクゲームでは、グラフィック表示が標準になっている。
ん〜〜よくわかんない。下の動画みたいな感じの物だと思っていただければいいと思う。最近のだとポケモン不思議のダンジョンとかトルネコとか。
主人公の表示・移動について
どのようなゲームを作るにおいても必要となるのが、主人公の描画です。それなくしてゲームの完成はありえないといっても過言ではないくらい。ここで登場するのがVBA。とりあえず選択中のセルに主人公 @ を表示・移動してみましょう。
まずはゲームのバックグラウンド処理などをするbgシートとgameシートを作成しましょう。また、bgシートのcells(1,1)とcells(1,2)を主人公位置の変数置き場とします。別に他でもいいですけど。とりあえず初期位置として下図のように入力しておいて下さい。
以下が主人公を表示するためのコードです。
gameシート関数にコードを追加していきます。
Dim target_before As String
Dim game_sheet, bg_sheet As Worksheet
Sub Worksheet_SelectionChange(ByVal Target As Range)
Application.ScreenUpdating = False
Set bg_sheet = ThisWorkbook.Sheets("bg")
Set game_sheet = ThisWorkbook.Sheets("game")
Call draw_chara(Target)
End Sub
Sub draw_chara(ByVal Target As Range)
target_before = bg_sheet.Cells(1, 2)
game_sheet.Range(target_before) = ""
bg_sheet.Cells(1, 2) = Target.Address
Target = "@"
End Sub
動いた!!!
コードの詳細について説明すると、Worksheet_SelectionChange
と言うのはワークシート関数の一つで、ワークシートの選択範囲を常に監視しています。選択範囲の変更が有ると実行されるので、コレをキャラ移動の実装に用いたわけです。
ローグライクにおいては、主人公の行動を一つのターンとして消費します。そのためこの移動を皮切りにWorksheet_SelectionChange
の中にアイテム取得とかそこら辺の実装をしていけばいいというわけです。
主人公が広大なエクセル世界を探索できるようになったみたいですね。疲れたので今回はここまでにして、次回はマップの自動生成周りについて書いていこうと思います。