java五子棋的算法_初学java,写了一个五子棋算法的类,请大家多多指教.

//五子棋算法类,

/*看了一下QQ上面五子棋,直到有五子连珠才给出谁胜

*俺也这么做

*开始分析,先只考虑实现,不考虑效益,然后再对算法进行优化

*=====================================================*对于一个位置(x,y),下一个连着的棋可以有八个方向*234*1(x,y)5

*876

*

*最左上角为(0,0)坐标

*/

public class CheckFinish{

private int arraySize;//棋盘大小

private int[][] array;//棋盘大小,用二维数组表示,0表无棋,1表黑棋,2表白棋

private int[][]arrayWhiteChess;//白棋的数组

private int[][]arrayBlackChess;//

Check(int arraySize){

this.arraySize=arraySize;

this.array= new int[this.arraySize][this.arraySize];

this.arrayBlackChess=new int[this.arraySize][this.arraySize];

this.arrayWhiteChess=new int[this.arraySize][this.arraySize];

}

/*

*棋子放置,由canMove方法保证能否放置到当前位置

*/

public void move(int x,int y,int chessType){

this.array[x][y]=chessType;

if(chessType==1){

this.arrayBlackChess[x][y]=1;

}

else{

this.arrayWhiteChess[x][y]=2;

}

}

/*

*如果能放置返回true,不能放置返回false,

*/

public boolean canMove(int x,int y){

//如果x,y小于0,x,y大于等于arraySize不能放

if(x<0||x>=this.arraySize||y<0||y>=this.arraySize){

return false;

};

//当前位置有棋子了也不能放

if(this.array[x][y]!=0){

return false;

}

return true;

}

public void clean(){//清空棋盘

int i,j;

for(i=0;i

for(j=0;j

this.array[i][j]=0;

}

}

}

public boolean finish(int x,int y,int chessType){

if(chessType==1){//black

this.array=this.arrayBlackChess;

if(finish(x,y)==true)return true;

}

else{

this.array=this.arrayWhiteChess;

if(finish(x,y)==true)return true;

}

return false;

}

private boolean finish(int x,int y ){//给一个点,在此点分析是否游戏是否有人胜利

int times=1;//计数器,记录已经有多少个连着的棋,当times是5时代码return true

int next=1;//开始查找的方向

int temX=x-1;

int temY=y;

//while

//检查15方向

while(true){

if(checkNext(temX,temY,1)==true){//1的1方向

times++;

temX-=1;

continue;

}

else{

break;

}

}

temX=x+1;

while(true){//5方向

if(checkNext(temX,y,5)==true){

times++;

temX+=1;

continue;

}

else{

break;

}

}

if(times>=5) return true;

end of check 15 //

检查26方向

times=1;

temX=x-1;

temY=y-1;

while(true){//检查2方向

if(checkNext(temX,temY,2)==true){

times++;

temX-=1;

temY-=1;

continue;

}

else

{

break;

}

}

temX=x+1;

temY=y+1;

while(true){//检查6方向

if(checkNext(temX,temY,6)){

times++;

temX+=1;

temY+=1;

continue;

}

else

{

break;

}

}

if(times>=5)return true;

end o check 26/

检查37方向/

temX=x;

temY=y-1;

times=1;

while(true){//看3方向

if(checkNext(temX,temY,3)==true){

times++;

temY-=1;

continue;

}

else

{

break;

}

}

temY=temY+1;

while(true){//看6方向

if(checkNext(temX,temY,7)==true){

times++;

temY+=1;

continue;

}

else

{

break;

}

}

if(times>=5)return true;

/end of check 5//

看48方向

temX=x+1;

temY=y-1;

times=1;

while(true){//看4方向

if(checkNext(temX,temY,4)==true){

times++;

temX=temX+1;

temY=temY-1;

continue;

}

else

{

break;

}

}

temX=x-1;

temY=y+1;

while(true){//看8方向

if(checkNext(temX,temY,8)==true){

times++;

temX=temX-1;

temY=temY+1;

continue;

}

else

{

break;

}

}

if(times>=5)return true;

end of check 4 8///

/

/全部完成

///

return false;

}

private boolean checkNext(int x,int y,int next ){//next表方向,检查下一个方向是否有棋子

switch(next)

{

case 1:

if(x<0) return false;

if(this.array[x][y]!=0)

return true;

else

return false;

case 2:

if(x<0||y<0)return false;

if(this.array[x][y]!=0)

return true;

else

return false;

case 3:

if(y<0)return false;

if(this.array[x][y]!=0)

return true;

else

return false;

case 4:

if(x>=this.arraySize||y<0)return false;

if(this.array[x][y]!=0)

return true;

else

return false;

case 5:

if(x>=this.arraySize)return false;

if(this.array[x][y]!=0)

return true;

else

return false;

case 6:

if(x>=this.arraySize||y>=this.arraySize) return false;

if(this.array[x][y]!=0)

return true;

else

return false;

case 7:

if(y>=this.arraySize)return false;

if(this.array[x][y]!=0)

return true;

else

return false;

case 8:

if(x<0||y>=this.arraySize)return false;

if(this.array[x][y]!=0)

return true;

else

return false;

default:

return false;

}

}

public void test(){//测试 类 方法

this.array[6][0]=1;

this.array[6][1]=1;

this.array[6][2]=1;

this.array[6][3]=1;

this.array[6][4]=1;

this.array[1][4]=1;

this.array[2][4]=1;

this.array[3][4]=1;

this.array[4][4]=1;

this.array[5][4]=1;

this.array[0][0]=1;

this.array[1][1]=1;

this.array[2][2]=1;

this.array[3][3]=1;

this.array[4][4]=1;

this.array[1][8]=1;

this.array[2][7]=1;

this.array[3][6]=1;

this.array[4][5]=1;

this.array[5][4]=1;

if(this.finish(3,6)==true){

System.out.println("OK");

}

else

{

System.out.println("false");

}

if(this.finish(3,3)==true){

System.out.println("OK");

}

else

{

System.out.println("false");

}

if(this.finish(3,4)==true){

System.out.println("OK");

}

else

{

System.out.println("false");

}

if(this.finish(6,1)==true){

System.out.println("OK");

}

else

{

System.out.println("false");

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值