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 ・・・新着記事一覧を見る
TRIMRANGE関数(セル範囲をトリム:端の空白セルを除外)|エクセル入門(2024-08-30)
正規表現関数(REGEXTEST,REGEXREPLACE,REGEXEXTRACT)|エクセル入門(2024-07-02)
エクセルが起動しない、Excelが立ち上がらない|エクセル雑感(2024-04-11)
ブール型(Boolean)のis変数・フラグについて|VBA技術解説(2024-04-05)
テキストの内容によって図形を削除する|VBA技術解説(2024-04-02)
ExcelマクロVBA入門目次|エクセルの神髄(2024-03-20)
VBA10大躓きポイント(初心者が躓きやすいポイント)|VBA技術解説(2024-03-05)
テンキーのスクリーンキーボード作成|ユーザーフォーム入門(2024-02-26)
無効な前方参照か、コンパイルされていない種類への参照です。|エクセル雑感(2024-02-17)
初級脱出10問パック|VBA練習問題(2024-01-24)
アクセスランキング ・・・ ランキング一覧を見る
1.最終行の取得(End,Rows.Count)|VBA入門
2.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
3.変数宣言のDimとデータ型|VBA入門
4.繰り返し処理(For Next)|VBA入門
5.RangeとCellsの使い方|VBA入門
6.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
7.セルのクリア(Clear,ClearContents)|VBA入門
8.メッセージボックス(MsgBox関数)|VBA入門
9.条件分岐(Select Case)|VBA入門
10.ブック・シートの選択(Select,Activate)|VBA入門
- ホーム
- マクロVBA応用編
- マクロVBAサンプル集
- Excel将棋:クラスの設計(№2)
このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。