这篇文章只是简单的绘制了一个棋盘,通过输入坐标(格式举例: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 in

本文介绍了一个简单的五子棋游戏实现,包括棋盘绘制和输入坐标落子功能。文章着重讨论了在初始算法中遇到的数组越界问题,并提供了修正后的胜利判定算法代码,确保棋子在棋盘边缘位置也能正确判断。
最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



