java五子棋源代码判断输赢,希望帮忙指出错误并完善

我的思路:以当前落子的坐标直线遍历,判断是否有相同的五子连珠,主要问题是比如说左斜线存在左右两部分,怎么确定左右两部分的范围,还有当前落子的起始值,我的思路不只是否正确,希望大侠能帮助,x,y为落子的坐标
for(i=x,j=y;i<14&&j<14;i++,j++){
if((i+j)>=4&&(i+j)<=14){
if(chessboard[x+y][0].equals(chessboard[x+y-1][0++]) && !"╋".equals(chessboard[x+y][0])){
a++;
}else
a = 0;
if(a==4){
if(chessboard[x+y][0].equals(white))
System.out.println("白棋胜利!");
else
System.out.println("黑棋胜利!");
return;
}
}

可以建立一个二维数组的数据结构:
int[][] ISFIVE = {
{2,2,1,1,1,1,1,2,2},
{1,1,1,1,1,2,2,2,2},
{2,1,1,1,1,1,2,2,2},
{2,2,2,1,1,1,1,1,2},
{2,2,2,2,1,1,1,1,1}
};
中间那个就是目前下子的位置,1表示和目前子相同颜色,2表示任意。0表示必须是空子,才合格,比如
int[][] ISFOUR = { {0,1,1,1,1,0,2,2,2},
{2,0,1,1,1,1,0,2,2},
{2,2,0,1,1,1,1,0,2},
{2,2,2,0,1,1,1,1,0}

};以上的二维数组中的数组都是属于活四,必胜棋型了。按照这个方法可以描绘出所有棋型。
关于你说的斜线部分,其实变通一下,就是数组的旋转而已,比如X,Y是当前落子的坐标,它的横向 就是 int[] temp= new int[9];
for(int i=-4;i<=4;i++){
temp[i+4] = qipan[x+i][y];
}
纵向就是
for(int i=-4;i<=4;i++){
temp[i+4] = qipan[x][y+i];
}
其实规律可以加入方向因子来解决,p,q的值为[1,0]表横向,[0.1]表纵向,[1,1]和[-1,-1]表两个斜向。
for(int i = -4;i<=4;i++){
temp[i+4] = qipan[x+p*i][y+p*i]
}
这个temp数组和上面的二维数组比较,合格就是那个棋型,就能得到4个走向的棋型。我的思路大致是这样,具体AI的设计就不一一细说了。
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-09-25
判断5子连珠的方法
1:X相同 Y等差1
2:Y相同 X等差1
3:XY都等差1

假设你你确实是按照XY做的,那么,你将黑子的XY放在数组(List<INT,INT>)里,白子也是。
没落完一子 对数组里的进行排序,先按照X排,然后按照Y排。每次只需要排最后一个就好了(可以不用LIST,其他方式也行。)。

判断结果
1:是否有5个差为1/0的X
2:是否有5个差为1/0的Y

1 2都满足,即获胜。本回答被提问者和网友采纳

我想知道用Java编写的五子棋怎么判断输赢
代码:先把每个点放入2维数组里 定义一个 chess[x][y]\/\/这里的x ,y是用mouseclick监听他的x,y 用arg0.getY() , arg0.getY() 方法取到的 值 定义一个boolean类判断是否赢 flag \/\/ 横向 boolean flag = false; \/\/一开始不赢 int i1 = 1; \/\/用他来循环第几个棋子 int count...

下了个JAVA五子棋代码不会看 求注释
intGame_Body[x\/20][y\/20]=color_Qizi+1; \/\/棋盘状态中这个位置上相应地添上棋子,1为白棋2为黑棋0为空位置 if (Game_win_1(x\/20,y\/20)) \/\/判断输赢,这么几个判断输赢的函数没找到嘛~楼主看看代码是不是全的

求一个简单的JAVA五子棋代码!! 网上复制的别来了!
\/\/ 斜向右下判断 String youxia = "";

五子棋源代码html
var isWhite = true;\/\/设置是否该轮到白棋 var isWell = false;\/\/设置该局棋盘是否赢了,如果赢了就不能再走了 var img_b = new Image();img_b.src = "images\/b.png";\/\/白棋图片 var img_w = new Image();img_w.src = "images\/c.png";\/\/黑棋图片 为棋盘的二维数组用来保存棋...

java五子棋求大神指点 加了个判断输赢后 就会报个 越界异常 不知道怎 ...
你这种判断方法真没见过,你怎么判断的呢?你第一个while循环接束后j没有重新赋值,后面的while循环肯定会越界的,你这种方法是做不了判断的!

怎么Java实现鼠标点击的五子棋啊 ?各位大侠 帮帮忙
import java.awt.color.*;class wuzi { public static void main(String[] args) { frame myFrame =new frame("五子棋");} } class frame extends Frame implements ActionListener{ MenuBar mbar=new MenuBar();Menu mgame=new Menu("选项");Menu mhelp=new Menu("帮助");MenuItem mstart=...

用Java编写一个程序,要求代码长度达4页A4纸,详情如下
不知道你的打印出来要求是要有4页A4纸是不是说所有代码写在同一个文件内,反正这样做一个游戏代码肯定不会少。还有,人人对弈是不是同一个客户端人人对弈,还是说联机的人人对弈。我是做了一个单机的人人对弈,当然,如果你需要是联机模式的人人对弈和人机对弈的话,就期待后续的修改吧,我把项目发给...

相似回答