只说说思路吧,要想给你有效地代码所耗费的时间太多。
肯定用数组,二维数组,要从横竖斜三个方向判断。
这里假设数组为arr[][]
并假定,数组中的某个元素值为0表示没有棋子,1表示有黑子,2表示有白子
调用result(),返回0表示没有人赢,返回1表示黑方赢,2表示白方赢
private int result(){
int i,j,flag=1;
//先判断横向
for(i=0;i
flag+=1;
if(flag==5){
return a[i][j];
}
}else{
flag=1;
}
}
}
//再判断竖向
flag=1;
for(j=0;j
flag++;
if(flag==5){
return a[i][j];
}
}else{
flag=1;
}
}
}
//斜的:
flag=1;
//遍历所有格
for(i=0;i
int m=i,n=j;
while(m
flag++;
if(flag==5){
return a[m][n];
}
}else{
flag=1;
}
}
//从当前格开始,往左下角查找
int m=i,n=j;
while(m
flag++;
if(flag==5){
return a[m][n];
}
}else{
flag=1;
}
}
}
}
}
没用过JAVA,说个思路希望对你有帮助
准备两个变量 一个 黑赢变量 一个白赢变量
为棋盘上每个点准备一个变量 叫点变量
该变量空为0 下白棋加1 下黑棋加2
看看拥有超过4个点的线(包括斜线)有多少个 作为外循环次数
外循环的工作
要6次重置起始点的位置,和内循环次数,和内循环里面的起始点内存地址
以及距离一下个点的内存地址的距离,每循环一次是加还是减也要知道
规律会变化6次
内循环的工作
1.测试点
如果为0则把黑赢和白赢变量清0
如果为1把白赢变量加1黑赢变量清0
如果为2把黑赢变量加1白赢变量清0
2.测试黑赢和白赢变量是否为5 哪个为5就是哪个赢了 结束循环
3.根据外循环提供的规律调整指向点变量的指针,和距离一下个点变量在内存里的距离
判断当前点周围也可以,不过涉及到边界问题,
我觉得那样更复杂
循环棋盘上每个下了子的点,判断它横竖斜线方向是否有5个子挨着。
如果有,则OK。。。
用一个2维boolean数组,有子的是true,无子的是false.
这有多难??
由于是双方都有子,则用类 Boolean,或者其他任意类型,反正是可以有三个标志的都可以,空,敌方,我方。
用枚举当然是最合适的
我是学Pascal的,但是大体思想可以给你说说。
每次落字判断这个子颜色并向8个方向延伸,如果延伸到5个则赢。如果眼神到5个之前就遇到不同颜色的子则直接退出这个方向的延伸。
时间复杂度最多O(40)
用一位数组模拟二维数组,存储各点的位置,然后直接写个算法判断遍历后的数组是否符合输赢条件