Exemplo n.º 1
0
        public override void Update(GameTime gameTime)
        {
            if (isMyTurn)
            {
                passedTime += (long)gameTime.ElapsedGameTime.TotalMilliseconds;
            }
            if (isMyTurn && !isMovingPiece)
            {
                isMovePieceCompleted = false;
                AIPosition           = reversiAI.GetNextpiece();
                AIReversePositions   = reversiGame.GetReversePositions(AIPosition);
                MovePiece(AIPosition);
            }
            if (isMovePieceCompleted && isMyTurn && passedTime > waitTime)
            {
                passedTime = 0;
                curGame.board.CurrentBoardState = BoardState.FreshGame;
                if (!reversiGame.IsGameOver && reversiGame.CurrentPiece == reversiGame.LastPiece)
                {
                    // TODO: 添加无子可下的显示
                }
                isMyTurn             = false;
                isMovingPiece        = false;
                isMovePieceCompleted = true;
            }

            base.Update(gameTime);
        }
Exemplo n.º 2
0
 /// <summary>
 /// 此方法只能被回调. 当向棋局实例发出下棋请求后, 如果此请求被允许, 则会回调这个方法, 并传回下棋参数.
 /// 此方法只为更快地响应用户的下棋操作.
 /// </summary>
 /// <param name="piece">应下的棋子颜色</param>
 /// <param name="position">应下的棋子位置</param>
 /// <param name="positions">应该翻转的棋子</param>
 private void MovePiece_Confirmed(bool confirmed, ReversiPiece piece, ReversiPiecePosition position, List <ReversiPiecePosition> positions)
 {
     if (confirmed)
     {
         IsMovePieceConfirmed = true;
     }
     else
     {
         MovePieceNeedStop = true;
     }
 }
Exemplo n.º 3
0
 /// <summary>
 /// 执行下棋操作. 有位置参数, 通常由用户落子确定位置.
 /// </summary>
 /// <param name="position">用户落子的位置</param>
 private void MovePiece(ReversiPiecePosition position)
 {
     IsUserTurn = false;
     changeWaitingState(WaitingState.WaitingMovePieceConfirmed);
     reversiGame.SetPieceMoveArgs(position, MovePiece_Confirmed, MovePiece_Completed);
     if (movePieceThread != null && movePieceThread.IsAlive)
     {
         movePieceThread.Abort();
     }
     movePieceThread = new Thread(new ThreadStart(reversiGame.PieceMoves));
     movePieceThread.Start();
 }
Exemplo n.º 4
0
 protected async void MovePiece(ReversiPiecePosition position)
 {
     isMovingPiece = true;
     pieces[reversiGame.LastPosition.X, reversiGame.LastPosition.Y].IsLastPiece = false;
     pieces[position.X, position.Y].IsLastPiece = true;
     reversiGame.SetPieceMoveArgs(position, MovePiece_Confirmed, MovePiece_Completed);
     if (movePieceTask != null && !movePieceTask.IsCompleted)
     {
         movePieceTask.Wait();
     }
     movePieceTask = new Task(() => reversiGame.PieceMoves());
     movePieceTask.Start();
 }
Exemplo n.º 5
0
 public virtual void MovePiece_Confirmed(bool confirmed, ReversiPiece piece, ReversiPiecePosition position, List <ReversiPiecePosition> positions)
 {
     curGame.board.CurrentBoardState = BoardState.FreshGame;
 }
Exemplo n.º 6
0
 public override void MovePiece_Confirmed(bool confirmed, ReversiPiece piece, ReversiPiecePosition position, List <ReversiPiecePosition> positions)
 {
 }
