⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 moniwuziqi.java

📁 本程序选择Java语言
💻 JAVA
字号:
//五子棋算法类,

public class MoniWuziqi{

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

              }

       }

}

 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -