/// <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); }
/// <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); }
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); }
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; }
/// <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; } }
/// <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(); }
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(); }
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); }
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; }
/// <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)); }
private int ComputerColumnSelection() { Board.eSlotState opponentPieceType = Board.eSlotState.Player1; return(AI.SelectMove(ref m_board, Board.eSlotState.Player2, opponentPieceType)); }
public Piece() { InitializeComponent(); Type = Board.eSlotState.Player1; }