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

 //五子棋算法类,

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

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

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

*              8     7      6

*                  

*      最左上角为(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<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 ){            //给一个点,在此点分析是否游戏是否有人胜利

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

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

              int temX=x-1;

              int temY=y;

              //while

              //检查15方向

              while(true){

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

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

             

              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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值