示例#1
0
    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( );
    }
示例#2
0
 // 玩家输了,AI胜利
 void aiWin( )
 {
     ViewConstant.shuJMflag = true;
     AiMoveSearch.Startup( ); // 初始化棋盘
     initArrays( );           // 初始化数组
     ViewConstant.endTime   = ViewConstant.zTime;
     ViewConstant.isnoStart = false;
     dianjiJDT = false;
 }
示例#3
0
        //------------------------------------------------

        /// <summary>
        /// 构造函数
        /// </summary>
        public ChessAiModel( )
        {
            // 按钮,开始或者暂停
            ViewConstant.isnoStart = false;
            // 难度数
            length = ViewConstant.nanduXS * 4;
            // 初始化棋盘所有棋子
            AiMoveSearch.Startup( );
            // 初始化数组
            initArrays( );

            // 总时间
            ViewConstant.endTime = ViewConstant.zTime;
            // 线程是否运行
            threadFlag = true;

            //在构造函数里启动新线程
            surfaceCreated( );
        }
示例#4
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);
        }
示例#5
0
 void initAI( )
 {
     AiMoveSearch.Startup( ); // 初始化棋盘
     initArrays( );           // 初始化数组
 }