java 五子棋怎么判断输赢。。

2024-12-21 22:20:06
推荐回答(5个)
回答1:

只说说思路吧,要想给你有效地代码所耗费的时间太多。

肯定用数组,二维数组,要从横竖斜三个方向判断。

这里假设数组为arr[][]
并假定,数组中的某个元素值为0表示没有棋子,1表示有黑子,2表示有白子
调用result(),返回0表示没有人赢,返回1表示黑方赢,2表示白方赢

private int result(){
int i,j,flag=1;
//先判断横向
for(i=0;i for(j=0;j if(arr[i][j]==arr[i][j+1]){
flag+=1;
if(flag==5){
return a[i][j];
}
}else{
flag=1;
}
}
}
//再判断竖向
flag=1;
for(j=0;j for(i=0;i if(arr[i][j]==arr[i][j+1]){
flag++;
if(flag==5){
return a[i][j];
}
}else{
flag=1;
}
}
}
//斜的:
flag=1;
//遍历所有格
for(i=0;i for(j=0;j //从当前格开始,往右下角查找
int m=i,n=j;
while(m if(arr[m][n]==arr[++m][++n]){
flag++;
if(flag==5){
return a[m][n];
}
}else{
flag=1;
}
}
//从当前格开始,往左下角查找
int m=i,n=j;
while(m if(arr[m][n]==arr[++m][--n]){
flag++;
if(flag==5){
return a[m][n];
}
}else{
flag=1;
}
}
}
}

}

回答2:

没用过JAVA,说个思路希望对你有帮助
准备两个变量 一个 黑赢变量 一个白赢变量
为棋盘上每个点准备一个变量 叫点变量
该变量空为0 下白棋加1 下黑棋加2
看看拥有超过4个点的线(包括斜线)有多少个 作为外循环次数

外循环的工作
要6次重置起始点的位置,和内循环次数,和内循环里面的起始点内存地址
以及距离一下个点的内存地址的距离,每循环一次是加还是减也要知道
规律会变化6次
内循环的工作
1.测试点
如果为0则把黑赢和白赢变量清0
如果为1把白赢变量加1黑赢变量清0
如果为2把黑赢变量加1白赢变量清0
2.测试黑赢和白赢变量是否为5 哪个为5就是哪个赢了 结束循环

3.根据外循环提供的规律调整指向点变量的指针,和距离一下个点变量在内存里的距离

判断当前点周围也可以,不过涉及到边界问题,
我觉得那样更复杂

回答3:

循环棋盘上每个下了子的点,判断它横竖斜线方向是否有5个子挨着。
如果有,则OK。。。

用一个2维boolean数组,有子的是true,无子的是false.

这有多难??

由于是双方都有子,则用类 Boolean,或者其他任意类型,反正是可以有三个标志的都可以,空,敌方,我方。

用枚举当然是最合适的

回答4:

我是学Pascal的,但是大体思想可以给你说说。
每次落字判断这个子颜色并向8个方向延伸,如果延伸到5个则赢。如果眼神到5个之前就遇到不同颜色的子则直接退出这个方向的延伸。
时间复杂度最多O(40)

回答5:

用一位数组模拟二维数组,存储各点的位置,然后直接写个算法判断遍历后的数组是否符合输赢条件