Ejemplo n.º 1
0
    public bool IsValidMove(CheckerCoords newCoords)
    {
        if (_board.OutsideBoard(newCoords) || _board.isWhiteMove != IsWhite)
        {
            return(false);
        }
        int yRemainder = newCoords.Y % 2, xRemainder = newCoords.X % 2;

        if (yRemainder != xRemainder)
        {
            return(false);
        }

        var deltaY         = newCoords.Y - _coords.Y;
        var deltaX         = newCoords.X - _coords.X;
        var absoluteDeltaX = Mathf.Abs(deltaX);
        var absoluteDeltaY = Mathf.Abs(deltaY);

        if (IsQueen)
        {
            if (absoluteDeltaY == absoluteDeltaX)
            {
                return(IsQueenMoveValid(newCoords, !isDummy));
            }
        }
        else
        {
            if (absoluteDeltaY == 1 && absoluteDeltaX == 1)
            {
                return(IsSimpleMoveValid(newCoords));
            }
            if (absoluteDeltaY == 2 && absoluteDeltaX == 2)
            {
                return(IsKillMoveValid(newCoords, deltaY, deltaX));
            }
        }
        return(false);
    }