タイトルのテキスト
タイトルのテキスト
タイトルのテキスト
タイトルのテキスト

Excel VBAで作る「迷路バトルゲーム」完全解説

VBA

t f B! P L

 

meiro

Excelは単なる表計算ツールではありません。VBAVisual Basic for Applications)を使えば、迷路を自動生成し、プレイヤーを操作して敵と戦うゲームまで作れてしまいます。

 この記事では、マクロで実装された迷路ゲームのVBAコードを1つずつ丁寧に解説しながら、ロジックや改造ポイントも紹介します。

 1. ゲームの概要

このゲームはExcelのセルを使った迷路アドベンチャーです。

 プレイヤーは緑セル(初期位置は左上の (2,2))。

 ゴールは右下の赤セル。

 壁は黒セル。

 敵は茶色セルでランダムに動きます。

 敵や壁にぶつかるとHPが減り、HP0になるとゲームオーバーです。

 2. 構成と全体設計

主なモジュールと役割

モジュール名       概要

ゲーム開始           初期化、迷路生成、敵配置

掘り進め迷路       再帰的な迷路の自動生成

Worksheet_SelectionChange            セル移動時の処理、衝突判定、戦闘

MoveEnemies      敵の自動移動処理

攻撃モードON    攻撃モードを一時的に有効化

 3. ゲーム開始処理:Sub ゲーム開始()

編集する

Sub ゲーム開始()

    ' 初期設定

    mazeSize = 21

    hp = 100

    ws.Cells.Clear

mazeSize:迷路サイズ(21×21

 hp:プレイヤーの体力

 ws.Cells.Clear:シート全体の初期化


    ' 迷路配列の準備

    ReDim maze(1 To mazeSize, 1 To mazeSize)

     ' 全部壁にする(1は壁、0は通路)

    For i = 1 To mazeSize

        For j = 1 To mazeSize

            maze(i, j) = 1

        Next j

    Next i

すべてのセルを壁(黒)にしておき、あとから通路を掘っていきます。

     ' 迷路生成(スタートは (2,2)

    Call 掘り進め迷路(2, 2)


    ' 迷路をシートに描画

    For i = 1 To mazeSize

        For j = 1 To mazeSize

            With ws.Cells(i, j)

                .Value = ""

                .ColumnWidth = 2

                .RowHeight = 15

                If maze(i, j) = 1 Then

                    .Interior.Color = RGB(0, 0, 0) '

                Else

                    .Interior.Color = RGB(255, 255, 255) ' 通路

                End If

            End With

        Next j

    Next i

数値によって色分け(壁=黒、通路=白)してセルに反映。

 

    ' スタート地点とゴール地点

    ws.Cells(2, 2).Interior.Color = RGB(0, 255, 0) ' プレイヤー(緑)

    ws.Cells(mazeSize - 1, mazeSize - 1).Interior.Color = RGB(255, 0, 0) ' ゴール(赤)


    ' 敵の設置

    enemyCount = 5

    ReDim enemies(1 To enemyCount, 1 To 2)

 

    For i = 1 To enemyCount

        Do

            er = Int((mazeSize - 2) * Rnd) + 2

            ec = Int((mazeSize - 2) * Rnd) + 2

        Loop While maze(er, ec) = 1 Or (er = 2 And ec = 2) Or (er = mazeSize - 1 And ec = mazeSize - 1)

 

        enemies(i, 1) = er

        enemies(i, 2) = ec

        ws.Cells(er, ec).Interior.Color = RGB(139, 69, 19) ' 敵:茶色

    Next i

敵は5体、迷路の中にランダムに配置されます(スタート・ゴール以外)。

 

4. 迷路生成:Sub 掘り進め迷路(x, y)


Sub 掘り進め迷路(x As Integer, y As Integer)

    maze(y, x) = 0

0は通路。現在位置を通路に設定。

 


    dirs = Array("N", "S", "E", "W")

    ' 方向をシャッフルして再帰的に進む


    For i = 0 To 3

        ' 各方向に2マスずつ進んで掘る(奇数マスが壁、偶数マスが通路)

        Select Case dirs(i)

            Case "N": dx = 0: dy = -2

            ...

        End Select

 

        nx = x + dx

        ny = y + dy

 

        If maze(ny, nx) = 1 Then

            maze(y + dy \ 2, x + dx \ 2) = 0 ' 間の壁を破壊

            Call 掘り進め迷路(nx, ny)

        End If

5. プレイヤー移動:Worksheet_SelectionChange

このイベントは、セルが選択された時に自動実行されます。

 


If Target.Cells.Count > 1 Then Exit Sub

If Target.Row < 1 Or Target.Row > mazeSize Then Exit Sub

移動できるのは1セルずつ&迷路内のみ。

 


    ' 壁ならHPを減らし、元の場所に戻る

    If c = RGB(0, 0, 0) Then

        hp = hp - 10

        MsgBox "壁にぶつかった!"


    ' 攻撃モード確認(セルAD1

    If ws.Cells(1, 30).Value = "ON" Then isAttacked = True

攻撃モードなら敵を倒せる。

 

    ' 敵と衝突

    If enemies(i, 1) = playerRow And enemies(i, 2) = playerCol Then

        If isAttacked Then

            MsgBox "敵を倒した!"

        Else

            hp = hp - 20

    ' ゴール判定

    If playerRow = mazeSize - 1 And playerCol = mazeSize - 1 Then

        MsgBox "ゴール!おめでとう!"

6. 敵の自動移動:MoveEnemies

    directions = Array(Array(-1, 0), Array(1, 0), Array(0, -1), Array(0, 1)) ' 上下左右

各敵が上下左右のいずれかに1マス動きます。

 

    If maze(newRow, newCol) = 0 Then

        If Not occupied Then

            possibleMoves.Add Array(newRow, newCol)

通路であり、他の敵やプレイヤーがいないマスだけ候補に。

 

7. 攻撃モード:攻撃モードON

Sub 攻撃モードON()

    Sheets(1).Cells(1, 30).Value = "ON"

    MsgBox "攻撃モードON"

End Sub

プレイヤーが任意のタイミングでONにできます(ボタンに割り当てると便利)。

 

次の敵との接触で発動し、自動的にOFFになります。

 

8. 改造・応用アイデア

ゴールまでの制限時間を設ける

 

敵の数をレベルに応じて増やす

 

アイテム(回復や鍵)を配置

 

敵の追尾AI(プレイヤーに近づく)

 

9. おわりに

この迷路ゲームは、VBAの面白さと可能性を体感できる絶好の教材です。

 アルゴリズム(迷路生成)

 イベント駆動(移動や衝突)

 状態管理(HPや敵)

 など、ゲームに必要な基本要素が揃っています。

koneka1208

koneka1208

自己紹介

自分の写真
エクセル好きの窓際会社員です。 エクセルの操作法や日々の会社で得た知見などを発信していきます。 よろしくお願いします。

ブログ アーカイブ

連絡フォーム

名前

メール *

メッセージ *

QooQ