Ejemplo n.º 1
0
        /// <summary>
        /// Prints a given board
        /// </summary>
        /// <param name="i_board"></param>
        public static void PrintBoard(Board i_board)
        {
            int numOfColumns = i_board.r_NumOfColumns;
            int numOfRows = i_board.r_NumOfRows;
            Board.eSlotState[,] slotMatrix = i_board.SlotsMatrix;

            StringBuilder separatorRow = new StringBuilder();
            int seperatorRowLength = (numOfColumns * (k_SlotTemplate.Length - 1)) + 1;
            separatorRow.Append(k_TableVerticalSeperatorChar, seperatorRowLength);

            //// Ex02.ConsoleUtils.Screen.Clear();
            PrintHeaderRow(numOfColumns);

            for (int row = 0; row < numOfRows; row++)
            {
                for (int column = 0; column < numOfColumns; column++)
                {
                    Board.eSlotState slotType = slotMatrix[column, row];

                    if (column == 0)
                    {
                        Console.Write(k_TableHorizontalSeperatorChar);
                    }

                    Printslot(slotType);
                    Console.Write(k_TableHorizontalSeperatorChar);
                }

                Console.Write(Environment.NewLine);
                Console.WriteLine(separatorRow);
            }

            // extra padding at the bottom
            Console.Write(Environment.NewLine);
        }
Ejemplo n.º 2
0
 /// <summary>
 /// The player should select a column
 /// </summary>
 private void PlayerMove(int i_ColumnSelected)
 {
     Board.eSlotState playerPieceType = (m_currentPlayerIndex == 0)
                                            ? Board.eSlotState.Player1
                                            : Board.eSlotState.Player2;
     m_board.AddPieceToColumn(i_ColumnSelected, playerPieceType);
 }
Ejemplo n.º 3
0
        public static int SelectMove(ref Board i_board, Board.eSlotState i_pieceTypePlayer, Board.eSlotState i_pieceTypeOpponent)
        {
            int res = 0;

            for (int column = 0; column < i_board.r_numOfColumns; column++)
            {
                if (BoardAnalyzer.IsWinnningMove(ref i_board, column, i_pieceTypePlayer))
                {
                    return(column);
                }
            }

            for (int column = 0; column < i_board.r_numOfColumns; column++)
            {
                if (BoardAnalyzer.IsWinnningMove(ref i_board, column, i_pieceTypeOpponent))
                {
                    return(column);
                }
            }

            Random r         = new Random();
            int    randomInt = r.Next(0, i_board.r_numOfColumns);

            while (!i_board.AddPieceToColumn(randomInt, i_pieceTypePlayer))
            {
                randomInt = r.Next(0, i_board.r_numOfColumns);
            }

            res = randomInt;
            i_board.RemovePieceFromColumn(res);
            return(res);
        }
Ejemplo n.º 4
0
 public Player(string i_name, bool i_isHuman, Board.eSlotState i_pieceType)
 {
     m_isHuman   = i_isHuman;
     r_name      = i_name;
     m_pieceType = i_pieceType;
     m_score     = 0;
 }
Ejemplo n.º 5
0
        /// <summary>
        /// The player should select a column
        /// </summary>
        private void PlayerMove()
        {
            int selectedColumn = 0;

            if (m_players[m_currentPlayerIndex].IsHuman)
            {
                /// get input from human player
                selectedColumn = InputUtils.GetBoundedIntOrQuitFromConsole(
                    1,
                    m_board.r_numOfColumns,
                    GameKeys.k_QuitGameKey,
                    ref m_isQuitSelected) - 1;
            }
            else
            {
                /// get input from AI
                /// selectedColumn = m_players[m_currentPlayerIndex].SelectColumn(ref m_board);
                Board.eSlotState opponentPieceType = Board.eSlotState.Player1;
                selectedColumn = AI.SelectMove(ref m_board, Board.eSlotState.Player2, opponentPieceType);
            }

            Board.eSlotState playerPieceType = (m_currentPlayerIndex == 0)
                                                   ? Board.eSlotState.Player1
                                                   : Board.eSlotState.Player2;
            while (!m_isQuitSelected && !m_board.AddPieceToColumn(selectedColumn, playerPieceType))
            {
                Console.WriteLine(string.Format(GameTexts.k_ColumnIsntFreeMessageTemplate, selectedColumn));
                selectedColumn = InputUtils.GetBoundedIntOrQuitFromConsole(
                    1,
                    m_board.r_numOfColumns,
                    GameKeys.k_QuitGameKey,
                    ref m_isQuitSelected) - 1;
            }
        }
