예제 #1
0
        public static List <AttackedSquare> GetDiagonalLine(GameState gameState, Square square, Piece attackingPiece, DiagonalDirection direction)
        {
            var attacks        = new List <AttackedSquare>();
            var diagonalLine   = getIteratorByDirectionEnum(direction);
            var position       = square.Index;
            var attackPosition = square.Index;

            do
            {
                if (!canDoDiagonalsFromStartPosition(position, diagonalLine))
                {
                    break;
                }
                attackPosition = attackPosition + diagonalLine;
                var moveViability = GeneralEngine.DetermineMoveViability(gameState, attackingPiece, attackPosition);
                //I don't think either of these conditions should occur.
                if (!moveViability.IsValidCoordinate || moveViability.SquareToAdd == null)
                {
                    continue;
                }
                var attack = new AttackedSquare(square, moveViability.SquareToAdd, isProtecting: moveViability.IsTeamPiece);
                attacks.Add(attack);
                if (moveViability.SquareToAdd.Occupied)
                {
                    break;
                }
            } while (isValidDiagonalCoordinate(attackPosition));
            return(attacks);
        }
예제 #2
0
 private static bool isValidDiagonalCoordinate(int position)
 {
     if (!GeneralEngine.IsValidCoordinate(position))
     {
         return(false);
     }
     if (position % 8 == 0 || position % 8 == 7)
     {
         return(false);
     }
     if (position < 7 || position > 56)
     {
         return(false);
     }
     return(true);
 }
예제 #3
0
        public static MoveViability DetermineMoveViability(GameState gameState, Piece attacker, int position)
        {
            if (!GeneralEngine.IsValidCoordinate(position))
            {
                return(new MoveViability(false, false, null));
            }
            var square = gameState.Squares.GetSquare(position);

            if (!square.Occupied)
            {
                return(new MoveViability(true, false, square));
            }
            var blockingPiece = square.Piece;
            var isTeamPiece   = GeneralEngine.IsTeamPiece(attacker.Color, blockingPiece);

            if (!isTeamPiece)
            {
                return(new MoveViability(true, true, square));
            }
            return(new MoveViability(true, false, square));
        }