Exemplo n.º 7
0
        public override void Update(GameTime gameTime)
        {
            if (settingBoardState == SettingBoardState.Showing)
            {
                settingBoardState = SettingBoardState.Show;
            }
            else if (settingBoardState == SettingBoardState.Show)
            {
                if (startButton.StartButtonClicked)
                {
                    for (int i = 0; i < 2; i++)
                    {
                        PlayerSettings.Player[i].Type = PlayerType[i];
                        if (PlayerType[i] == PlayerTypes.AI)
                        {
                            PlayerSettings.Player[i].AIIndex = AIIndex[i];
                        }
                    }
                    settingBoardState = SettingBoardState.HidingForNewGame;
                }
                else if (startButton.ResumeButtonClicked)
                {
                    settingBoardState = SettingBoardState.HidingForResume;
                }
                else
                {
                    // 绘制选择状态
                    foreach (Piece piece in showPieces)
                    {
                        piece.CurrentDisplay = DisplayState.Normal;
                    }
                    foreach (Piece piece in playerTypePieces)
                    {
                        piece.CurrentDisplay = DisplayState.Normal;
                    }
                    foreach (int i in chooseIndex)
                    {
                        playerTypePieces[i].CurrentDisplay = DisplayState.CanMove;
                    }
                    for (int i = 0; i < AICount; i++)
                    {
                        if (chooseIndex[0] == 1)
                        {
                            aiTypePieces[0, i].PieceState = PieceState.Black;
                        }
                        else
                        {
                            aiTypePieces[0, i].PieceState = PieceState.Empty;
                        }
                        if (chooseIndex[1] == 2)
                        {
                            aiTypePieces[1, i].PieceState = PieceState.White;
                        }
                        else
                        {
                            aiTypePieces[1, i].PieceState = PieceState.Empty;
                        }
                    }
                    if (chooseIndex[0] == 1)
                    {
                        aiTypePieces[0, AIIndex[0]].CurrentDisplay = DisplayState.WillReverse;
                    }
                    if (chooseIndex[1] == 2)
                    {
                        aiTypePieces[1, AIIndex[1]].CurrentDisplay = DisplayState.WillReverse;
                    }
                    if (curGame.IsActive)
                    {
                        // 获取鼠标状态
                        lastMouseState    = currentMouseState;
                        currentMouseState = Mouse.GetState();
                        ReversiPiecePosition tempPosition = Board.IsMouseInPiece(currentMouseState);
                        // 如果移动鼠标
                        if (tempPosition != null)
                        {
                            // 如果划过的是黑白子
                            if (tempPosition.Y == 2)
                            {
                                if (tempPosition.X == 3)
                                {
                                    showPieces[0].CurrentDisplay = DisplayState.WillMove;
                                }
                                else if (tempPosition.X == 4)
                                {
                                    showPieces[1].CurrentDisplay = DisplayState.WillMove;
                                }
                            }
                            // 如果划过的是玩家类型选择
                            else if (tempPosition.Y == 3)
                            {
                                int index = -1;
                                if (tempPosition.X == 1)
                                {
                                    index = 0;
                                }
                                else if (tempPosition.X == 2)
                                {
                                    index = 1;
                                }
                                else if (tempPosition.X == 5)
                                {
                                    index = 2;
                                }
                                else if (tempPosition.X == 6)
                                {
                                    index = 3;
                                }
                                if (index >= 0)
                                {
                                    playerTypePieces[index].CurrentDisplay = DisplayState.WillMove;
                                }
                            }
                            // 如果划过的是AI类型
                            if ((tempPosition.X == 0 || tempPosition.X == 7) && (tempPosition.Y >= 3 && tempPosition.Y <= 2 + AICount))
                            {
                                if (chooseIndex[0] == 1 && tempPosition.X == 0)
                                {
                                    int index = tempPosition.Y - 3;
                                    aiTypePieces[0, index].CurrentDisplay = DisplayState.WillMove;
                                }
                                if (chooseIndex[1] == 2 && tempPosition.X == 7)
                                {
                                    int index = tempPosition.Y - 3;
                                    aiTypePieces[1, index].CurrentDisplay = DisplayState.WillMove;
                                }
                            }
                            // 如果按下鼠标左键
                            if ((currentMouseState.LeftButton == ButtonState.Pressed) && (lastMouseState.LeftButton == ButtonState.Released))
                            {
                                // 如果点击的是黑白子
                                if (tempPosition.Y == 2)
                                {
                                    if (tempPosition.X == 3)
                                    {
                                        chooseIndex[0] = 0; PlayerType[0] = PlayerTypes.Human;
                                        chooseIndex[1] = 2; PlayerType[1] = PlayerTypes.AI;
                                    }
                                    else if (tempPosition.X == 4)
                                    {
                                        chooseIndex[0] = 1; PlayerType[0] = PlayerTypes.AI;
                                        chooseIndex[1] = 3; PlayerType[1] = PlayerTypes.Human;
                                    }
                                }
                                // 如果点击的是玩家类型选择
                                else if (tempPosition.Y == 3)
                                {
                                    if (tempPosition.X == 1)
                                    {
                                        chooseIndex[0] = 0; PlayerType[0] = PlayerTypes.Human;
                                    }
                                    if (tempPosition.X == 2)
                                    {
                                        chooseIndex[0] = 1; PlayerType[0] = PlayerTypes.AI;
                                    }
                                    if (tempPosition.X == 5)
                                    {
                                        chooseIndex[1] = 2; PlayerType[1] = PlayerTypes.AI;
                                    }
                                    if (tempPosition.X == 6)
                                    {
                                        chooseIndex[1] = 3; PlayerType[1] = PlayerTypes.Human;
                                    }
                                }
                                // 如果点击的是AI类型选择
                                if (tempPosition.X == 0 || tempPosition.X == 7)
                                {
                                    if (chooseIndex[0] == 1 && tempPosition.X == 0)
                                    {
                                        AIIndex[0] = tempPosition.Y - 3;
                                    }
                                    if (chooseIndex[1] == 2 && tempPosition.X == 7)
                                    {
                                        AIIndex[1] = tempPosition.Y - 3;
                                    }
                                }
                            }
                        }
                    }
                    foreach (Piece piece in showPieces)
                    {
                        piece.Update(gameTime);
                    }
                    foreach (Piece piece in playerTypePieces)
                    {
                        piece.Update(gameTime);
                    }
                    foreach (Piece piece in aiTypePieces)
                    {
                        piece.Update(gameTime);
                    }
                    startButton.Update(gameTime);
                }
                // 获取键盘状态
                lastKeyboardState    = currentKeyboardState;
                currentKeyboardState = Keyboard.GetState(Keys.Escape);
                // 当按下 Escape 键时
                if (currentKeyboardState.IsKeyUp(Keys.Escape) && lastKeyboardState.IsKeyDown(Keys.Escape))
                {
                    if (settingType == SettingType.Pause)
                    {
                        settingBoardState = SettingBoardState.HidingForResume;
                    }
                }
            }
            else if (settingBoardState == SettingBoardState.HidingForNewGame)
            {
                // TODO: 隐藏动画
                settingBoardState = SettingBoardState.HideForNewGame;
            }
            else if (settingBoardState == SettingBoardState.HidingForResume)
            {
                // TODO: 隐藏动画
                settingBoardState = SettingBoardState.HideForResume;
            }
            else if (settingBoardState == SettingBoardState.HideForNewGame)
            {
                curGame.State = GameState.StartLoad;
            }
            else if (settingBoardState == SettingBoardState.HideForResume)
            {
                curGame.State = GameState.InGame;
            }
//            base.Update(gameTime);
        }
