示例#1
0
    public void EnterState()
    {
        enabled = true;

        Simulator currentTable = new Simulator(GameManager.instance.pieces, GameManager.instance.movedPawns,
                                               GameManager.instance.currentPlayer, GameManager.instance.otherPlayer);

        AIEvaluation MiniMaxEval = MiniMax(currentTable, 3, null, Vector2Int.zero);

        GameManager.instance.Move(MiniMaxEval.piece, MiniMaxEval.move);

        // Se termina functia in ExistState pentru a continua jocul
        ExitState();
    }
示例#2
0
    private AIEvaluation MiniMax(Simulator table, int depth, GameObject parentPiece, Vector2Int parentMove)
    {
        if (depth == 0)
        {
            AIEvaluation retObj = new AIEvaluation(TableEvaluation(table), parentPiece, parentMove);
            return(retObj);
        }

        if (table.currentPlayer.AI)
        {
            // Maximizer is the Bot
            AIEvaluation evaluation = new AIEvaluation(-10000);

            foreach (GameObject piece in table.currentPlayer.pieces)
            {
                foreach (Vector2Int move in table.MovesForPiece(piece))
                {
                    Simulator childTable = new Simulator(table.pieces, table.movedPawns, table.currentPlayer, table.otherPlayer);

                    childTable.Move(piece, move);
                    childTable.NextPlayer();

                    if (depth == 3)
                    {
                        evaluation = AIEvaluation.Max(evaluation, MiniMax(childTable, depth - 1, piece, move));
                    }
                    else
                    {
                        evaluation = AIEvaluation.Max(evaluation, MiniMax(childTable, depth - 1, parentPiece, parentMove));
                    }
                }
            }

            return(evaluation);
        }
        else
        {
            // Minimizer is the Human
            AIEvaluation evaluation = new AIEvaluation(10000);

            foreach (GameObject piece in table.currentPlayer.pieces)
            {
                foreach (Vector2Int move in table.MovesForPiece(piece))
                {
                    Simulator childTable = new Simulator(table.pieces, table.movedPawns, table.currentPlayer, table.otherPlayer);

                    childTable.Move(piece, move);
                    childTable.NextPlayer();

                    if (depth == 3)
                    {
                        evaluation = AIEvaluation.Min(evaluation, MiniMax(childTable, depth - 1, piece, move));
                    }
                    else
                    {
                        evaluation = AIEvaluation.Min(evaluation, MiniMax(childTable, depth - 1, parentPiece, parentMove));
                    }
                }
            }

            return(evaluation);
        }
    }
示例#3
0
 static public AIEvaluation Max(AIEvaluation e1, AIEvaluation e2)
 {
     return((e1.value > e2.value) ? e1 : e2);
 }