我在编一个五子棋程序,不知道该怎么判输赢,有没有什么简单的算法?
我的下棋原理很简单,棋盘是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)