Example #1
0
        private void GameOver(eGameOverStatusCode i_eGameEndedStatusCode, CheckersMove i_LastMove)
        {
            GameOverEventArgs e = new GameOverEventArgs();

            e.LastMove           = i_LastMove;
            e.GameOverStatusCode = i_eGameEndedStatusCode;

            switch (i_eGameEndedStatusCode)
            {
            case eGameOverStatusCode.Draw:
                break;

            case eGameOverStatusCode.Player1Won:
                r_Player1.Score++;
                break;

            case eGameOverStatusCode.Player2Won:
                r_Player2.Score++;
                break;

            default: break;
            }

            m_Player1Turn = true;
            initializeBoard();
            OnGameOver(e);
        }
Example #2
0
        public override bool Equals(object obj)
        {
            CheckersMove move        = obj as CheckersMove;
            bool         fieldsMatch = false;

            if (!(obj == null) && !((object)move == null))
            {
                fieldsMatch = (m_fromRow == move.FromRow) && (m_fromCol == move.FromCol) && (m_toRow == move.ToRow) && (m_toCol == move.ToCol);
            }

            return(fieldsMatch);
        }
Example #3
0
        private bool isPerformeMove(int[] i_StartingLocation, int[] i_TargetLocation)
        {
            CheckersMove newMove        = new CheckersMove(m_PlayerTurn, m_Opponent, m_GameBoard, i_StartingLocation, i_TargetLocation);
            bool         isPerformeMove = newMove.IsPreformedMove();

            if ((!(m_IsNeedToEatAgain = newMove.IsNeedToEatAgain) && isPerformeMove) || newMove.IsPieceBecomeKing)
            {
                m_CurrentTurnIndex++;
            }

            m_IsTie = isTieCondition();
            m_IsWin = isPlayerWin();

            return(isPerformeMove);
        }
Example #4
0
        private void BoardChanged(CheckersMove i_Move)
        {
            BoardChangeEventArgs e = new BoardChangeEventArgs();

            e.CheckersMove   = i_Move;
            e.DestSquareType = r_Board[i_Move.ToRow, i_Move.ToCol];
            e.IsEatMove      = isEatMove(i_Move);
            if (e.IsEatMove)
            {
                e.RowOfPieceRemoved = (i_Move.FromRow + i_Move.ToRow) / 2;
                e.ColOfPieceRemoved = (i_Move.FromCol + i_Move.ToCol) / 2;
            }

            OnBoardChange(e);
        }
Example #5
0
        private void checkIfGameEnded(Player i_PlayerThatActedNow, CheckersMove i_LastMove)
        {
            Player theOtherPlayer = i_PlayerThatActedNow == r_Player1 ? r_Player2 : r_Player1;

            if (GetLegalMoves(theOtherPlayer) == null)
            {
                if (GetLegalMoves(i_PlayerThatActedNow) == null)
                {
                    GameOver(eGameOverStatusCode.Draw, i_LastMove);
                }
                else
                {
                    GameOver(
                        i_PlayerThatActedNow.Equals(r_Player1) ?
                        eGameOverStatusCode.Player1Won :
                        eGameOverStatusCode.Player2Won,
                        i_LastMove);
                }
            }
        }
        internal List <int> ChooseRandomMove(CheckersPlayer i_Player, CheckersPlayer i_Opponent, CheckersBoard i_GameBoard)
        {
            m_CurrentMove = new CheckersMove(i_Player, i_Opponent, i_GameBoard);

            m_CurrentMove.UpdateAllPlayerPieces(i_Player);

            List <int> choosenMove = null;
            bool       mustEat     = m_CurrentMove.IsPlayerMustEat(i_Player);

            List <CheckersPiece> playerPieces = i_Player.PlayerPieces;

            shuffle(playerPieces);

            foreach (CheckersPiece piece in playerPieces)
            {
                int randomLocation;
                choosenMove = new List <int> {
                    piece.Location[0], piece.Location[1]
                };

                if (mustEat)
                {
                    if (piece.PossibleEatMoves.Any())
                    {
                        randomLocation = m_Random.Next(piece.PossibleEatMoves.Count);
                        choosenMove.Add(piece.PossibleEatMoves[randomLocation][0]);
                        choosenMove.Add(piece.PossibleEatMoves[randomLocation][1]);
                        break;
                    }
                }
                else if (piece.PossibleSimpleMoves.Any())
                {
                    randomLocation = m_Random.Next(piece.PossibleSimpleMoves.Count);
                    choosenMove.Add(piece.PossibleSimpleMoves[randomLocation][0]);
                    choosenMove.Add(piece.PossibleSimpleMoves[randomLocation][1]);
                    break;
                }
            }

            return(choosenMove);
        }
