五子棋作为很多初学者的第一个比较综合性的小项目,需要大家根据需求对二维数组进行查询、存放棋子等操作。这一步相信大家都没有什么问题,然而没有输赢的五子棋就没有意义,所以五子棋还有判断结果这一重要的步骤。大部分老师都没有对这一步进行要求,但很多同学却很感兴趣并且在网上进行了查询,相信也能够利用网上的代码玩五子棋的游戏了。接下来我想提供自己判断五子棋输赢的几种思路
一、遍历棋盘的每一行每一列
这大概是最蠢的一种的方式了,你不仅需要遍历每一行每一列,还需要遍历每一列。因为每下一步棋都需要进行结果判断,势必会很占内存,所以不推荐这种方式
二、判断当前所下棋子的上下棋子个数加起来是否为4
网上现有的结果判断基本数都是这一种,通过判断该棋子横竖斜每一条线相邻的棋子是否为4三、判断棋子所在每一行每一列是否有五子相连
这个是我自己写的,因为想起来更简单
/**
*
*@param x 棋子所在行数-1
* @param y 棋子所在列数-1
* @param bool bool为true则说明落子为黑子,否则落子为白子
* @return 返回true则表明对应的子五子相连,返回false表明没有五子相连的情况
*/
public boolean result(int x,int y,boolean bool){
String str=(bool)?"■":"○";
//棋子所在行和列是否有五子相连的情况
for(int i=0;i<16;i++){
if((board[x][i].equals(str)&&board[x][i+1].equals(str)&&board[x][i+2].equals(str)&&board[x][i+3].equals(str)&&board[x][i+4].equals(str))||(board[i][y].equals(str)&&board[i+1][y].equals(str)&&board[i+2][y].equals(str)&&board[i+3][y].equals(str)&&board[i+4][y].equals(str)))
return true;
}
//棋子所在撇行是否有五子相连的情况
if(x+y>=4&&x+y<=30){
int i=(x+y<=19)?x+y:x+y-20;
if(x+y<=19){
for(int k=0;k<=i-4;k++){
if(board[k][i-k].equals(str)&&board[k+1][i-k-1].equals(str)&&board[k+2][i-k-2].equals(str)&&board[k+3][i-k-3].equals(str)&&board[k+4][i-k-4].equals(str))
return true;
}
}else{
for(int k=i;k<=15;k++){
if(board[k][20-k].equals(str)&&board[k+1][20-k-1].equals(str)&&board[k+2][20-k-2].equals(str)&&board[k+3][20-k-3].equals(str)&&board[k+4][20-k-4].equals(str))
return true;
}
}
}
//棋子所在捺行是否有五子相连的情况
if(y-x<=15&&x-y<=15){
int i=(x<y)?y-x:x-y;
if(x<y){
for(int k=0;k<=19-4-i;k++){
if(board[k][i+k].equals(str)&&board[k+1][i+k+1].equals(str)&&board[k+2][i+k+2].equals(str)&&board[k+3][i+k+3].equals(str)&&board[k+4][i+k+4].equals(str))
return true;
}
}else{
for(int k=i;k<=15;k++){
if(board[k][i+k].equals(str)&&board[k+1][i+k+1].equals(str)&&board[k+2][i+k+2].equals(str)&&board[k+3][i+k+3].equals(str)&&board[k+4][i+k+4].equals(str))
return true;
}
}
}
return false;
}