예제 #1
0
        // 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);
            }
        }
예제 #2
0
        // 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);
            }
        }
예제 #3
0
        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);
        }