示例#1
0
        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);
        }
示例#2
0
        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));
        }
示例#3
0
        /// <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
            });
        }
示例#4
0
        /// <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();
        }
示例#5
0
        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);
            }
        }
示例#6
0
        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));
        }
示例#7
0
 /// <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);
 }