Beispiel #1
0
        private static INode <ITicTacToeGame> KeepPlayingUntilEndOfGame(MinMaxAlgorithm <ITicTacToeGame> engine, INode <ITicTacToeGame> gamePosition)
        {
            while (true)
            {
                var currentPositionEvaluation = engine.Evaluate(gamePosition);

                PrintGame(gamePosition.Value, currentPositionEvaluation.Score);

                if (currentPositionEvaluation.BestNode == null)
                {
                    break;
                }

                var positionToPlay = ReadNumber();

                if (positionToPlay != -1)
                {
                    var row    = Convert.ToInt32(Math.Floor((double)(positionToPlay / BOARD_SIZE)));
                    var column = positionToPlay % BOARD_SIZE;

                    gamePosition = new TicTacToeNode(gamePosition.Value.PlayAt(row, column));
                    continue;
                }

                gamePosition = currentPositionEvaluation.BestNode;
            }

            return(gamePosition);
        }
Beispiel #2
0
        public static void Main(string[] args)
        {
            var engine = new MinMaxAlgorithm <ITicTacToeGame>(new TicTacToeHeuristic(), 5);

            while (true)
            {
                var gamePosition = GenerateEmptyGame();

                gamePosition = KeepPlayingUntilEndOfGame(engine, gamePosition);

                Console.ReadLine();
            }
        }
Beispiel #3
0
    private void InitAI()
    {
        MoveMaker          myStrategy = null;
        EvaluationFunction eval       = null;
        UtilityFunction    ufunc      = null;

        ////////////////
        // your code here to initialize the MinMax algorithm
        // 1. Evaluation function
        // 2. Utility function
        // 3. Strategy (MinMax and MinMax Alpha Beta)
        ///////////////
        switch (evalfunc)
        {
        case EvaluatationFunc.Eval:
            eval = new EvaluationFunction();
            break;

        default:
            Debug.Log("Not an option");
            break;
        }

        switch (utilfunc)
        {
        case UtilityFunc.Util:
            ufunc = new UtilityFunction();
            break;

        default:
            Debug.Log("Not an option");
            break;
        }

        switch (strategy)
        {
        case TypeStrategy.RandomStrategy:
            myStrategy = new RandomSolution(this, GameManager.instance.GetAdversary(this));
            break;

        case TypeStrategy.MinMax:
            myStrategy = new MinMaxAlgorithm(this, eval, ufunc, GameManager.instance.GetAdversary(this));
            break;

        default:
            Debug.Log("Not an option");
            break;
        }

        moveMaker = myStrategy;
    }
Beispiel #4
0
    // private variables

    // Start is called before the first frame update
    void Start()
    {
        minmax     = transform.gameObject.AddComponent <MinMaxAlgorithm>();
        minmax.ttt = this;
        //minmax.ttt = this;
        StartNewGame();
        float scale = 2.5f;

        physicalBoard = new GameObject[3, 3];
        Vector3 offset = new Vector3(-2.5f, 0, 0);

        for (ushort x = 0; x < 3; x++)
        {
            for (ushort y = 0; y < 3; y++)
            {
                physicalBoard[x, y] = Instantiate(boardTile, transform);
                physicalBoard[x, y].transform.position = offset + new Vector3(x * scale, 0, y * scale);
            }
        }
        transform.Rotate(new Vector3(180, 0, 0));
        peices = new List <GameObject>();
    }
Beispiel #5
0
 public void Setup(BoardManager board, MinMaxAlgorithm algorithm)
 {
     this.board     = board;
     this.algorithm = algorithm;
     CheckFirstPlayer();
 }