コード例 #1
0
        public int GetWinnerScore(e_PlayerColor i_PlayerColor)
        {
            int playerScore   = getPlayerScore(i_PlayerColor);
            int opponentScore = getPlayerScore(Player.GetMyOpponentColor(i_PlayerColor));

            return(playerScore - opponentScore);
        }
コード例 #2
0
        private void handleGameOverAndRematch()
        {
            e_PlayerColor winnerColor = e_PlayerColor.Tie;

            if (m_Board.IsGameOver(ref winnerColor, m_Board.CurrentPlayerTurn))
            {
                syncButtonsBoardWithLogicalBoard();
                Player winner = m_Board.GetPlayerByColor(winnerColor);
                winner.Score += m_Board.GetWinnerScore(winnerColor);
                StringBuilder messege = new StringBuilder();
                messege.AppendFormat("{0} Won!", winner.PlayerName);
                messege.AppendLine();
                messege.AppendFormat("Another Round?");
                DialogResult result = MessageBox.Show(messege.ToString(), "Damka", MessageBoxButtons.YesNo);
                if (result == DialogResult.No)
                {
                    this.Close();
                }
                else
                {
                    m_Board.SetBoardForNewGame();
                    labelPlayerA.Text = string.Format("{0}: {1}", m_Board.PlayerA.PlayerName, m_Board.PlayerA.Score);
                    labelPlayerB.Text = string.Format("{0}: {1}", m_Board.PlayerB.PlayerName, m_Board.PlayerB.Score);
                }
            }
        }
コード例 #3
0
        private void updateBoard(e_PlayerColor i_PlayerColor, Move i_Move)
        {
            updateBoardForPlainMove(i_PlayerColor, i_Move);
            updateBoardForJumpMove(i_PlayerColor, i_Move);

            GameBoard[i_Move.FromRow, i_Move.FromColumn].CellContent = e_CellContent.Empty;
        }
コード例 #4
0
 private int getPlayerScore(e_PlayerColor i_PlayerColor)
 {
     if (i_PlayerColor == e_PlayerColor.Black)
     {
         return(BlackCurrentScore);
     }
     else
     {
         return(RedCurrentScore);
     }
 }
コード例 #5
0
ファイル: Player.cs プロジェクト: danakeydar/Checkers
        public static e_PlayerColor GetMyOpponentColor(e_PlayerColor i_playerColor)
        {
            e_PlayerColor opponentColor;

            if (i_playerColor == e_PlayerColor.Black)
            {
                opponentColor = e_PlayerColor.Red;
            }
            else
            {
                opponentColor = e_PlayerColor.Black;
            }

            return(opponentColor);
        }
コード例 #6
0
        private bool isValidMove(e_PlayerColor i_PlayerColor, Move i_move)
        {
            List <Move> validMoves = getAllValidMoves(i_PlayerColor);
            bool        validMove  = false;

            foreach (Move move in validMoves)
            {
                if (i_move.Equals(move))
                {
                    validMove = true;
                }
            }

            return(validMove);
        }
コード例 #7
0
        public Player GetPlayerByColor(e_PlayerColor i_Color)
        {
            Player player;

            if (i_Color == e_PlayerColor.Black)
            {
                player = PlayerA;
            }
            else
            {
                player = PlayerB;
            }

            return(player);
        }
コード例 #8
0
        private bool MovePlayerPiece(e_PlayerColor i_CurPlayerColor, Move i_Move)
        {
            bool validMove = isValidMove(i_CurPlayerColor, i_Move);

            if (validMove == true)
            {
                updateBoard(i_CurPlayerColor, i_Move);
                setNextTurnPlayer(i_CurPlayerColor, i_Move);
            }
            else
            {
                validMove = false;
            }

            return(validMove);
        }
コード例 #9
0
 private void updateBoardForPlainMove(e_PlayerColor i_PlayerColor, Move i_Move)
 {
     if (i_PlayerColor == e_PlayerColor.Red && i_Move.ToRow == Dimension - 1)
     {
         GameBoard[i_Move.ToRow, i_Move.ToColumn].CellContent = e_CellContent.RedKing;
         RedCurrentScore += 3;
     }
     else if (i_PlayerColor == e_PlayerColor.Black && i_Move.ToRow == 0)
     {
         GameBoard[i_Move.ToRow, i_Move.ToColumn].CellContent = e_CellContent.BlackKing;
         BlackCurrentScore += 3;
     }
     else
     {
         GameBoard[i_Move.ToRow, i_Move.ToColumn].CellContent = GameBoard[i_Move.FromRow, i_Move.FromColumn].CellContent;
     }
 }
コード例 #10
0
        private List <Move> GetAllCurEatingMoves(e_PlayerColor i_PlayerColor, int i_CurCol, int i_CurRow)
        {
            List <Move> curPlayerValidMoves = getAllValidMoves(i_PlayerColor);
            List <Move> curEatingMoves      = new List <Move>();

            for (int i = 0; i < curPlayerValidMoves.Count; i++)
            {
                if (curPlayerValidMoves[i].FromColumn == i_CurCol &&
                    curPlayerValidMoves[i].FromRow == i_CurRow &&
                    curPlayerValidMoves[i].IsEatingMove())
                {
                    curEatingMoves.Add(curPlayerValidMoves[i]);
                }
            }

            return(curEatingMoves);
        }
