たんぶるぐりぃふ七回忌

雑記です。イラストなどが掲載してあるページはこちら→http://shichichaos.tumblr.com/

ExcelVBAではじめるローグライク開発 #1

f:id:pandorina463:20171214143144p:plain

shichiです。さいきんswichがお家に来ました。64以来の据え置きです。 ちなみに上の画像は二年前くらいに作ったクソゲーです。今回は作り直します。

突然ですがみなさん、VBAはご存知でしょうか。 wikipediaで検索してみると、

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

うごいた!!

f:id:pandorina463:20171215131746g:plain

コードの詳細について説明すると、Worksheet_SelectionChangeと言うのはワークシート関数の一つで、ワークシートの選択範囲を常に監視しています。選択範囲の変更が有ると実行されるので、コレをキャラ移動の実装に用いたわけです。

そしてTargetというのが現在選択されている範囲となります。 draw_chara内では予めbgシートに保存してあったTarget変更前の場所をtarget_beforeとして取得し、描画されている@を削除。引数として受け取ったTargetの場所に主人公を表す記号で有る@を表示し、現在の場所をbgシートに格納しています。

ローグライクにおいては、主人公の行動を一つのターンとして消費します。そのためこの移動を皮切りにWorksheet_SelectionChangeの中にアイテム取得とかそこら辺の実装をしていけばいいというわけです。

主人公が広大なエクセル世界を探索できるようになったみたいですね。 次回はマップの自動生成アルゴリズムとかそこら辺について話したいと思います。

個人的おすすめChrome拡張機能12

※これはみす裏アドベントカレンダー13日目の記事です。

知っている人はこんにちは、知らない人はさようなら。shichiです。 みなさんGoogleChrome使ってますか?色々言われているブラウザですが、個人的にはこのブラウザは拡張機能あってこそだと思っています。 そこで12月だけ12個のおすすめ拡張機能を紹介していきたいと思います。

adventar.org

BookmarkSideBar

ブックマークをサイドバー化できます。 ブックマークバー分の画面リソースを活用できるのでいいですね!僕はマウスオーバーで開くようにしています。

https://extensions.blockbyte.de/

Save to Pocket

このサイト今はいいけどあとで見たいなって時に重宝しています。 PCで動画見るときとかにも使えるし、タグとかつけられるので非常に便利です。 この拡張機能がというよりPocket自体が。

https://chrome.google.com/webstore/detail/save-to-pocket/niloccemoadcdkdjlinkgdfekeahmflj?hl=ja

Black Menu for Google

グーグルさん関連のアプリケーションをこう...ばっっと表示してくれます(下図)

今のタブを保持したまま他のコンテンツを閲覧できます。ちょっと関連事項とか調べたいときとかに非常に便利です。

https://chrome.google.com/webstore/detail/black-menu-for-google/eignhdfgaldabilaaegmdfbajngjmoke?hl=en

iKnow! popup辞書

マウスオーバーするだけで該当単語を翻訳してくれます。 英単語弱い人はどうぞ。

https://chrome.google.com/webstore/detail/iknow-%E3%83%9D%E3%83%83%E3%83%97%E3%82%A2%E3%83%83%E3%83%97%E8%BE%9E%E6%9B%B8/omfegkgipldobddijcpagdabgifghdgb

LastPass

LastPassって知ってますか? パスワードを統括管理してくれます。それだけですけどめっちゃ使いやすいと思います。ぜひ。

https://chrome.google.com/webstore/detail/lastpass-free-password-ma/hdokiejnpimakedhajhdlcegeplioahd

BetterTweetDeck

TweetDeck. ああ TweetDeck. この神ツールを常用している方も多いかと思います。 そんなTweetDeckをもっと便利にしよう的な拡張機能がこれになります。Deck使いなら入れといて損はないです。 個人的には絵文字をPCから使えるのが地味に評価高いです

https://chrome.google.com/webstore/detail/bettertweetdeck/micblkellenpbfapmcpcfhcoeohhnpob?hl=en

OctoTree

githubリポジトリ内をツリー表示してくれます。 みやすいしアクセスしやすいしいいです。

https://chrome.google.com/webstore/detail/octotree/bkhaagjahfmjljalopjnoealnfndnagc?hl=en

Momentum

おしゃれタブにしたい方は! TODOとかが地味に使えます、何よりおしゃれです。

https://chrome.google.com/webstore/detail/momentum/laookkfknpbbblfpciffpaejjkokdgca?hl=en

AdBlock .

うざい広告を一掃してくれます。

https://chrome.google.com/webstore/detail/adblock/gighmmpiobklfepjocnamgkkbiglidom

goodbye "Zenkaku"

全角を半角に変えてくれます。 全角はクソ! それはそうと、なんでこの記事のタイトルの12が全角で書かれているかわかるかな?

こいつを試すためだよ!!!

設定はこんな感じ。Ajaxまでonにするとうざいよ。

https://chrome.google.com/webstore/detail/goodbye-zenkaku-%E3%81%95%E3%82%88%E3%81%AA%E3%82%89%E5%85%A8%E8%A7%92%E8%8B%B1%E6%95%B0/mjdgifdhhligineaimmgbikndpifdgml?hl=en

SearchPreview

検索画面でプレビューが出るようになります。

https://chrome.google.com/webstore/detail/searchpreview/hcjdanpjacpeeppdjkppebobilhaglfo

The Great Suspender

使ってないタブを省メモリできます。

https://chrome.google.com/webstore/detail/the-great-suspender/klbibkeccnjlkjkiokjodocebajanakg

最後に

こんなもんですかね! 最近プログラマになったのでこう言った拡張機能いくつか作れたらなと思います。以上!