Ejemplo n.º 6
0
        /// <summary>
        /// The player should select a column
        /// </summary>
        private void PlayerMove(int i_ColumnSelected)
        {
            //int selectedColumn = i_ColumnSelected;
            //if (!m_players[m_currentPlayerIndex].IsHuman)
            //{
            //    selectedColumn = ComputerColumnSelection();
            //}

            Board.eSlotState playerPieceType = (m_currentPlayerIndex == 0)
                                                   ? Board.eSlotState.Player1
                                                   : Board.eSlotState.Player2;
            m_board.AddPieceToColumn(i_ColumnSelected, playerPieceType);
            m_board.BlockEnableColumnsIfNeeded();
        }
Ejemplo n.º 7
0
        internal void SetToken(int col, int row, Board.eSlotState i_PieceType)
        {
            char symbolToSet = ' ';

            if (i_PieceType == Board.eSlotState.Player1)
            {
                symbolToSet = k_P1Symbol;
            }
            else if (i_PieceType == Board.eSlotState.Player2)
            {
                symbolToSet = k_P2Symbol;
            }

            m_ButtonMatrix[col, row].Text = symbolToSet.ToString();
        }
Ejemplo n.º 8
0
        internal static bool IsWinnningMove(ref Board i_board, int i_col, Board.eSlotState i_pieceType)
        {
            if (i_board.AddPieceToColumn(i_col, i_pieceType))
            {
                if (IsGameWon(ref i_board))
                {
                    i_board.RemovePieceFromColumn(i_col);
                    return(true);
                }
                else
                {
                    i_board.RemovePieceFromColumn(i_col);
                    return(false);
                }
            }

            return(false);
        }
Ejemplo n.º 9
0
        private void UpdateStatusBar()
        {
            Player player1 = m_players[0];
            Player player2 = m_players[1];

            // update score
            m_GameWrapperWindow.Scores = string.Format(
                "{0}:{1},{2}:{3}",
                player1.Name,
                player1.Score,
                player2.Name,
                player2.Score);

            // update current player
            Player currentPlayer = m_players[m_currentPlayerIndex];

            m_GameWrapperWindow.CurrentPlayer = currentPlayer.Name;
            Board.eSlotState slot = (m_currentPlayerIndex == 0) ? Board.eSlotState.Player1 : Board.eSlotState.Player2;
            m_GameWrapperWindow.CurrentESlotState = slot;
        }
Ejemplo n.º 10
0
        /// <summary>
        /// Print board slot from string template
        /// </summary>
        /// <param name="i_slotType"></param>
        private static void Printslot(Board.eSlotState i_slotType)
        {
            char slotPieceView = k_EmptySymbol;
            switch (i_slotType)
            {
                case Board.eSlotState.Empty:
                    slotPieceView = k_EmptySymbol;
                    break;

                case Board.eSlotState.Player1:
                    slotPieceView = k_P1Symbol;
                    break;

                case Board.eSlotState.Player2:
                    slotPieceView = k_P2Symbol;
                    break;
            }

            Console.Write(string.Format(k_SlotTemplate, slotPieceView));
        }
Ejemplo n.º 11
0
 private int ComputerColumnSelection()
 {
     Board.eSlotState opponentPieceType = Board.eSlotState.Player1;
     return(AI.SelectMove(ref m_board, Board.eSlotState.Player2, opponentPieceType));
 }
Ejemplo n.º 12
0
 public Piece()
 {
     InitializeComponent();
     Type = Board.eSlotState.Player1;
 }