Exemple #1
0
 /// <summary>
 /// 设置异步执行落子操作的参数
 /// </summary>
 /// <param name="position"></param>
 /// <param name="movePiece_Confirmed"></param>
 /// <param name="movePiece_Completed"></param>
 public void SetPieceMoveArgs(ReversiPiecePosition position, WhenMovePiece_Confirmed movePiece_Confirmed, WhenMovePiece_Completed movePiece_Completed)
 {
     MovePiece_Position  = position;
     MovePiece_Confirmed = movePiece_Confirmed;
     MovePiece_Completed = movePiece_Completed;
     MovePieceHandled    = false;
 }
Exemple #2
0
        /// <summary>
        /// 开始执行落子操作
        /// </summary>
        public void PieceMoves()
        {
            if (MovePieceHandled || !IspieceEnabled(MovePiece_Position))
            {
                MovePiece_Confirmed(false, CurrentPiece, null, null);
                MovePiece_Completed(false, false, CurrentPiece);
                return;
            }
            // 保存缓冲区当中的当前落子信息
            ReversiPiece                thisPiece           = CurrentPiece;
            ReversiPiecePosition        thisMovePosition    = MovePiece_Position;
            List <ReversiPiecePosition> thisReversePosition = reversiBuffer.GetReversePositions(thisMovePosition);

            if (IsBusy || thisReversePosition == null)
            {
                MovePiece_Confirmed(false, CurrentPiece, null, null);
                MovePiece_Completed(false, false, CurrentPiece);
                return;
            }
            IsBusy = true;
            // 开始落子, 更新棋盘.
            PushState();
            CurrentBoard[thisMovePosition.X, thisMovePosition.Y] = CurrentPiece;
            foreach (ReversiPiecePosition rpp in thisReversePosition)
            {
                CurrentBoard[rpp.X, rpp.Y] = CurrentPiece;
            }
            UpdateState();
            LastPiece    = thisPiece;
            LastPosition = thisMovePosition;
            MovePiece_Confirmed(true, thisPiece, thisMovePosition, thisReversePosition);
            // 重建缓冲区
            CurrentPiece = GetReversepiece(CurrentPiece);
            ResetBuffer();
            if (GetEnabledPositions().Count <= 0)
            {
                CurrentPiece = GetReversepiece(CurrentPiece);
                ResetBuffer();
                if (GetEnabledPositions().Count <= 0)
                {
                    IsGameOver = true;
                }
            }
            // 落子完成, 对外宣布并重置落子参数
            IsBusy = false;
            MovePiece_Completed(true, IsGameOver, CurrentPiece);
            MovePiece_Position  = null;
            MovePiece_Confirmed = null;
            MovePiece_Completed = null;
            MovePieceHandled    = true;
        }