Exemplo n.º 8
0
        public override void Update(GameTime gameTime)
        {
            if (isMyTurn && !isMovingPiece && curGame.IsActive)
            {
                // 获取键盘状态
                lastKeyboardState    = currentKeyboardState;
                currentKeyboardState = Keyboard.GetState(Keys.LeftControl, Keys.RightControl, Keys.Z);
                // 当按下 Ctrl+Z 时
                if ((currentKeyboardState.IsKeyDown(Keys.LeftControl) || currentKeyboardState.IsKeyDown(Keys.RightControl)) &&
                    currentKeyboardState.IsKeyDown(Keys.Z))
                {
                    isCtrlZPressed = true;
                }
                else if (currentKeyboardState.IsKeyUp(Keys.Z))
                {
                    if (isCtrlZPressed)
                    {
                        isCtrlZPressed = false; if (GameSettings.IsRegretEnabled)
                        {
                            RegretMovePiece();
                        }
                    }
                }
                foreach (ReversiPiecePosition rpp in reversiGame.GetEnabledPositions())
                {
                    pieces[rpp.X, rpp.Y].CurrentDisplay = DisplayState.CanMove;
                }
                lastMouseState    = currentMouseState;
                currentMouseState = Mouse.GetState();
                ReversiPiecePosition tempPosition = Board.IsMouseInPiece(currentMouseState);
                // 如果移动鼠标
                if (tempPosition != null && reversiGame.IspieceEnabled(tempPosition))
                {
                    pieces[tempPosition.X, tempPosition.Y].CurrentDisplay = DisplayState.WillMove;
                    foreach (ReversiPiecePosition rpp in reversiGame.GetReversePositions(tempPosition))
                    {
                        pieces[rpp.X, rpp.Y].CurrentDisplay = DisplayState.WillReverse;
                    }
                }
                // 如果单击鼠标左键
                if ((currentMouseState.LeftButton == ButtonState.Released) && (lastMouseState.LeftButton == ButtonState.Pressed))
                {
                    if (tempPosition != null && reversiGame.IspieceEnabled(tempPosition))
                    {
                        isMovePieceCompleted = false;

                        /*pieces[tempPosition.X, tempPosition.Y].PieceState = (PieceState)myPieceColor;
                         * foreach (ReversiPiecePosition rpp in reversiGame.GetReversePositions(tempPosition))
                         *  pieces[rpp.X, rpp.Y].PieceState = (PieceState)myPieceColor;*/
                        MovePiece(tempPosition);
                    }
                }
            }
            if (isMovePieceCompleted && isMyTurn)
            {
                if (!reversiGame.IsGameOver && reversiGame.CurrentPiece == reversiGame.LastPiece)
                {
                    // TODO: 添加无子可下的显示
                }
                isMyTurn      = false;
                isMovingPiece = false;
            }

            base.Update(gameTime);
        }