Exemple #1
0
        /// <summary>
        /// 鼠标移动时显示位置标识
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void chessBoard_MouseMove(object sender, MouseEventArgs e)
        {
            // 游戏开始时有效
            if (!game.isOver())
            {
                // 取得横纵索引
                int x = Globe.C2I(e.X);
                int y = Globe.C2I(e.Y);

                // 绘制标记
                g_f.Clear(Globe.CLEAR); // 重绘标记层
                g_f.DrawImage(Globe.SELECTED, Globe.I2C(x), Globe.I2C(y));
                // 重绘
                Draw();
            }
        }
Exemple #2
0
        /// <summary>
        /// 放置棋子
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void chessBoard_MouseDown(object sender, MouseEventArgs e)
        {
            // 游戏开始时有效
            if (!game.isOver())
            {
                // 取得横纵索引
                int x = Globe.C2I(e.X);
                int y = Globe.C2I(e.Y);


                //****//
                if (model == Globe.PVC)              //人机
                {                                    //****//
                    int curUser = game.getCurUser(); // 获取当前行棋人

                    // 单机模式
                    // 放置棋子
                    if (game.placePiece(x, y))
                    {
                        if (PFirstToolStripMenuItem.Checked) //玩家先手
                        {
                            // 绘制棋子
                            DrawPiece(curUser, x, y);
                            // 绘制落子标记
                            g_p.Clear(Globe.CLEAR);                               // 重绘落子标记
                            g_p.DrawImage(Globe.SET, Globe.I2C(x), Globe.I2C(y)); // 绘制落子标记
                            // 重绘
                            Draw();

                            int value = 0;
                            value = game.evaluateState(game.curState, curUser);
                            ;
                            // 判断输赢
                            if (game.isOver())
                            {
                                string info = "执黑棋方";
                                if (MessageBox.Show(info + "获胜!\n点击确认开始新游戏",
                                                    "游戏结束",
                                                    MessageBoxButtons.OKCancel) == DialogResult.OK
                                    )
                                {
                                    PVCStartToolStripMenuItem_Click(null, null);
                                }
                                return;
                            }

                            curUser = game.getCurUser();
                            Point AIPiece = game.placePieceAI(); // AI行棋

                            // 绘制棋子
                            DrawPiece(curUser, AIPiece.X, AIPiece.Y);
                            // 绘制落子标记
                            g_p.Clear(Globe.CLEAR);                                               // 重绘落子标记
                            g_p.DrawImage(Globe.SET, Globe.I2C(AIPiece.X), Globe.I2C(AIPiece.Y)); // 绘制落子标记
                            // 重绘
                            Draw();
                            // 判断输赢
                            if (game.isOver())
                            {
                                string info = "执白棋方";
                                if (MessageBox.Show(info + "获胜!\n点击确认开始新游戏",
                                                    "游戏结束",
                                                    MessageBoxButtons.OKCancel) == DialogResult.OK
                                    )
                                {
                                    PVCStartToolStripMenuItem_Click(null, null);
                                }
                            }
                        }
                        else  //AI先
                        {
                            curUser = game.getCurUser();
                            DrawPiece(curUser, x, y);
                            // 绘制落子标记
                            g_p.Clear(Globe.CLEAR);                               // 重绘落子标记
                            g_p.DrawImage(Globe.SET, Globe.I2C(x), Globe.I2C(y)); // 绘制落子标记
                            // 重绘
                            Draw();
                            if (game.isOver())
                            {
                                string info = "执白棋方";
                                if (MessageBox.Show(info + "获胜!\n点击确认开始新游戏",
                                                    "游戏结束",
                                                    MessageBoxButtons.OKCancel) == DialogResult.OK
                                    )
                                {
                                    PVCStartToolStripMenuItem_Click(null, null);
                                    if (PFirstToolStripMenuItem.Checked == false)
                                    {
                                        Point AIPiece1 = game.getStartStep(); // AI行棋
                                        if (game.placePiece(AIPiece1.X, AIPiece1.Y))
                                        {
                                            // 绘制棋子
                                            DrawPiece(Globe.USER_1, AIPiece1.X, AIPiece1.Y);
                                            // 绘制落子标记
                                            g_p.Clear(Globe.CLEAR);                                                 // 重绘落子标记
                                            g_p.DrawImage(Globe.SET, Globe.I2C(AIPiece1.X), Globe.I2C(AIPiece1.Y)); // 绘制落子标记
                                            // 重绘
                                            Draw();
                                        }
                                    }
                                }
                                return;
                            }



                            Point AIPiece = game.placePieceAI(); // AI行棋
                            curUser = game.getCurUser();
                            DrawPiece(Globe.USER_1, AIPiece.X, AIPiece.Y);
                            // 绘制落子标记
                            g_p.Clear(Globe.CLEAR);                                               // 重绘落子标记
                            g_p.DrawImage(Globe.SET, Globe.I2C(AIPiece.X), Globe.I2C(AIPiece.Y)); // 绘制落子标记
                            // 重绘
                            Draw();
                            if (game.isOver())
                            {
                                string info = "执黑棋方";
                                if (MessageBox.Show(info + "获胜!\n点击确认开始新游戏",
                                                    "游戏结束",
                                                    MessageBoxButtons.OKCancel) == DialogResult.OK
                                    )
                                {
                                    PVCStartToolStripMenuItem_Click(null, null);
                                    if (PFirstToolStripMenuItem.Checked == false)
                                    {
                                        Point AIPiece2 = game.getStartStep(); // AI行棋
                                        if (game.placePiece(AIPiece2.X, AIPiece2.Y))
                                        {
                                            // 绘制棋子
                                            DrawPiece(Globe.USER_1, AIPiece2.X, AIPiece2.Y);
                                            // 绘制落子标记
                                            g_p.Clear(Globe.CLEAR);                                                 // 重绘落子标记
                                            g_p.DrawImage(Globe.SET, Globe.I2C(AIPiece2.X), Globe.I2C(AIPiece2.Y)); // 绘制落子标记
                                            // 重绘
                                            Draw();
                                        }
                                    }
                                }
                                return;
                            }
                        }
                    }
                }
                else if (model == Globe.PVP)// 网络模式
                {
                    //MessageBox.Show("sasasa");
                    int curUserNet = game.getCurUser(); // 获取当前行棋人

                    // 单机模式
                    // 放置棋子
                    if (waitForRival && game.placePieceNet(x, y)) //短路与 重要 placePieceNet会改变棋盘信息
                    {
                        DrawPiece(curUserNet, x, y);
                        // 绘制落子标记
                        g_p.Clear(Globe.CLEAR);                               // 重绘落子标记
                        g_p.DrawImage(Globe.SET, Globe.I2C(x), Globe.I2C(y)); // 绘制落子标记

                        Draw();
                        SendMessage(string.Format("Step,{0},{1},{2}", rivalName,
                                                  x.ToString(), y.ToString()));
                        waitForRival = false;
                    }

                    int value = 0;
                    value = game.evaluateState(game.curState, curUserNet);

                    // 判断输赢
                    if (game.isOver())
                    {
                        SendMessage("Lose," + rivalName);
                        if (MessageBox.Show("恭喜你赢了!",
                                            "游戏结束",
                                            MessageBoxButtons.OK) == DialogResult.OK
                            )
                        {
                            game.startGame((curUserNet == Globe.USER_1) ? true : false);
                            g_b.Clear(Globe.CLEAR); // 清理磁盘
                            g_p.Clear(Globe.CLEAR); // 清理落子标记
                            Draw();                 // 重绘
                            waitForRival = true;
                        }
                        return;
                    }
                }
            }
        }