private bool IsGoodPosition(IWarriorBoard board, int row, int col, int distance, params char[] keepAwayChars) { if (board.Board[row, col] != GlobalConstants.EmtpyCellChar) { return(false); } if (keepAwayChars.Length == 0) { return(true); } for (int r = 0; r < GlobalConstants.StandardGameTotalBoardRows; r++) { for (int c = 0; c < GlobalConstants.StandardGameTotalBoardCols; c++) { if (Math.Abs(row - r) + Math.Abs(col - c) < distance && keepAwayChars.Contains(board.Board[r, c])) { return(false); } } } return(true); }
private Player GetPlayer(IWarriorBoard board, char playerChar, string instructions, params char[] keepAwayChars) { Warrior playerWarrior = this.renderer.ReadPlayerChoice(instructions); Position position = InitializeRandomPosition(board, GlobalConstants.PlayerDistance, playerChar, keepAwayChars); return(new Player(playerChar, position, playerWarrior)); }
/// <summary> /// Sets the position and the character of each player on the board after they have chosen their Warrior /// </summary> /// <param name="board"></param> /// <returns>A list of the two players with information about their position</returns> public List <IPlayer> InitializePlayers(IWarriorBoard board) { IPlayer playerOne = GetPlayer(board, GlobalConstants.PlayerOneChar, PlayerOneInstructions); IPlayer playerTwo = GetPlayer(board, GlobalConstants.PlayerTwoChar, PlayerTwoInstructions, GlobalConstants.PlayerOneChar); return(new List <IPlayer>() { playerOne, playerTwo }); }
/// <summary> /// Renders the Main Menu, where players can choose their Warrior and Initializes the starting board. /// </summary> public void Start() { this.renderer = new ConsoleRenderer(); this.board = new WarriorBoard(); renderer.RenderMainMenu(); InitializeGameObjects(board); StartGame(); }
private void InializeFruits(IWarriorBoard board) { for (int i = 0; i < GlobalConstants.AppleCount; i++) { InitializeRandomPosition(board, GlobalConstants.FruitDistance, GlobalConstants.AppleChar, GlobalConstants.AppleChar, GlobalConstants.PearChar); } for (int i = 0; i < GlobalConstants.PearCount; i++) { InitializeRandomPosition(board, GlobalConstants.FruitDistance, GlobalConstants.PearChar, GlobalConstants.AppleChar, GlobalConstants.PearChar); } }
private Position InitializeRandomPosition(IWarriorBoard board, int distance, char character, params char[] keepAwayChars) { var random = new Random(); var r = random.Next(0, GlobalConstants.StandardGameTotalBoardRows); var c = random.Next(0, GlobalConstants.StandardGameTotalBoardCols); while (!IsGoodPosition(board, r, c, distance, keepAwayChars)) { r = random.Next(0, GlobalConstants.StandardGameTotalBoardRows); c = random.Next(0, GlobalConstants.StandardGameTotalBoardCols); } board.Board[r, c] = character; return(new Position(r, c)); }
/// <summary> /// Using a random generator, the method sets the position of the players and fruits in the correct way, based on the preset conditions. /// </summary> /// <param name="board">Uses the board as reference for the positioning of the new elements.</param> public void InitializeGameObjects(IWarriorBoard board) { this.players = InitializePlayers(board); InializeFruits(board); }