private void ButtonClicked(object sender, EventArgs e)
        {
            MyButton btn = (MyButton)sender;

            if (Data.top[btn.y] <= 0)
            {
                MessageBox.Show("This column has been full, chose another column");
                return;
            }
            else
            {
                Data.lastX = Data.top[btn.y] - 1;
                Data.lastY = btn.y;
                Data.board[Data.lastX * Data.N + Data.lastY] = 1;
                Data.top[Data.lastY]--;
                //对不可落子点进行处理
                if (Data.lastX == Data.noX + 1 && Data.lastY == Data.noY)
                {
                    Data.top[y]--;
                }
                Data.mainFrame.buttons[Data.lastX][Data.lastY].setImage(true);
                Data.mainFrame.updataBoard();

                //判断胜负

                /*
                 * bool over = Judge.judgeUM(true);
                 * if(!over)
                 * {
                 *  Data.mainFrame.computerGo();
                 * }
                 */
                Data.over = Judge.judgeUM(true);

                //保存历史,要在判断胜负的后面,因为ctrlPanel的修改与游戏是否结束有关
                Data.history.Push(new Step(true, Data.lastX, Data.lastY));
                Data.mainFrame.updateCtrlPanel();

                if (!Data.over)
                {
                    Data.mainFrame.computerGo();
                }
            }
        }
Esempio n. 2
0
        //机器对抗中B落子
        //return - 同上
        private bool BGo()
        {
            int x, y;

            unsafe
            {
                fixed(int *_top = Data.top, _board = Data.boardB)
                {
                    try
                    {
                        //---
                        Stopwatch s = new Stopwatch();
                        Stopwatch e = Stopwatch.StartNew();
                        s.Start();
                        //---

                        Point *p = Data.strategyB.getPoint(Data.M, Data.N, _top, _board, Data.lastX, Data.lastY, Data.noX, Data.noY);

                        //---
                        e.Stop();
                        long milisecs = s.ElapsedMilliseconds;
                        if (milisecs > Data.maxMiliSecs)
                        {
                            StringBuilder sb = new StringBuilder();
                            sb.Append("Warning : \nB's last step used ");
                            sb.Append(milisecs.ToString());
                            sb.Append(" ms,\nwhich is more than the limited ");
                            sb.Append(Data.maxMiliSecs.ToString());
                            sb.Append(" ms.");
                            MessageBox.Show(sb.ToString());
                        }
                        //---

                        x = p->x;
                        y = p->y;
                        Data.strategyB.clearPoint(p);
                    }
                    catch
                    {
                        MessageBox.Show("A bug occurred in strategy file B!\nB has lost, A has won!");
                        gameOver();
                        thread.Abort();
                        return(true);
                    }
                }
            }
            if (!isLegal(x, y, false, false))
            {
                gameOver();
                thread.Abort();
                return(true);
            }

            buttons[x][y].setImage(false);
            updataBoard();
            Data.lastX = x;
            Data.lastY = y;
            Data.boardA[x * Data.N + y] = 1;
            Data.boardB[x * Data.N + y] = 2;
            Data.top[y]--;
            //对不可落子点进行处理
            if (x == Data.noX + 1 && y == Data.noY)
            {
                Data.top[y]--;
            }
            //将该步放到堆栈中
            Data.backward.Push(new Step(false, x, y));

            bool over = Judge.judgeMM(false);

            return(over);
        }
Esempio n. 3
0
        //人机对抗中计算机在某一个点上落子
        public void computerGo()
        {
            int x, y;

            unsafe
            {
                fixed(int *_top = Data.top, _board = Data.board)
                {
                    try
                    {
                        //---
                        Stopwatch s = new Stopwatch();
                        Stopwatch e = Stopwatch.StartNew();
                        s.Start();
                        //---

                        Point *p = Data.strategy.getPoint(Data.M, Data.N, _top, _board, Data.lastX, Data.lastY, Data.noX, Data.noY);

                        //---
                        e.Stop();
                        long milisecs = s.ElapsedMilliseconds;
                        if (milisecs > Data.maxMiliSecs)
                        {
                            StringBuilder sb = new StringBuilder();
                            sb.Append("Warning : \nYour last step used ");
                            sb.Append(milisecs.ToString());
                            sb.Append(" ms,\nwhich is more than the limited ");
                            sb.Append(Data.maxMiliSecs.ToString());
                            sb.Append(" ms.");
                            MessageBox.Show(sb.ToString());
                        }
                        //---

                        x = p->x;
                        y = p->y;
                        Data.strategy.clearPoint(p);
                    }
                    catch
                    {
                        MessageBox.Show("A bug occurred in your strategy file!\nYou have lost.");
                        gameOver();
                        thread.Abort();
                        return;
                    }
                }
            }

            if (!isLegal(x, y, true, true))
            {
                gameOver();
                thread.Abort();
                return;
            }

            buttons[x][y].setImage(false);
            updataBoard();
            Data.lastX = x;
            Data.lastY = y;
            Data.board[x * Data.N + y] = 2;
            Data.top[y]--;
            //对不可落子点进行处理
            if (x == Data.noX + 1 && y == Data.noY)
            {
                Data.top[y]--;
            }
            //将该步落子放到栈中
            Data.history.Push(new Step(false, x, y));
            //更新控制面板
            updateCtrlPanel();
            //判断胜负
            //Judge.judgeUM(false);
            Data.over = Judge.judgeUM(false);
        }