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); }
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); }
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)); }