リバーシ
完成 完成したものがこちら nullsuke.github.io ソースコードはこちら github.com まとめ AIの強さについては私自身が弱いので何とも言えない(Lv1にすら勝てない)。 速度については、下記の状態からの処理時間がそれぞれ Lv1(3手読み):24(ms) Lv2(5手読み)…
AIの作成 2 合法手の数、確定石(4隅とそれに隣接する石)の数、C打ち・X打ちの数で評価する。 探索と同様、主に下記の本を参考にした。 リバーシのアルゴリズム C++&Java対応―「探索アルゴリズム」「評価関数」の設計と実装 (I・O BOOKS) | Seal Software |本…
AIの作成 1 NegaScout法で探索。局面数に関わらず3手~7手先まで探索。 主に下記の本を参考にした。 リバーシのアルゴリズム C++&Java対応―「探索アルゴリズム」「評価関数」の設計と実装 (I・O BOOKS) | Seal Software |本 | 通販 | Amazon NegaScout法 αβ…
Anchor、Pivotの設定 一般的にリバーシの盤は左上が原点のようである。クリックイベントで座標を管理しやすくする為、セルや石などもそれに合わせる。 一般的なリバーシ盤 セルなどのAnchor、Pivot設定 セルの画像のPivot設定 石などの画像のPivot設定 Cell…
ViewBoardクラス Cell、Stone 、Markクラスを用いて石、合法手、相手の最後の手の描画を行う。 public class ViewBoard : MonoBehaviour { [SerializeField] Cell cellPrefabs = default; private readonly int size = 8; private readonly List<Cell> cells = new</cell>…
LogicBoardクラス ビットボードを用いて盤の状態の更新、合法手の取得を行う。 主に下記サイトを参考にした。 オセロをビットボードで実装する - Qiita public class LogicBoard { private readonly Stack<ulong[]> log = new Stack<ulong[]>(); private ulong[] bitBoards = n</ulong[]></ulong[]>…
Boardクラス 主に以下のことを行う。 LogicBoardを用いて盤の状態の更新、合法手の取得。 ViewBoardを用いて石、合法手の表示。 プレイヤー、ターンの管理。 public class Board : MonoBehaviour { private Player[] players; private LogicBoard logicBoard…
基本構成 大まかなクラスの関係は以下の通り(クラス図なんて立派なものじゃないよ) 大まかなイメージ GameManagerクラス コルーチンを用いてゲーム流れを管理する。 public class GameManager : MonoBehaviour { [SerializeField] Board boardPrefab = defau…