Esempio n. 1
0
    void InitializeBoard()
    {
        board = ChessBoard.ClassicVariantBoard();

        tiles = new Tile3D[board.size.x, board.size.y, board.size.z, board.size.w];
        for (int x = 0; x < board.size.x; x++)
        {
            for (int y = 0; y < board.size.y; y++)
            {
                for (int z = 0; z < board.size.z; z++)
                {
                    for (int w = 0; w < board.size.w; w++)
                    {
                        tiles[x, y, z, w] = GameObject.Instantiate(tilePrefab).GetComponent <Tile3D>();
                        tiles[x, y, z, w].Initialize(x, y, z, w, board);
                        tiles[x, y, z, w].transform.parent = tileContainer.transform;

                        tiles[x, y, z, w].transform.position = GetTilePosition(x, y, z, w);
                        tiles[x, y, z, w].transform.rotation = Quaternion.LookRotation(Vector3.up);
                    }
                }
            }
        }

        attackers = new ChessboardAttackerHelper(board);
        attackers.ComputeAttackers();
    }
Esempio n. 2
0
    public bool RunAIStep()
    {
        if (isStepResultReady)
        {
            return(true);
        }

        if (AIStepPossibleMoves.Count == 0)
        {
            scoresComputed     = 0;
            AIStepScratchBoard = originalBoard.DeepCopy();
            attackHelper       = new ChessboardAttackerHelper(AIStepScratchBoard);

            AIStepPossibleMoves = new List <ChessBoard.Move>();
            foreach (ChessPiece piece in AIStepScratchBoard.pieces)
            {
                if (piece == null)
                {
                    continue;
                }
                if (piece.team == AIStepScratchBoard.currentMove)
                {
                    foreach (Point4 possibleMove in piece.GetValidMoves())
                    {
                        AIStepPossibleMoves.Add(AIStepScratchBoard.GetMove(piece.currentPosition, possibleMove));
                    }
                }
            }
        }

        ChessBoard.Move move = AIStepPossibleMoves[0];
        AIStepPossibleMoves.RemoveAt(0);
        AIStepScratchBoard.MovePiece(move);
        float score = -1000000;
        Dictionary <ChessBoard.Move, float> subMoveScores = ComputeMoveScores(AIStepScratchBoard, 1);

        foreach (KeyValuePair <ChessBoard.Move, float> subMove in subMoveScores)
        {
            if (subMove.Value > score)
            {
                score = subMove.Value;
            }
        }

        score = -score;
        AIStepMoveScores.Add(move, score);
        AIStepScratchBoard.Undo();

        if (AIStepPossibleMoves.Count == 0)
        {
            isStepResultReady = true;
            return(true);
        }

        return(false);
    }
Esempio n. 3
0
    public void Restart()
    {
        chessboardControllers = Transform.FindObjectsOfType <ChessboardController2D>();

        board = ChessBoard.ClassicVariantBoard();
        foreach (ChessboardController2D chessboardController in chessboardControllers)
        {
            chessboardController.Initialize(board);
        }

        attackers = new ChessboardAttackerHelper(board);
        attackers.ComputeAttackers();

        selectedTile    = Point4.NONE;
        destinationTile = Point4.NONE;
        attackedTile    = Point4.NONE;
    }
Esempio n. 4
0
    // Use this for initialization
    void Start()
    {
        chessboardControllers = Transform.FindObjectsOfType <ChessboardController2D>();

        board = ChessBoard.ClassicVariantBoard();
        foreach (ChessboardController2D chessboardController in chessboardControllers)
        {
            chessboardController.Initialize(board);
        }

        attackers = new ChessboardAttackerHelper(board);
        attackers.ComputeAttackers();

        introStartTime = Time.time;

        CreatePanGesture();
        CreateScaleGesture();
        CreateTapGesture();
    }
Esempio n. 5
0
    public ChessBoard.Move DoTurn()
    {
        scoresComputed = 0;
        ChessBoard scratchBoard = originalBoard.DeepCopy();

        attackHelper = new ChessboardAttackerHelper(scratchBoard);

        Dictionary <ChessBoard.Move, float> moveScores = ComputeMoveScores(scratchBoard, 2);

        List <ChessBoard.Move> topMoves = new List <ChessBoard.Move>();

        foreach (ChessBoard.Move subMove in moveScores.Keys)
        {
            for (int i = 0; i < 10; i++)
            {
                if (i >= topMoves.Count)
                {
                    topMoves.Add(subMove);
                    break;
                }
                else if (moveScores[subMove] > moveScores[topMoves[i]])
                {
                    topMoves.Insert(i, subMove);
                    break;
                }
            }
        }

        ChessBoard.Move randomGoodMove = topMoves[Random.Range(0, 10)];

        /*if (topMoves[0].pieceCaptured != null || moveScores[topMoves[0]] - moveScores[randomGoodMove] > 5)
         * {
         *  //If the best move is a capture, or is so much better, do it.
         *  return topMoves[0];
         * }*/
        return(topMoves[0]);
    }