public void ChessMove(StackPlayChess onceMove) { // 如果下棋符合规则 if (AiMoveSearch.LegalMove(onceMove.mvResult)) { Debuger.Log(string.Format("GameModel->ChessMove ( ) 下棋符合规则,mvResult= {0}, pcCaptured= {1}", onceMove.mvResult, onceMove.pcCaptured)); // 如果没有被将军 if (AiMoveSearch.MakeMove(onceMove.mvResult, 0)) { //father.playSound(2, 1);// 播放声音玩家走棋 s_stack.Push(onceMove); AddMoveCount( ); SwitchPlayChess( ); OnChessMove( ); } } else { Debuger.Log(string.Format("GameModel->ChessMove ( ) 下棋不符合规则,mvResult= {0}, pcCaptured= {1}", onceMove.mvResult, onceMove.pcCaptured)); } //AiMoveSearch.ChangeSide( ); }
public void AiOnceMove( ) { // 如果正在进行电脑下棋 if (!isValidTouch) { return; } //...省略Android前面的代码 // 电脑走棋 // 启动一个线程进行电脑下棋 Thread aiThread = new Thread(new ThreadStart(() => { Debuger.LogWarning("GameView onTouchEvent函数,电脑走棋线程开始"); ViewConstant.endTime = ViewConstant.zTime; // 时间初始化 isRedPlayChess = true; // 正在下棋 isValidTouch = false; // 正在下棋标志 draw( ); // 重绘方法 // 电脑走棋 AiMoveSearch.SearchMain( ); int sqSrc = Chess_LoadUtil.SRC(AiMoveSearch.mvResult); // 得到起始位置的数组下标 int sqDst = Chess_LoadUtil.DST(AiMoveSearch.mvResult); // 得到目标位置的数组下标 int pcCaptured = ucpcSquares[sqDst]; // 得到目的格子的棋子 Debuger.LogWarning(string.Format("GameView onTouchEvent函数,走法起点={0},走法终点={1}, 得到目的格子的棋子={2}", sqSrc, sqDst, pcCaptured)); // 线程安全事件管理器,分发事件,到UI线程处理,棋子的移动 // AI移动棋子(U3D API),移动到 256数组【sqDst】 AIMoveEvent aIMoveEvent = new AIMoveEvent( ); aIMoveEvent.from = sqSrc; aIMoveEvent.to = sqDst; // 派发事件,AI移动棋子事件 EventDispatcher.Instance( ).DispatchEvent(AIMoveEvent.AI_MOVE_EVNET, aIMoveEvent); Debuger.Log("GameView onTouchEvent函数->派发事件,AI移动棋子事件"); // 电脑走一步棋 AiMoveSearch.MakeMove(AiMoveSearch.mvResult, 0); StackPlayChess stackplayChess = new StackPlayChess(AiMoveSearch.mvResult, pcCaptured); // 下棋步骤入栈 stack.Push(stackplayChess); initArrays( );// 数组操作 // 如果电脑赢了 if (AiMoveSearch.IsMate( )) { AiMoveSearch.Startup( ); // 初始化棋盘 initArrays( ); // 初始化数组 ViewConstant.shuJMflag = true; //father.playSound(5, 1);// b播放声音,输了 } else { //father.playSound(2, 1);// b播放声音,电脑下棋了 isValidTouch = true;// 下完棋子,玩家可以操控了。 } isRedPlayChess = false; ViewConstant.endTime = ViewConstant.zTime; draw( );// 重绘方法 Debuger.LogWarning("电脑走棋线程执行完毕!!"); })); //aiThread.IsBackground = true; // 加入线程管理,并启动线程 ThreadManager.Instance.addWorkThread(aiThread); }