Example #7
0
        public eMoveStatusCode CheckIfMoveIsValid(CheckersMove i_Move)
        {
            Player playerThatPlaysNow          = getPlayerThatPlaysNow();
            List <CheckersMove> listOfMoves    = GetLegalMoves(playerThatPlaysNow);
            eMoveStatusCode     moveStatusCode = eMoveStatusCode.Successful;

            if (i_Move.FromRow < 0 || i_Move.FromRow >= r_BoardSize || i_Move.FromCol < 0 || i_Move.FromCol >= r_BoardSize)
            {
                moveStatusCode = eMoveStatusCode.InvalidPosition;
            }
            else if (r_Board[i_Move.FromRow, i_Move.FromCol] != playerThatPlaysNow.PieceSymbol && r_Board[i_Move.FromRow, i_Move.FromCol] != playerThatPlaysNow.KingSymbol)
            {
                moveStatusCode = eMoveStatusCode.InvalidPosition;
            }
            else if (isEatMove(listOfMoves[0]) && !isEatMove(i_Move.FromRow, i_Move.FromCol, i_Move.ToRow, i_Move.ToCol))
            {
                moveStatusCode = eMoveStatusCode.MustEat;
            }
            else if (isEatMove(i_Move.FromRow, i_Move.FromCol, i_Move.ToRow, i_Move.ToCol))
            {
                int r2 = (i_Move.FromRow + i_Move.ToRow) / 2;
                int c2 = (i_Move.FromCol + i_Move.ToCol) / 2;

                if (!canEat(playerThatPlaysNow, i_Move.FromRow, i_Move.FromCol, r2, c2, i_Move.ToRow, i_Move.ToCol))
                {
                    moveStatusCode = eMoveStatusCode.InvalidPosition;
                }
            }
            else
            {
                if (!checkRegularMove(playerThatPlaysNow, i_Move.FromRow, i_Move.FromCol, i_Move.ToRow, i_Move.ToCol))
                {
                    moveStatusCode = eMoveStatusCode.InvalidPosition;
                }
            }

            return(moveStatusCode);
        }
Example #8
0
        public bool DoMakeMove(CheckersMove i_Move)
        {
            Player playerThatPlaysNow = getPlayerThatPlaysNow();
            bool   hasMoreMoves       = false;
            List <CheckersMove> moves;

            makeMove(playerThatPlaysNow, i_Move);

            if (isEatMove(i_Move) && (moves = getLegalMovesFrom(playerThatPlaysNow, i_Move.ToRow, i_Move.ToCol)) != null)
            {
                hasMoreMoves = true;
            }

            if (!hasMoreMoves)
            {
                m_Player1Turn = !m_Player1Turn;
            }

            BoardChanged(i_Move);

            checkIfGameEnded(playerThatPlaysNow, i_Move);

            return(hasMoreMoves);
        }
Example #9
0
 private void makeMove(Player i_Player, CheckersMove i_Move)
 {
     makeMove(i_Player, i_Move.FromRow, i_Move.FromCol, i_Move.ToRow, i_Move.ToCol);
 }
Example #10
0
 private bool isEatMove(CheckersMove i_Move)
 {
     return(isEatMove(i_Move.FromRow, i_Move.FromCol, i_Move.ToRow, i_Move.ToCol));
 }