internal Player(int io_BoardSize, Checkers.eCheckerGroup i_BelongingGroup, string i_Name) { this.m_Name = i_Name; this.m_RemainCheckers = ((io_BoardSize - k_NumOfEmtyRowsAtBeginingOfTheGame) / 2) * (io_BoardSize / 2); this.m_CheckersArray = new Checkers[m_RemainCheckers]; this.m_BelongingGroup = i_BelongingGroup; initializeCheckerArrayAtBeginingOfTheGame(io_BoardSize); }
internal Checkers.eCheckerGroup GetOppositePlayerKing(Checkers.eCheckerGroup i_Group) { if (i_Group == Checkers.eCheckerGroup.O) { return(Checkers.eCheckerGroup.OKing); } else { return(Checkers.eCheckerGroup.XKing); } }
public void ResetGame() { m_CurrentTurn = Checkers.eCheckerGroup.X; m_LastPlayerThatPlayed = m_FirstPlayer; m_Board = new Board(m_Board.BoardSize); m_Quit = false; m_Tie = false; m_IsGameEnd = false; m_FirstPlayer.ResetPlayer(m_Board.BoardSize); m_SecondPlayer.ResetPlayer(m_Board.BoardSize); m_Board.BuildBoard(m_FirstPlayer, m_SecondPlayer); }
private void checkUpdateToKing(Checkers currentChecker, Checkers.eCheckerGroup checkerGroup, int rowDestination) { m_IsLastCheckerUpdatedToKing = false; if (Checkers.eCheckerGroup.O == checkerGroup && rowDestination == m_Board.BoardSize - 1) { currentChecker.Group = Checkers.eCheckerGroup.OKing; m_IsLastCheckerUpdatedToKing = true; } else if (Checkers.eCheckerGroup.X == checkerGroup && rowDestination == 0) { currentChecker.Group = Checkers.eCheckerGroup.XKing; m_IsLastCheckerUpdatedToKing = true; } }
internal void BuildPlayerPossibleMovments(Board o_Board) { m_PosibleMovesLocations = new List <Checkers>(); m_PosibleMovesDestinations = new List <Checkers>(); m_NumberMovementOppertunities = 0; Checkers.eCheckerGroup oppositeGroup; m_IsPossibleEat = false; switch (m_BelongingGroup) { case Checkers.eCheckerGroup.O: oppositeGroup = Checkers.eCheckerGroup.X; break; default: oppositeGroup = Checkers.eCheckerGroup.O; break; } Checkers.eCheckerGroup oppositeGroupKing = GetOppositePlayerKing(oppositeGroup); foreach (Checkers current in CheckersArray) { if (current.Group != Checkers.eCheckerGroup.Empty) { if (m_BelongingGroup == Checkers.eCheckerGroup.O) { checkPossibleGoingDownAndRight(current, o_Board, oppositeGroup, oppositeGroupKing); checkPossibleGoingDownAndLeft(current, o_Board, oppositeGroup, oppositeGroupKing); if (current.Group == Checkers.eCheckerGroup.OKing) { checkPossibleGoingUpAndRight(current, o_Board, oppositeGroup, oppositeGroupKing); checkPossibleGoingUpAndLeft(current, o_Board, oppositeGroup, oppositeGroupKing); } } else { checkPossibleGoingUpAndRight(current, o_Board, oppositeGroup, oppositeGroupKing); checkPossibleGoingUpAndLeft(current, o_Board, oppositeGroup, oppositeGroupKing); if (current.Group == Checkers.eCheckerGroup.XKing) { checkPossibleGoingDownAndRight(current, o_Board, oppositeGroup, oppositeGroupKing); checkPossibleGoingDownAndLeft(current, o_Board, oppositeGroup, oppositeGroupKing); } } } } }
private void button_Click(object sender, EventArgs e) { BoardButton selectedButton = sender as BoardButton; Checkers.eCheckerGroup currentTurn = m_Game.CurrentTurn; if (object.ReferenceEquals(selectedButton, m_FirstSelectedButton)) { selectedButton.BackColor = default(Color); m_FirstSelectedButton = null; } else { if (currentTurn == Checkers.eCheckerGroup.O) { if (m_FirstSelectedButton == null && (selectedButton.TagName == "O" || selectedButton.TagName == "U")) { selectedButton.BackColor = Color.LightBlue; m_FirstSelectedButton = selectedButton; } else if (m_FirstSelectedButton != null) { string movement = m_FirstSelectedButton.ColumnIndex + string.Empty + m_FirstSelectedButton.RowIndex + ">" + selectedButton.ColumnIndex + selectedButton.RowIndex; tryToPlaySelectedMovment(movement); m_FirstSelectedButton.BackColor = default(Color); m_FirstSelectedButton = null; } } else { if (m_FirstSelectedButton == null && (selectedButton.TagName == "X" || selectedButton.TagName == "K")) { selectedButton.BackColor = Color.LightBlue; m_FirstSelectedButton = selectedButton; } else if (m_FirstSelectedButton != null) { string movement = m_FirstSelectedButton.ColumnIndex + string.Empty + m_FirstSelectedButton.RowIndex + ">" + selectedButton.ColumnIndex + selectedButton.RowIndex; tryToPlaySelectedMovment(movement); m_FirstSelectedButton.BackColor = default(Color); m_FirstSelectedButton = null; } } } }
private void checkPossibleGoingDownAndLeft(Checkers io_CurrentCheckerToCheck, Board i_Board, Checkers.eCheckerGroup i_OppositeCheckerGroup, Checkers.eCheckerGroup i_OppositeGroupKing) { int boardMaxIndex = i_Board.BoardSize - 1; Checkers[,] boardMatrix = i_Board.GetBoardMatrix(); int currentCheckerRow = io_CurrentCheckerToCheck.Row; int currentCheckerColumn = io_CurrentCheckerToCheck.Column; if (currentCheckerRow != boardMaxIndex && currentCheckerColumn != 0) { if ((boardMatrix[currentCheckerRow + 1, currentCheckerColumn - 1].Group == i_OppositeCheckerGroup || boardMatrix[currentCheckerRow + 1, currentCheckerColumn - 1].Group == i_OppositeGroupKing) && currentCheckerRow != boardMaxIndex - 1 && currentCheckerColumn != 1) { if (boardMatrix[currentCheckerRow + 2, currentCheckerColumn - 2].Group == Checkers.eCheckerGroup.Empty) { if (!m_IsPossibleEat) { initializeEatingArrays(io_CurrentCheckerToCheck); } else { m_PosibleMovesLocations.Add(io_CurrentCheckerToCheck); } m_PosibleMovesDestinations.Add(boardMatrix[currentCheckerRow + 2, currentCheckerColumn - 2]); m_NumberMovementOppertunities++; } } else if (boardMatrix[currentCheckerRow + 1, currentCheckerColumn - 1].Group == Checkers.eCheckerGroup.Empty && !m_IsPossibleEat) { m_PosibleMovesLocations.Add(io_CurrentCheckerToCheck); m_PosibleMovesDestinations.Add(boardMatrix[currentCheckerRow + 1, currentCheckerColumn - 1]); m_NumberMovementOppertunities++; } } }
private void changeTurn() { if (!isEndMatch()) { if (m_CurrentTurn == Checkers.eCheckerGroup.O) { m_isLastMoveWasEat = m_SecondPlayer.IsPossibleEat; if (m_isLastMoveWasEat) { m_SecondPlayer.BuildPlayerPossibleMovments(m_Board); deletePossibleMovmentExepctGivenMovment(m_SecondPlayer); } if (m_SecondPlayer.NumberMovementOppertunities == 0 && !m_isLastMoveWasEat) { m_FirstPlayer.BuildPlayerPossibleMovments(m_Board); if (m_FirstPlayer.NumberMovementOppertunities == 0) { m_Tie = true; } else { m_IsGameEnd = true; } UpdatePlayersScoreAtTheEndOfMatch(); } if (!m_isLastMoveWasEat || !m_SecondPlayer.IsPossibleEat) { m_CurrentTurn = Checkers.eCheckerGroup.X; m_LastPlayerThatPlayed = m_SecondPlayer; } } else { m_isLastMoveWasEat = m_FirstPlayer.IsPossibleEat; m_FirstPlayer.BuildPlayerPossibleMovments(m_Board); if (m_isLastMoveWasEat) { m_FirstPlayer.BuildPlayerPossibleMovments(m_Board); deletePossibleMovmentExepctGivenMovment(m_FirstPlayer); } if (m_FirstPlayer.NumberMovementOppertunities == 0 && !m_isLastMoveWasEat) { m_SecondPlayer.BuildPlayerPossibleMovments(m_Board); if (m_SecondPlayer.NumberMovementOppertunities == 0) { m_Tie = true; } else { m_IsGameEnd = true; } UpdatePlayersScoreAtTheEndOfMatch(); } if (!m_isLastMoveWasEat || !m_FirstPlayer.IsPossibleEat) { m_CurrentTurn = Checkers.eCheckerGroup.O; m_LastPlayerThatPlayed = m_FirstPlayer; } } } }