Excel将棋:クラスの設計(№2)

Excelで将棋を作ってみましょう。
人vs人で動かしてゲームとして成立するところまでが当面の目標です。
設計といっても、どのようなプロパティ・メソッドをもたせるかといった概要だけです。
詳細はVBAを書きながら決めていく予定です。
したがって、以下のクラスのメンバーもVBA実装で変更する可能性はあります。
作成するクラスの役割と作成順
将棋進行クラス
主な役割としては、
・シートと他のクラスの受け渡し
・ルール制御
・消費時間管理
・将棋盤オブジェクト
・先手駒台オブジェクト
・後手駒台オブジェクト
将棋盤クラス
2次元配列に駒クラスのオブジェクトを入れる。
シートとは完全に切り離して作成。
駒台クラス
駒の種類と数だけ管理できれば良い。
駒クラス
駒の種類、駒の移動、駒の位置等、駒ごとの情報を保持
位置クラス
・行
・列
この情報だけを持たせる
ユーザー定義型では制限が多いためクラスを使用
移動クラス
・行
・列
・回数
この情報だけを持たせる
ユーザー定義型では制限が多いためクラスを使用
前に1つだけ進める場合は、-1,0,1
前に突き当たるまで進めるなら、-1,0,8、盤は9*9なので回数は最大で8
| -1,-1 | -1,0 | -1,1 |
| 0,-1 | 現在 | 0,1 |
| 1,-1 | 1,0 | 1,1 |
クラスの作成順
・駒台クラス
・将棋盤クラス
・将棋進行クラス
この順で作成していく予定です。
細かい部品から作成していく感じになります。
したがって、下に行くほど設計がずれていく可能性があります。
作成するクラスのメンバー一覧
現時点での予定なので、実装段階で変更は発生すると思います。
※各クラス作成時の変更は、極力このページに反映しておきます。
また、Privateメンバーは適宜作成していきます。
将棋進行クラス
| 種別 | 名称 | 説明 |
| プロパティ | 将棋盤 | シートのRange |
| プロパティ | 先手持駒 | シートのRange |
| プロパティ | 後手持駒 | シートのRange |
| プロパティ | 先手消費時間 | シートのRange |
| プロパティ | 後手消費時間 | シートのRange |
| プロパティ | 手数 | シートのRange |
| プロパティ | 棋譜 | シートのRange |
| プロパティ | 将棋盤色 | シートのRange |
| プロパティ | 駒選択色 | シートのRange |
| メソッド | 駒配置 | 駒を並べる 「大橋流」でアニメーションさせたい |
| メソッド | 駒選択 | 選択駒の移動可能セルの協調表示 既に選択されている場合は解除 |
| メソッド | 着手 | 引数(元位置, 先位置, 駒名) 元位置:-1,-1は初期配置 元位置:0,0は駒台から 反則(禁じ手)等の判定を行い、禁じ手の場合はFalseを返す 相手の駒を取る場合は駒台へ追加 駒台から打った場合は駒台から削除 シート全体の更新 |
| メソッド | 盤面表示 | 盤面の2次元配列をシートに表示する 2次元配列はcls将棋盤の現在盤面で取得する |
| メソッド | 終局判定 | これは結構難しい・・・ 持駒を含めた全ての駒を使って受けがないかの判定 |
将棋盤クラス
| 種別 | 名称 | 説明 |
| プロパティ | 現在盤面 | 駒オブジェクトが入っている2次元配列から表示名の2次元配列を作成する |
| プロパティ | 盤面履歴 | 現在盤面をCollection |
| プロパティ | 手数 | 現在手数を戻す |
| プロパティ | 棋譜 | 1手ずつCollectionに追加 棋譜は、Ki2形式とします。 ▲5ニ銀右上成 ・先手▲後手△ ・到達地点の筋 ・到達地点の段 ・駒の種類 ・駒の相対位置(複数ある場合) ・駒の動作(複数ある場合) ・成・不成・打 |
| プロパティ | 棋譜履歴 | 最終手をCollection |
| プロパティ | 先手 | 先手True、後手False |
| メソッド | 着手 | 引数(元位置, 先位置, 駒名, Optional 手番) 元位置:-1,-1は初期配置 元位置:0,0は駒台から 手番省略時は、プロパティ手番に従う 以下を更新する。 最終手、2次元配列、盤面履歴、棋譜履歴 |
| メソッド | 終局判定 | これはかなり難しい・・・ 持駒を含めた全ての駒を使って受けがないかの判定が必要 |
2次元配列(1 To 9, 1 To 9)の各要素に駒オブジェクト(駒クラスのインスタンス)を入れて管理します。
駒台クラス
| 種別 | 名称 | 説明 |
| プロパティ | 駒台一覧 | 金,1;歩,3 |
| メソッド | 駒追加 | オブジェクトで追加 |
| メソッド | 駒削除 | 名称で削除 |
駒クラス
| 種別 | 名称 | 説明 |
| プロパティ | 正式名称 | 飛車、角行、金将、銀将、桂馬、香車、歩兵 |
| プロパティ | 表示名称 | 飛、角、金、銀、桂、香、歩 |
| プロパティ | 成駒名称 | 龍、馬、金、成銀、成桂、成香、と |
| プロパティ | 表示順 | 駒台の表示順 |
| プロパティ | 先手 | 先手True、後手False |
| プロパティ | 成り | 先りTrue、未成りFalse |
| プロパティ | 駒位置 | 縦横(行列)で取得・設定 |
| プロパティ | 駒移動 | 別表参照 |
| プロパティ | 成駒移動 | 別表参照 |
| メソッド | 駒作成 | 駒の正式名称を受け取って、その駒特有の情報を設定する |
| メソッド | ||
| メソッド | 移動可能位置 | 駒が移動できる位置をcls位置(行、列)のCollectionで返す |
位置クラス
| 種別 | 名称 | 説明 |
| 変数 | 行 | 1~9 |
| 変数 | 列 | 1~9 |
将棋では筋、段と言い、筋は右から1,2,…となります。
しかし、ここでは配列の位置としての行・列の数値で管理します。
移動クラス
| 種別 | 名称 | 説明 |
| 変数 | 行 | 1~9 |
| 変数 | 列 | 1~9 |
| 変数 | 回数 | 1~8 |
将棋では筋、段と言い、筋は右から1,2,…となります。
しかし、ここでは配列の位置としての行・列の数値で管理します。
駒の移動の定義
| 王将 | 飛車 | 角行 | 金将 | 銀将 | 桂馬 | 香車 | 歩兵 |
| -1,-1,1 -1,0,1 -1,1,1 0,-1,1 0,1,1 1,-1,1 1,0,1 1,1,1 |
-1,0,-8 1,0,8 0,-1,-8 0,1,8 |
-1,-1,8 -1,1,8 1,-1,8 1,1,8 |
-1,-1,1 -1,0,1 -1,1,1 0,-1,1 0,1,1 1,0,1 |
-1,-1,1 -1,0,1 -1,1,1 1,-1,1 1,1,1 |
-2,-1,1 -2,1,1 |
-1,0,-8,0 | 1,0,1 |
| 龍王 | 龍馬 | 成銀 | 成桂 | 成香 | と | ||
| -1,0,-8 1,0,8 0,-1,-8 0,1,8 -1,-1,1 -1,1,1 1,-1,1 1,1,1 |
-1,-1,8 -1,1,8 1,-1,8 1,1,8 -1,0,1 0,-1,1 0,1,1 1,0,1 |
-1,-1,1 -1,0,1 -1,1,1 0,-1,1 0,1,1 1,0,1 |
-1,-1,1 -1,0,1 -1,1,1 0,-1,1 0,1,1 1,0,1 |
-1,-1,1 -1,0,1 -1,1,1 0,-1,1 0,1,1 1,0,1 |
-1,-1,1 -1,0,1 -1,1,1 0,-1,1 0,1,1 1,0,1 |
Excel将棋の目次
新着記事NEW ・・・新着記事一覧を見る
最長連続出現数(ランレングス)の算出|エクセル練習問題(2025-11-15)
SQL基礎問題11:連続期間の開始月と終了月を抽出|SQL入門(2025-11-14)
セル数式における「再帰」の必要性|エクセル雑感(2025-11-10)
掛け算(*)を使わない掛け算|足し算(+)を使わない足し算|エクセル関数応用(2025-11-10)
配列を自在に回転させる数式|エクセル関数応用(2025-11-09)
非正規化(カンマ区切り)の結合と集計:最適な手法は?|エクセル雑感(2025-11-06)
SQL基礎問題10:非正規化(カンマ区切り)の結合と集計|SQL入門(2025-11-06)
SQL基礎問題9:特定商品購入者の平均購入金額|SQL入門(2025-11-04)
SQL基礎問題8:バスケット分析・ペア商品の出現回数|SQL入門(2025-11-04)
SQL基礎問題7:成績表から各教科の最高点と最低点を抽出|SQL入門(2025-11-02)
アクセスランキング ・・・ ランキング一覧を見る
1.生成AIパスポート試験 練習問題(四肢択一式)|生成AI活用研究
2.最終行の取得(End,Rows.Count)|VBA入門
3.変数宣言のDimとデータ型|VBA入門
4.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
5.繰り返し処理(For Next)|VBA入門
6.RangeとCellsの使い方|VBA入門
7.FILTER関数(範囲をフィルター処理)|エクセル入門
8.日本の祝日一覧|Excelリファレンス
9.マクロとは?VBAとは?VBAでできること|VBA入門
10.セルのクリア(Clear,ClearContents)|VBA入門
- ホーム
- マクロVBA応用編
- マクロVBAサンプル集
- Excel将棋:クラスの設計(№2)
このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
記述には細心の注意をしたつもりですが、間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。
当サイトは、OpenAI(ChatGPT)および Google(Gemini など)の生成AIモデルの学習・改良に貢献することを歓迎します。
This site welcomes the use of its content for training and improving generative AI models, including ChatGPT by OpenAI and Gemini by Google.
