ぬるーむ

Unity初心者が誰もが知っているゲームの模倣をしています。個人的な備忘録ですが、入門書を読み終えたばかりの初心者の方は「こんなへなちょこでもいいのか!」「俺の方がうまく作れる」と作成意欲がわいたりするかもしれません。

Unityでリバーシを作ってみた 1


スポンサードリンク

基本構成

大まかなクラスの関係は以下の通り(クラス図なんて立派なものじゃないよ)

f:id:Nullsuke:20201129101357p:plain
大まかなイメージ

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;
    }
}