예제 #1
0
 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);
 }
예제 #2
0
 internal Checkers.eCheckerGroup GetOppositePlayerKing(Checkers.eCheckerGroup i_Group)
 {
     if (i_Group == Checkers.eCheckerGroup.O)
     {
         return(Checkers.eCheckerGroup.OKing);
     }
     else
     {
         return(Checkers.eCheckerGroup.XKing);
     }
 }
예제 #3
0
 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);
 }
예제 #4
0
        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;
            }
        }
예제 #5
0
        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);
                        }
                    }
                }
            }
        }
예제 #6
0
        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;
                    }
                }
            }
        }
예제 #7
0
        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++;
                }
            }
        }
예제 #8
0
        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;
                    }
                }
            }
        }