日期:2014-05-17  浏览次数:21012 次

我在编一个五子棋程序,不知道该怎么判输赢,有没有什么简单的算法?
我的下棋原理很简单,棋盘是GDI绘图画出来的,直接画在主窗体上
棋子也是用GDI画出来的

关键是我动用了一个二维数组:int [,] intersection = new int[15,15] (我的棋盘是15*15的)和两个变量intersectionx和intersectiony,intersectionx和intersectiony其实是经过数学处理,把鼠标坐标转换成棋盘坐标,这也意味着它们的取值范围为1到15

在主窗体Form_Load事件里,我运用双重循环先给intersection数组全部赋值-1,代表该处无子

然后再窗体单击事件里,先判断鼠标点击的地方在不在棋盘区域里,在的话则:
判断intersection[intersectionx-1, intersectiony-1]处是不是-1,如果是,则:
如果下的黑子,则把intersection[intersectionx-1, intersectiony-1]赋值1
如果下的是白子,则把intersection[intersectionx-1, intersectiony-1]赋值0

如果intersection[intersectionx-1, intersectiony-1]处不是-1则不做处理

之所以intersectionx和intersectiony要减一是因为数组下标是从0开始,而intersectionx和intersectiony的取值范围为1到15。

现在问题来了,我该怎样利用数组intersection来判断五子相连呢?

附上部分代码:

public partial class MainForm : Form
{
        //声明全局变量,用于“交替落子和回合计数”代码段
        int roundblack = 1; //黑子判断
        int roundwhite = 0; //白子判断
        int roundcount = 0; //回合计数器
        int intersectionx = 0;
        int intersectiony = 0;
        int[,] intersection = new int[15, 15];

        public void MainForm_Click_1(object sender, EventArgs e)
        {
            if (intersectionx > 15 || intersectiony > 15)
            {
                return; //在棋盘界外,什么也不做
            }
            else if (intersectionx < 1 || intersectiony < 1)
            {
                return; //还是在棋盘界外,还是什么也不做
            }
            else
            {
                if (roundwhite < roundblack)