分享
 
 
 

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

王朝java/jsp·作者佚名  2006-05-23
窄屏简体版  字體: |||超大  

//五子棋算法类,

public class Check{

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];

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;

}

/*

* 棋子放置,由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<this.arraySize;i++){

for(j=0;j<this.arraySize;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 ){ //给一个点,在此点分析是否游戏是否有人胜利

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

* 俺也这么做

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

* =====================================================

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

* 2 3 4

* 1 (x,y) 5

* 8 7 6

*

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

* 现在只分析如果都有棋子谁胜,而没有分开是白还是黑胜

*/

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

int next=1; //开始查找的方向为8时return flase

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//////////////////////////////

////////////////////////看4 8方向////////////////////////////////////////

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(){ //测试类方法

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");

}

}

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有