public void Run() { MatrixCoordinates kingCoordinates = new MatrixCoordinates(KingInitialRow, KingInitialColumn); King king = new King(kingCoordinates); MatrixCoordinates pawnACoordinates = new MatrixCoordinates(PawnAInitialRow, PawnAInitialColumn); Pawn pawnA = new Pawn('A', pawnACoordinates); MatrixCoordinates pawnBCoordinates = new MatrixCoordinates(PawnBInitialRow, PawnBInitialColumn); Pawn pawnB = new Pawn('B', pawnBCoordinates); MatrixCoordinates pawnCCoordinates = new MatrixCoordinates(PawnCInitialRow, PawnCInitialColumn); Pawn pawnC = new Pawn('C', pawnCCoordinates); MatrixCoordinates pawnDCoordinates = new MatrixCoordinates(PawnDInitialRow, PawnDInitialColumn); Pawn pawnD = new Pawn('D', pawnDCoordinates); bool endOfGame = false; int currentMove = 1; do { bool isValidMove = false; do { try { Console.Clear(); Console.WriteLine(this.board.GetImage(king, pawnA, pawnB, pawnC, pawnD)); isValidMove = this.IsValidMove(currentMove, king, pawnA, pawnB, pawnC, pawnD); } catch (KingSurvivalException kse) { Console.WriteLine(kse.Message); Console.ReadLine(); } } while (!isValidMove); endOfGame = this.HasGameEnded(currentMove, king, pawnA, pawnB, pawnC, pawnD); this.isKingWinner = this.HasKingWon(currentMove, endOfGame, king, pawnA, pawnB, pawnC, pawnD); currentMove++; } while (!endOfGame); if (endOfGame) { this.DisplayCurrentEndOnConsole(currentMove, king, pawnA, pawnB, pawnC, pawnD); } }
private bool IsAvailableNextPosition(MatrixCoordinates newCoordinates, params MatrixCoordinates[] pawnsCoordinates) { foreach (MatrixCoordinates coordinates in pawnsCoordinates) { if (newCoordinates == coordinates) { return false; } } return true; }
private bool CanCurrentPawnMove(MatrixCoordinates currentPawnCoordinates, params MatrixCoordinates[] obstaclesCoordinates) { if (currentPawnCoordinates.Row == BoardMaxRow) { return false; } else if (currentPawnCoordinates.Column > 0 && currentPawnCoordinates.Column < BoardMaxColumn) { MatrixCoordinates newCoordinatesDownRight = currentPawnCoordinates + DownRightDirection; MatrixCoordinates newCoordinatesDownLeft = currentPawnCoordinates + DownLeftDirection; if (!this.IsAvailableNextPosition(newCoordinatesDownRight, obstaclesCoordinates) && !this.IsAvailableNextPosition(newCoordinatesDownLeft, obstaclesCoordinates)) { return false; } } else if (currentPawnCoordinates.Row == 0) { MatrixCoordinates newCoordinates = currentPawnCoordinates + DownRightDirection; if (!this.IsAvailableNextPosition(newCoordinates, obstaclesCoordinates)) { return false; } } else if (currentPawnCoordinates.Column == BoardMaxColumn) { MatrixCoordinates newCoordinates = currentPawnCoordinates + DownLeftDirection; if (!this.IsAvailableNextPosition(newCoordinates, obstaclesCoordinates)) { return false; } } return true; }