【VBAでRPGをつくる!2】ワークシートにドット絵を用意しよう

ドット絵方式のゲームでは、ゲーム用のシートにドット絵を作成しておかなくてはなりません。ただし、ゲーム用のシートに直接作成するのではなく、ゲームを起動するときに、別のワークブックに作成しておいたドット絵をゲーム用のシートにコピーします。
別のワークブックに作成したドット絵をコピーする




まずドット絵を保存したワークブックの名前や場所は、次のようにコンスタントで定義しておきます。
コンスタント/Sheet1内
Const cBookHuman As String = “Pattern.xls”
Const cSheetHuman As String = “Human”
Const cHumanTop As Long = 1001
続いてゲーム用のワークシートにドット絵をコピーするプログラムを書いていきます。ワークブックを開き、さらにワークブック間でセルのコピー&ペーストを行っています。
Private Sub PatternCopy()
‘Excelの警告メッセージをオフにする(False設定)
Application.DisplayAlerts = False
‘ドット絵用ワークブックを開き、ゲーム用シートにコピーする
Workbooks.Open ThisWorkbook.Path & “\” & cBookHuman
Workbooks(cBookHuman).Worksheets(cSheetHuman).Range(“A1:IV256”).Copy
Cells(cHumanTop, 1).PasteSpecial
Workbooks(cBookHuman).Close False
‘セルのカーソルを移動し、スクロールしたシートを元に戻す
Cells(1, 1).Select
Application.CutCopyMode = False
‘警告メッセージの設定を元に戻す(True設定)
Application.DisplayAlerts = True
End Sub
PatternCopyマクロを実行すると、ドット絵用のワークブックに作成した主人公のドット絵が、ゲーム用のシート(Sheet1)にコピーされます。1回目のシートを初期設定した際に、ゲーム画面用領域(横方向:17~192列、縦方向:17~160行)以外は非表示にしていましたが、実行結果を見るために再表示しています。




ゲーム用ワークシートの1001行目を先頭に、主人公のドット絵がコピーされました。
コピー処理中は警告メッセージをオフに
ドット絵をコピーするときは、Application.DisplayAlertsを使ってExcelの警告メッセージを表示しないようにしました。大きな範囲をコピー&ペーストしたあと、ワークブックを閉じようとしたときに表示される警告メッセージを表示しないようにするためです。なお、この設定を行うと、保存の確認や各種のエラーの通知など、その他の警告メッセージも表示されないので注意してください。
ドット絵の管理と作成場所




ドット絵はゲーム用のシートに用意するのが大前提です。しかし、ゲーム用のシートに直接作成した場合、開発中のバグなどが原因で、苦労して作ったドット絵が破壊されてしまうことも予想されます。こういった不測の事態からの復旧を容易にするために、ドット絵は別のシートやワークブックに作成し、ゲームを起動する前にコピー&ペーストして使うようにします。
また、ドット絵はセルの背景色を設定して作成するため、大量のセルを使用します。そのため、シートの容量も大きくなります。ドットを分離しておけば、ゲーム用のシート(ワークブック)を軽くできるというメリットも得られます。
ドット絵とゲーム用シートの関係
ドット絵を表示するのは次のような手順で行います。
- ドット絵は、専用のワークブックに作成してマスターファイルとする。
- ゲーム起動時に、ゲーム用シートへその都度コピー&ペーストする。
・コピー範囲(A1:IV256)はセル名で指定する。
Workbooks(cBookHuman).Worksheets(cSheetHuman).Range(“A1:IV256”).Copy
・貼り付け先は、先頭のセルだけを指定する。
Cells(cHumanTop, 1).PasteSpecial - キャラクターを表示するときは、同じシート上にあるドット絵を使用する。
ドット絵をコピーするときに行っているワークブックの操作




ドット絵を貼り付けると、貼付けを行った時点でシートが1001行目(貼り付けた先頭のセル)にスクロールしてしまいます。そこで、貼り付けた後にA1セルへカーソルを移動し、スクロールしてしまったシートを元に戻すようにしています。
ワークシートにドット絵が用意できたので、次回はキャラクターを表示します。