コード例 #11
0
 private void setNextTurnPlayer(e_PlayerColor i_CurPlayerColor, Move i_Move)
 {
     if ((i_Move.IsEatingMove() == true) && (GetAllCurEatingMoves(i_CurPlayerColor, i_Move.ToColumn, i_Move.ToRow).Count > 0))
     {
         CurrentPlayerTurn = i_CurPlayerColor;
     }
     else
     {
         if (i_CurPlayerColor == e_PlayerColor.Black)
         {
             CurrentPlayerTurn = e_PlayerColor.Red;
         }
         else
         {
             CurrentPlayerTurn = e_PlayerColor.Black;
         }
     }
 }
コード例 #12
0
        private void updateBoardForJumpMove(e_PlayerColor i_PlayerColor, Move i_Move)
        {
            int fromRow    = i_Move.FromRow;
            int formColumn = i_Move.FromColumn;
            int toRow      = i_Move.ToRow;
            int toColumn   = i_Move.ToColumn;

            if (Math.Abs(fromRow - i_Move.ToRow) == 2)
            {
                if (fromRow > i_Move.ToRow)
                {
                    if (formColumn > toColumn)
                    {
                        updatePlayerScoreAfterJump(GameBoard[fromRow - 1, formColumn - 1].CellContent);
                        GameBoard[fromRow - 1, formColumn - 1].CellContent = e_CellContent.Empty;
                    }
                    else
                    {
                        updatePlayerScoreAfterJump(GameBoard[fromRow - 1, formColumn + 1].CellContent);
                        GameBoard[fromRow - 1, formColumn + 1].CellContent = e_CellContent.Empty;
                    }
                }
                else
                {
                    if (formColumn > toColumn)
                    {
                        updatePlayerScoreAfterJump(GameBoard[fromRow + 1, formColumn - 1].CellContent);
                        GameBoard[fromRow + 1, formColumn - 1].CellContent = e_CellContent.Empty;
                    }
                    else
                    {
                        updatePlayerScoreAfterJump(GameBoard[fromRow + 1, formColumn + 1].CellContent);
                        GameBoard[fromRow + 1, formColumn + 1].CellContent = e_CellContent.Empty;
                    }
                }
            }
        }
コード例 #13
0
        public bool IsGameOver(ref e_PlayerColor o_winnerColor, e_PlayerColor i_CurPlayerColor)
        {
            bool          isGameOver    = false;
            e_PlayerColor opponentColor = Player.GetMyOpponentColor(i_CurPlayerColor);

            o_winnerColor = GetCurrWinner();
            if (getPlayerScore(i_CurPlayerColor) == 0)
            {
                o_winnerColor = opponentColor;
                isGameOver    = true;
            }
            else
            {
                List <Move> curPlayerValidMoves      = getAllValidMoves(i_CurPlayerColor);
                List <Move> opponentPlayerValidMoves = getAllValidMoves(opponentColor);

                if (curPlayerValidMoves.Count == 0)
                {
                    if (opponentPlayerValidMoves.Count == 0)
                    {
                        o_winnerColor = e_PlayerColor.Tie;
                        isGameOver    = true;
                    }
                    else
                    {
                        o_winnerColor = opponentColor;
                        isGameOver    = true;
                    }
                }
                else
                {
                    isGameOver = false;
                }
            }

            return(isGameOver);
        }
コード例 #14
0
        private List <Move> getAllValidMoves(e_PlayerColor i_PlayerColor)
        {
            List <Move> validMoves     = new List <Move>();
            List <Move> validJumpMoves = new List <Move>();

            for (int x = 0; x < Dimension; x++)
            {
                for (int y = 0; y < Dimension; y++)
                {
                    if (i_PlayerColor == e_PlayerColor.Black)
                    {
                        if (GameBoard[x, y].IsBlackPiece())
                        {
                            Piece piece = new Piece(GameBoard[x, y].CellContent, x, y);
                            checkIfPieceCanMove(piece, ref validMoves, ref validJumpMoves);
                        }
                    }

                    if (i_PlayerColor == e_PlayerColor.Red)
                    {
                        if (GameBoard[x, y].IsRedPiece())
                        {
                            Piece piece = new Piece(GameBoard[x, y].CellContent, x, y);
                            checkIfPieceCanMove(piece, ref validMoves, ref validJumpMoves);
                        }
                    }
                }
            }

            if (validJumpMoves.Count > 0)
            {
                validMoves = validJumpMoves;
            }

            return(validMoves);
        }
コード例 #15
0
ファイル: Player.cs プロジェクト: danakeydar/Checkers
 public Player(e_PlayerColor i_PlayerColor, string i_PlayerName)
 {
     PlayerColor = i_PlayerColor;
     PlayerName  = i_PlayerName;
 }