private static int CheckDiagonalMove(IBoard board, Position figurePosition, int available, IFigure figure, Position position) { if (Position.CheckIsValid(position)) { IFigure figureAtPosition = board.GetFigureAtPosition(position); if (figureAtPosition != null) { board.AddFigure(figure, position); board.AddFigure(null, figurePosition); var kingPosition = board.GetFigurePostionByTypeAndColor("King", figure.Color); if (IsFieldAttacked(board, kingPosition, figure.Color) == false) { available++; } board.AddFigure(figureAtPosition, position); board.AddFigure(figure, figurePosition); } } return(available); }
public void AddFigureToBoard(IPlayer firstPlayser, IPlayer secondPlayer, IBoard board, string fen) { var splitedFen = fen.Split(new[] { '/' }, StringSplitOptions.RemoveEmptyEntries); var index = 0; for (int row = splitedFen.Length - 1; row >= 0; row--) { var currentRow = this.MakeRow(splitedFen[row]); for (int col = 0; col < currentRow.Length; col++) { if (currentRow[col] == Pown) { var pawn = new Pawn(secondPlayer.Color); secondPlayer.AddFigure(pawn); var position = new Position(index + 1, (char)(col + 'a')); board.AddFigure(pawn, position); } else if (currentRow[col] == King) { var figureInstance = new King(firstPlayser.Color); firstPlayser.AddFigure(figureInstance); var position = new Position(index + 1, (char)(col + 'a')); board.AddFigure(figureInstance, position); } } index++; } }
private static void ChosenFigure(IBoard board, Position to, int chosenNumber, ChessColor color) { IFigure promotedFigure = null; switch (chosenNumber) { case 1: board.RemoveFigure(to); promotedFigure = new Queen(color); board.AddFigure(promotedFigure, to); break; case 2: board.RemoveFigure(to); promotedFigure = new Rook(color); board.AddFigure(promotedFigure, to); break; case 3: board.RemoveFigure(to); promotedFigure = new Bishop(color); board.AddFigure(promotedFigure, to); break; case 4: board.RemoveFigure(to); promotedFigure = new Knight(color); board.AddFigure(promotedFigure, to); break; } }
public void Initialize(IList <IPlayer> players, IBoard board) { this.ValidateStrategy(players, board); var firstPlayer = players[0]; var secondPlayer = players[1]; var thirdPlayer = players[2]; var fourthPlayer = players[3]; //first player figure position for (int i = 1; i < 3; i++) { for (int j = 1; j < 3; j++) { var figure = new Figure(firstPlayer.Color); firstPlayer.AddFigure(figure); var position = new Position(i, j); board.AddFigure(figure, position); } } //second player for (int i = 1; i < 3; i++) { for (int j = 12; j < 14; j++) { var figure = new Figure(secondPlayer.Color); secondPlayer.AddFigure(figure); var position = new Position(i, j); board.AddFigure(figure, position); } } ////third player figure position for (int i = 12; i < 14; i++) { for (int j = 1; j < 3; j++) { var figure = new Figure(thirdPlayer.Color); thirdPlayer.AddFigure(figure); var position = new Position(i, j); board.AddFigure(figure, position); } } ////fourth player figure position for (int row = 12; row < 14; row++) { for (int col = 12; col < 14; col++) { var figure = new Figure(fourthPlayer.Color); fourthPlayer.AddFigure(figure); var position = new Position(row, col); board.AddFigure(figure, position); } } }
public void Start() { while (true) { try { IPlayer player = this.GetNextPlayer(); IFigure figure = new Figure(player.FigureType); var move = this.input.GetNextPlayerMove(player); var to = move.Position; this.CheckIfPositionIsEmpty(to); board.AddFigure(figure, to); this.renderer.RenderBoard(this.board); try { WinningConditions(this.board); } catch (Exception ex) { this.renderer.PrintErrorMessage(ex.Message); ConsoleHelpers.PrintWinner(player); return; } } catch (Exception ex) { this.currentPlayerIndex--; this.renderer.PrintErrorMessage(ex.Message); } } }
private void AddPawnsToBoardRow(IPlayer player, IBoard board, int chessRow) { for (int i = 0; i < GlobalConstants.StandartGameTotalBoardCols - 2; i += 2) { var pawn = new Pawn(player.Color); player.AddFigure(pawn); var position = new Position(chessRow, (char)(i + 'a')); board.AddFigure(pawn, position); } // TODO: Remove //// For testing only //var pawn = new Pawn(player.Color); //player.AddFigure(pawn); //var position = new Position(8, (char)(0 + 'a')); //board.AddFigure(pawn, position); //pawn = new Pawn(player.Color); //player.AddFigure(pawn); //position = new Position(8, (char)(2 + 'a')); //board.AddFigure(pawn, position); //pawn = new Pawn(player.Color); //player.AddFigure(pawn); //position = new Position(8, (char)(4 + 'a')); //board.AddFigure(pawn, position); //pawn = new Pawn(player.Color); //player.AddFigure(pawn); //position = new Position(6, (char)(4 + 'a')); //board.AddFigure(pawn, position); }
private void AddKingToBoardRow(IPlayer player, IBoard board, int chessRow, char chessCol) { var figureInstance = new King(player.Color); player.AddFigure(figureInstance); var position = new Position(chessRow, chessCol); board.AddFigure(figureInstance, position); }
private static int CheckIfMoveIsAvailable(IBoard board, int available, Position figurePosition, IFigure figure, Position currentPosition, IFigure currentFigure) { board.AddFigure(null, figurePosition); board.AddFigure(figure, currentPosition); var kingPosition = board.GetFigurePostionByTypeAndColor("King", figure.Color); if (IsFieldAttacked(board, kingPosition, figure.Color) == false) { available++; } board.AddFigure(figure, figurePosition); board.AddFigure(currentFigure, currentPosition); return(available); }
private void AddPawnsToBoardRow(IPlayer player, IBoard board, int chessRow) { for (int i = 0; i < BOARD_SIZE; i++) { var pawn = new Pawn(player.Color); player.AddFigure(pawn); board.AddFigure(pawn, new Position(chessRow, (char)(i + 'a'))); } }
private void AddPawnsToBoardRow(IPlayer player, IBoard board, int chessRow) { for (int i = 0; i < GlobalConstants.StandartGameTotalBoardCols; i++) { var pawn = new Pawn(player.Color); player.AddFigure(pawn); var position = new Position(chessRow, (char)(i + 'a')); board.AddFigure(pawn, position); } }
private void AddPawnsToBoardRow(IPlayer player, IBoard board, int chessRow) { for (int i = 0; i < BoardTotalRowsAndCols; i++) { var pawn = new Pawn(player.Color); player.AddFigure(pawn); var position = new Position(chessRow, (char)(i + 'a')); board.AddFigure(pawn, position); } }
private void PlacePeice(int pos, Type gamepeice, IPlayer player, IBoard board, int chessRow) { var figureType = gamepeice; var figureInstance = (IFigure)Activator.CreateInstance(figureType, player.Color); player.AddFigure(figureInstance); var position = new Position(chessRow, (char)(pos + 'a')); board.AddFigure(figureInstance, position); }
private void AddArmyToBoardRow(IPlayer player, IBoard board, int chessRow) { for (int i = 0; i < BOARD_SIZE; i++) { var figureType = this.figureTypes[i]; var figureEntity = (IFigure)Activator.CreateInstance(figureType, player.Color); player.AddFigure(figureEntity); board.AddFigure(figureEntity, new Position(chessRow, (char)(i + 'a'))); } }
private void AddArmyToBoardRow(IPlayer player, IBoard board, int chessRow) { for (int i = 0; i < BoardTotalRowsAndCols; i++) { var figureType = this.figureTypes[i]; var figureInstance = (IFigure)Activator.CreateInstance(figureType, player.Color); player.AddFigure(figureInstance); var position = new Position(chessRow, (char)(i + 'a')); board.AddFigure(figureInstance, position); } }
private void InitializePawns(IPlayer player, IBoard board, int chessRow) { for (int i = 0; i < BoradTotalRowsCols; i++) { Pawn pawn = new Pawn(player.Color); player.AddFigure(pawn); var position = new Position(chessRow, (char)(i + 'a')); board.AddFigure(pawn, position); } }
/// <summary> /// Move Figure method that moves figures /// </summary> /// <param name="from">From position</param> /// <param name="direction">To direction</param> /// <param name="board">The board on which we are moving the figure</param> public void MoveFigure(IPosition from, int direction, IBoard board) { var figurePosition = board.GetFigurePosition(this.Figure); IPosition to = figurePosition.GenerateNewPosition(direction); Validator.CheckIfPositionValid(to); Validator.CheckIfFigureOnTheWay(to, board); board.RemoveFigure(from); board.AddFigure(this.Figure, to); }
private void AddArmyToBoardRow(IPlayer player, IBoard board, int chessRow) { for (int i = 0; i < GlobalConstants.StandartGameTotalBoardCols; i++) { var figureType = this.figureTypes[i]; var figureInstance = (IFigure)Activator.CreateInstance(figureType, player.Color); player.AddFigure(figureInstance); var position = new Position(chessRow, (char)(i + 'a')); board.AddFigure(figureInstance, position); } }
private void AddArmyToBoardRow(IPlayer player, IBoard board, int chessRow) { for (var i = 0; i < BOARD_TOTAL_ROWS_AND_COLS; i++) { var figureType = this._figureTypes[i]; var figureInstance = (IFigure)Activator.CreateInstance(figureType, player.Color); player.AddFigure(figureInstance); var chessCol = (char)(i + 'a'); var position = new Position(chessRow, chessCol); board.AddFigure(figureInstance, position); } }
private void AddPawnsToBoardRow(IPlayer player, IBoard board, int chessRow) { for (var i = 0; i < BOARD_TOTAL_ROWS_AND_COLS; i++) { var chessCol = (char)(i + 'a'); var pawn = new Pawn(player.Color); player.AddFigure(pawn); var position = new Position(chessRow, chessCol); board.AddFigure(pawn, position); } }
private void UndoMovement(IBoard board, IFigure figure, IFigure figureTaken, Move move) { var from = move.To; var to = move.From; board.MoveFigureAtPosition(figure, from, to); if (figureTaken != null) { board.AddFigure(figureTaken, from); } throw new InvalidOperationException(ExceptionMessages.YouAreInCheckException); }
private void AddPawnsToBoardRow(IPlayer player, IBoard board, int chessRow) { if (chessRow > BoardTotalRowsAndCols || chessRow < 1) { throw new Exception("Chess row out of bounds!"); } for (int i = 0; i < BoardTotalRowsAndCols; i++) { var pawn = new Pawn(player.Color); player.AddFigure(pawn); var position = new Position(chessRow, (char)(i + 'a')); board.AddFigure(pawn, position); } }
public bool CheckCastling(IBoard board, IFigure figure, Position from, Position to) { var color = figure.Color; if (color == ChessColor.White) { if (to.Row == WhiteShortCastlingPosition.Row && to.Col == WhiteShortCastlingPosition.Col && from.Col == GlobalConstants.StandardGameWhiteKingPosition.Col && from.Row == GlobalConstants.StandardGameWhiteKingPosition.Row) { if (!MoveFiguresInformation.isWhiteKingMoved && !MoveFiguresInformation.isWhiteRightRookMoved) { CheckForFiguresBetweenPositions(board, figure, from, to); CheckIfKingIsInCheck(board, color); CheckIfKingCrossesAttackedField(board, GlobalConstants.StandardGameWhiteKingPosition, WhiteShortCastlingPosition, color); board.RemoveFigure(GlobalConstants.StandardGameWhiteKingPosition); board.RemoveFigure(GlobalConstants.StandardGameWhiteRightRookPosition); board.AddFigure(new King(color), WhiteShortCastlingPosition); board.AddFigure(new Rook(color), Position.FromChessCoordinates(1, 'f')); return(true); } else { throw new InvalidOperationException(ExceptionMessages.RookOrKingHaveBeenMovedException); } } if (to.Row == WhiteLongCastlingPosition.Row && to.Col == WhiteLongCastlingPosition.Col && from.Col == GlobalConstants.StandardGameWhiteKingPosition.Col && from.Row == GlobalConstants.StandardGameWhiteKingPosition.Row) { if (!MoveFiguresInformation.isWhiteKingMoved && !MoveFiguresInformation.isWhiteLeftRookMoved) { CheckForFiguresBetweenPositions(board, figure, from, to); CheckIfKingIsInCheck(board, color); CheckIfKingCrossesAttackedField(board, GlobalConstants.StandardGameWhiteKingPosition, WhiteLongCastlingPosition, color); board.RemoveFigure(GlobalConstants.StandardGameWhiteKingPosition); board.RemoveFigure(GlobalConstants.StandardGameWhiteLeftRookPosition); board.AddFigure(new King(color), WhiteLongCastlingPosition); board.AddFigure(new Rook(color), Position.FromChessCoordinates(1, 'd')); return(true); } else { throw new InvalidOperationException(ExceptionMessages.RookOrKingHaveBeenMovedException); } } } if (color == ChessColor.Black) { if (to.Row == BlackShortCastlingPosition.Row && to.Col == BlackShortCastlingPosition.Col && from.Col == GlobalConstants.StandardGameBlackKingPosition.Col && from.Row == GlobalConstants.StandardGameBlackKingPosition.Row) { if (!MoveFiguresInformation.isBlackKingMoved && !MoveFiguresInformation.isBlackRightRookMoved) { CheckForFiguresBetweenPositions(board, figure, from, to); CheckIfKingIsInCheck(board, color); CheckIfKingCrossesAttackedField(board, GlobalConstants.StandardGameBlackKingPosition, BlackShortCastlingPosition, color); board.RemoveFigure(GlobalConstants.StandardGameBlackKingPosition); board.RemoveFigure(GlobalConstants.StandardGameBlackRightRookPosition); board.AddFigure(new King(color), BlackShortCastlingPosition); board.AddFigure(new Rook(color), Position.FromChessCoordinates(8, 'f')); return(true); } else { throw new InvalidOperationException(ExceptionMessages.RookOrKingHaveBeenMovedException); } } if (to.Row == BlackLongCastlingPosition.Row && to.Col == BlackLongCastlingPosition.Col && from.Col == GlobalConstants.StandardGameBlackKingPosition.Col && from.Row == GlobalConstants.StandardGameBlackKingPosition.Row) { if (!MoveFiguresInformation.isBlackKingMoved && !MoveFiguresInformation.isBlackLeftRookMoved) { CheckForFiguresBetweenPositions(board, figure, from, to); CheckIfKingIsInCheck(board, color); CheckIfKingCrossesAttackedField(board, GlobalConstants.StandardGameBlackKingPosition, BlackLongCastlingPosition, color); board.RemoveFigure(GlobalConstants.StandardGameBlackKingPosition); board.RemoveFigure(GlobalConstants.StandardGameBlackLeftRookPosition); board.AddFigure(new King(color), BlackLongCastlingPosition); board.AddFigure(new Rook(color), Position.FromChessCoordinates(8, 'd')); return(true); } else { throw new InvalidOperationException(ExceptionMessages.RookOrKingHaveBeenMovedException); } } } return(false); }