/// <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; }
/// <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; }