// At the drag end void On_DragEnd(Gesture gesture) { if (gesture.pickObject == m_selfGameObject) { m_selfGameObject.renderer.material.color = Color.white; if (null != m_IndexTriger) { //设置棋子落下的位置 this.transform.localPosition = m_IndexTriger.transform.localPosition; } else { Debuger.LogError("m_IndexTriger is null !!"); return; } byte xzgz = (byte)(16 * (m_IndexTriger.m_i + 3) + (3 + m_IndexTriger.m_j));// 落下棋子的格子是这么多,也就是其在256数组的下标 IndexCtrlBehaviour.s_xzgz = xzgz; Debuger.LogWarning("棋子" + this.name + "落子到了" + m_IndexTriger.name + "位置上!其在的256数组的下标为" + xzgz); //copy drag start.. int sqDst = Chess_LoadUtil.DST(xzgz + ((m_IndexTriger.m_i + 3) * 16 + m_IndexTriger.m_j + 3) * 256); // 选中的棋子在256数组的下标 int pcCaptured = IndexCtrlBehaviour.m_qiZiPos[sqDst]; // 通过256数组的下标值,得到选中格子是哪颗棋子 int mv = xzgz + ((m_IndexTriger.m_i + 3) * 16 + m_IndexTriger.m_j + 3) * 256; // 走一步棋的走法 Debuger.LogWarning("sqDst = " + sqDst + ", 得到目的格子的棋子pcCaptured = " + pcCaptured + ", mv = " + mv); StackPlayChess stackPlayChess = new StackPlayChess(mv, pcCaptured); // 调用玩家下完一步棋事件 ChessOnceMoveFinish(stackPlayChess); } }
// At the drag beginning void On_DragStart(Gesture gesture) { if (gesture.pickObject == m_selfGameObject) { // 如果是自己的棋子 m_selfGameObject.renderer.material.color = Color.red; byte xzgz = (byte)((m_IndexTriger.m_i + 3) * 16 + m_IndexTriger.m_j + 3);// 选中的棋子的格子是这么多,也就是其在256数组的下标 IndexCtrlBehaviour.s_xzgz = xzgz; Debuger.LogWarning("选中棋子" + this.name + "原始位置为" + m_IndexTriger.name + "位置上!其在的256数组的下标为" + xzgz); int sqDst = Chess_LoadUtil.DST(xzgz + ((m_IndexTriger.m_i + 3) * 16 + m_IndexTriger.m_j + 3) * 256); // 选中的棋子在256数组的下标 int pcCaptured = IndexCtrlBehaviour.m_qiZiPos[sqDst]; // 通过256数组的下标值,得到选中格子是哪颗棋子 int mv = xzgz + ((m_IndexTriger.m_i + 3) * 16 + m_IndexTriger.m_j + 3) * 256; // 走一步棋的走法 Debuger.LogWarning("sqDst = " + sqDst + ", 得到目的格子的棋子pcCaptured = " + pcCaptured + ", mv = " + mv); } }
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); }