コード例 #1
0
ファイル: Controller.cs プロジェクト: DanielaMurin/Checkers
        private void currPlayerTurn(ePlayerStatus i_CurrPlayerStatus, int i_CurrRow, int i_CurrCol, int i_NextRow, int i_NextCol)
        {
            bool isContinuousJump = false;

            eMoveList moveType;
            int       currRow = i_CurrRow, currCol = i_CurrCol, nextRow = i_NextRow, nextCol = i_NextCol;

            moveType = returnValidMove(ref currRow, ref currCol, ref nextRow, ref nextCol); // get the user's move type (jump, move) if the input is invalid then returnValidMove loops until valid input is recieved

            //// must jump (also check continuous jump)
            if (i_CurrPlayerStatus == ePlayerStatus.MustJump || isContinuousJump == true)
            {
                if (moveType.ToString().Contains("Jump"))
                {
                    m_CurrentPlayer.checkersPieceMovement(m_CheckersBoard.CheckerBoard, currRow, currCol, nextRow, nextCol, m_CheckersBoard.CheckerBoard[currRow, currCol], moveType);
                    i_CurrPlayerStatus = checkAvailableMoves(); // check if continuous jumps are available
                    m_ChessPieceMoved.Invoke();

                    if (i_CurrPlayerStatus != ePlayerStatus.MustJump)
                    {
                        turnEnd();
                        isContinuousJump = false;
                    }
                    else
                    {
                        isContinuousJump = true;
                        m_CurrJumpRow    = nextRow;
                        m_CurrJumpCol    = nextCol;
                    }
                }
                else if (isContinuousJump == false)
                {
                    if (moveType.ToString().Contains("Jump"))
                    {
                        m_CurrentPlayer.checkersPieceMovement(m_CheckersBoard.CheckerBoard, currRow, currCol, nextRow, nextCol, m_CheckersBoard.CheckerBoard[currRow, currCol], moveType); // updates matrix and notifies form's matrix update

                        m_ChessPieceMoved.Invoke();

                        i_CurrPlayerStatus = checkAvailableMoves(); // check if continuous jumps are available

                        if (i_CurrPlayerStatus != ePlayerStatus.MustJump)
                        {
                            turnEnd();
                        }
                    }
                    else
                    {
                        MessageBox.Show("You must jump", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                }
            }
            else
            {
                //// regular move, already received valid move
                if (moveType != eMoveList.Quit && moveType != eMoveList.InvalidMove)
                {
                    //// move/erase the checkers piece(s) after valid play
                    m_CurrentPlayer.checkersPieceMovement(m_CheckersBoard.CheckerBoard, currRow, currCol, nextRow, nextCol, m_CheckersBoard.CheckerBoard[currRow, currCol], moveType); // updates matrix and notifies form's matrix update
                    m_ChessPieceMoved.Invoke();
                    turnEnd();
                }
                else
                {
                    MessageBox.Show("Invalid Player Move", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }

            i_CurrPlayerStatus = checkAvailableMoves();

            if (i_CurrPlayerStatus == ePlayerStatus.UnableToMove)
            {
                PlayerLose();
            }
        }