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

📄 1.txt

📁 五子棋编程
💻 TXT
字号:
//五子棋算法类, 
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[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 + -