Unityでリバーシを作ってみた 1
スポンサードリンク
基本構成
大まかなクラスの関係は以下の通り(クラス図なんて立派なものじゃないよ)
GameManagerクラス
コルーチンを用いてゲーム流れを管理する。
public class GameManager : MonoBehaviour { [SerializeField] Board boardPrefab = default; private readonly Player[] players = new Player[2]; private IEnumerator coroutineMain; private Board board; private bool isOver; public Player[] Players { get; set; } private void Awake() { board = Instantiate(boardPrefab); } private void Start() { //Playersはタイトル画面で初期化 board.SetUp(Players); board.RenderAll(); coroutineMain = CoroutineMain(); StartCoroutine(coroutineMain); } private IEnumerator CoroutineMain() { while (!isOver) { //合法手がある if (board.ExistsMovablePoint()) { board.Render(); yield return new WaitForSeconds(0.5f); board.OnTurn(); //思考中 yield return new WaitWhile(() => board.IsThinking); } else //合法手がない { board.Pass(); board.Next(); //相手も合法手がない。ゲームオーバー if (!board.ExistsMovablePoint()) { isOver = true; yield break; } else board.Previous(); //相手は合法手がある } board.Next(); } yield return null; } }