这篇文章只是简单的绘制了一个棋盘,通过输入坐标(格式举例:3,4)来下棋,然后就是胜利判定算法。我最刚开始的算法会出现数组越界问题,也就是说当棋子下在棋盘最靠边的一圈时就会出现数组越界异常,后来大改了一遍,解决了这个问题。下面是正确的代码:
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class five {
//定义棋盘的大小
private static int BOARD_SIZE=15;
//定义一个二维数组用于显示棋盘
private String[][] board;
//定义一个二维数组用于记录坐标
private int[][]xy=new int[225][2];
//判断是否已胜利
private int[][]idx=new int[15][15];
//count为胜利的步数,每种胜利类型应重置count
int count=0;
//x,y为坐标,q为胜利类型,id来判定已经经历过的点,每种胜利切换时也应该重置count
boolean win=false;
public void isSuccess(int x,int y,int q,int id)
{
//以下整个条件判断是为了判断水平方向五子胜利
//判断是否越界
if(x<0||x>=14||y<0||y>=14)
return;
//不是棋子或已访问的格子
if(idx[x][y]!=0||board[x][y]!="●")
return;
idx[x][y]=id;
count++;
//System.out.println("count"+count);
if(count==5)
{
System.out.println("您已胜利!");
win=true;
return;
}
switch(q)
{
//横向胜利判断
case 0:
for(int i=-1;i<2;i++)
{
if(i!=0)
isSuccess(x+i,y,0,id);
}
break;
//纵向胜利判断
case 1:
for(int i=-1;i<2;i++)
{
if(i!=0)
isSuccess(x,y+i,1,id);
}
break;
//从左上到右下
case 2:
for(int i=-1;i<2;i++)
{
if(i!=0)
isSuccess(x+i,y+i,2,id);
}
break;
case 3:
//以下用于判断从右上到左下的胜利
for(int i=-1;i<2;i++)
{
if(i!=0)
isSuccess(x-i,y+i,3,id);
}
break;
}
}
//初始化棋盘
public void initBoard()
{
board=new String[BOARD_SIZE][BOARD_SIZE];
for(i