2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Excel VBAで将棋を作った話

Posted at

〜盤面・駒・成り・持ち駒・二歩まで全部VBA〜

Excelで将棋を作りました。
ネタではなく、ガチで対局できる将棋です。

9×9の盤面

将棋.png

全駒種の移動ルール

飛び駒の障害物判定

成り(強制成りあり)

持ち駒

二歩判定

勝敗判定(王を取ったら終了)

すべて Excel + VBAだけ で実装しています。

なぜExcelで将棋?

Excelは単なる表計算ではなく、

セル = 座標系

Shapes = スプライト

Worksheet_SelectionChange = 入力イベント

VBA = ゲームロジック

という構成を持つ GUIアプリ実行環境です。

これ、ゲームエンジンと同じです。

なら将棋くらい作れるだろう、という発想から始めました。

システム構成

構成はMVC的に分離しています。

役割 実装
Model(盤面・ルール) modMain
Controller(入力) UIシート
View(描画) Shapes+セル
設定画面 UserForm
盤面と状態管理
Public Board(1 To 9, 1 To 9) As Integer
Public Hand(1 To 2, 1 To 7) As Integer
Public CurrentTurn As Integer

正の値 = 先手、負の値 = 後手
成駒は +100 で区別しています(例:歩=1、と=101)

駒の描画

セルに文字を書いているのではなく、
Shape(TextBox) で駒を描画しています。

Set shp = ws.Shapes.AddTextbox(...)
shp.TextFrame2.TextRange.Text = GetPieceName(p)
If p < 0 Then shp.Rotation = 180

後手は180度回転、成駒は赤文字。
Excelがそのまま2Dスプライトエンジンになります。

駒の移動ルール

全駒種の動きを IsLegalMove() で判定しています。

例:歩・桂・銀・金・飛・角・成駒などをすべて分岐。

Case FU
If diffX = 0 And diffY = fwd Then IsLegalMove = True
Case KA
If absX = absY Then IsLegalMove = IsPathClear(...)
Case HI
If diffX = 0 Or diffY = 0 Then IsLegalMove = IsPathClear(...)

飛び駒は IsPathClear() で途中の駒をチェック。

成り判定

ゾーン侵入で成れるようにし、
歩・香・桂の強制成りも実装しています。

If y = 1 And (absP = FU Or absP = KY) Then force = True
If y <= 2 And absP = KE Then force = True

持ち駒と二歩

持ち駒は Hand(先手/後手, 駒種) で管理。

二歩は列を走査してチェックします。

For i = 1 To 9
If Board(x, i) = FU Then 二歩
Next

勝敗判定

王を取ったら即終了。

If Abs(enemyP) = OU Then
MsgBox "勝ち"
IsGameOver = True
End If

これ、実は業務アプリの構造

このExcel将棋は、構造的には

状態管理

ルールエンジン

UIイベント

描画

を分離した 業務システムそのもの です。

違うのは対象が「将棋」なだけ。

工程管理ツールでも設備管理でも同じ構造になります。

Excelは最強のローカルGUI基盤

インストール不要
配布が簡単
VBAでロジックが書ける
Shapeで自由に描画できる

Excelは 実質ゲームエンジン兼業務フレームワーク です。

今後の拡張

現在は人対人で対局できます。
今後は:

AI(簡易探索)

王手検出

棋譜保存

を追加予定です。

まとめ

Excelは表計算ソフトではなく、
イベント駆動型GUI + スクリプト実行環境です。

将棋が動くなら、
業務アプリが作れないわけがありません。

Excelをなめると、たぶん負けます。

2
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?