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

📄 gamecanvas.java

📁 用java写的五子棋游戏
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
        }
    }
  }

 /**
  * 检查x,y型表
  *
  *   ChessBoard[lineNum][lineNum];//表示状态
  *   ChessStatus[lineNum][lineNum][4];//表示型态
  *
  * */
 private void Check(int x,int y,int who){

   int Left=0;
   int Right=0;
   int Up=0;
   int Down=0;
   int RightDown=0;
   int RightUp=0;
   int LeftUp=0;
   int LeftDown=0;
   boolean Right_b=false;
   boolean Left_b=false;
   boolean Down_b=false;
   boolean Up_b=false;
   boolean RU_b=false;
   boolean LD_b=false;
   boolean LU_b=false;
   boolean RD_b=false;

     for(int i=1;i<=4;i++){

       if((x+i)<lineNum){
          if(ChessBoard[x+i][y]==who&&!Right_b) Right++; else Right_b=true;
        }else{Right_b=true;}

       if((x-i)>=0){
         if(ChessBoard[x-i][y]==who&&!Left_b) Left++; else Left_b=true;
       }else{Left_b=true;}

       if((y+i)<lineNum){
         if(ChessBoard[x][y+i]==who&&!Down_b) Down++; else Down_b=true;
       }else{Down_b=true;}

       if((y-i)>=0){
         if(ChessBoard[x][y-i]==who&&!Up_b) Up++; else Up_b=true;
       }else{Up_b=true;}

       if((x+i)<lineNum&&(y-i)>=0&&!RU_b){
         if(ChessBoard[x+i][y-i]==who) RightUp++; else RU_b=true;
       }else{RU_b=true;}

       if((x-i)>=0&&(y+i)<lineNum&&!LD_b){
         if(ChessBoard[x-i][y+i]==who) LeftDown++; else LD_b=true;
       }else{LD_b=true;}

       if((x-i)>=0&&(y-i)>=0&&!LU_b){
         if(ChessBoard[x-i][y-i]==who) LeftUp++; else LU_b=true;
       }else{LU_b=true;}

       if((x+i)<lineNum&&(y+i)<lineNum&&!RD_b){
         if(ChessBoard[x+i][y+i]==who) RightDown++; else RD_b=true;
       }else{RD_b=true;}
   }

   ChessStatus[x][y][0]=Left+Right;
   ChessStatus[x][y][1]=Up+Down;
   ChessStatus[x][y][2]=RightUp+LeftDown;
   ChessStatus[x][y][3]=RightDown+LeftUp;

   //-----------------

   // 此处增加权值计算代码,

   //-----------------
 }

 private void setSound(String s, int i)
 {
    try
     {
         DataInputStream datainputstream = new DataInputStream(getClass().getResourceAsStream("/" + s));
         int j = datainputstream.readInt();
         int k = datainputstream.read();
         int l = datainputstream.read();
         int i1 = datainputstream.read();
         int j1 = datainputstream.read();
         int k1 = (j1 << 24) + (i1 << 16) + (l << 8) + (k << 0) + 8;
         datainputstream.close();
         datainputstream = new DataInputStream(getClass().getResourceAsStream("/" + s));
         byte abyte0[] = new byte[k1];
         datainputstream.read(abyte0, 0, k1);
         datainputstream.close();
         sD[i] = new Sound(abyte0, 5);
     }
     catch(Exception exception) { }
 }

 private void drawMenu(Graphics g){
   g.setColor(255, 00,00);
   g.fillRect(13, 13, 98, 178);
   g.setColor(00, 00,00);
   g.fillRect(18, 18, 88, 168);
   g.setFont(Font.getFont(0, 1, 8));
   g.setColor(255, 00, 00);
   byte byte0 = 40;
 }

 /**
  * 从型表中选取最大
  * */
  private void getLarge(){
    int temp1=0;
    int temp2=0;
    int drop_x=lineNum/2;
    int drop_y=lineNum/2;

    for(int x=0;x<lineNum;x++){
      for(int y=0;y<lineNum;y++){
        temp2=ChessStatus[x][y][0]+ChessStatus[x][y][1]+ChessStatus[x][y][2]+ChessStatus[x][y][3];
        if(temp2>temp1){
          drop_x=x;
          drop_y=y;
        }
      }
    }
        computer_x=drop_x*ChessUnitage+ChessBoardOffset;
        computer_y=drop_y*ChessUnitage+ChessBoardOffset;
  }
  /*
   *初始化权值表
   **/
  private void initPower(){
    power[0][0][0] = 0;
    power[0][0][1] = 10;
    power[0][0][2] = 30;
    power[0][0][3] = 750;
    power[0][0][4] = 16000;
    power[0][1][0] = 0;
    power[0][1][1] = 2;
    power[0][1][2] = 5;
    power[0][1][3] = 50;
    power[0][1][4] = 7750;
    power[0][2][0] = 0;
    power[0][2][1] = 0;
    power[0][2][2] = 0;
    power[0][2][3] = 0;
    power[0][2][4] = 16000;
    power[1][0][0] = 0;
    power[1][0][1] = 10;
    power[1][0][2] = 30;
    power[1][0][3] = 350;
    power[1][0][4] = 4000;
    power[1][1][0] = 0;
    power[1][1][1] = 1;
    power[1][1][2] = 5;
    power[1][1][3] = 40;
    power[1][1][4] = 4000;
    power[1][2][0] = 0;
    power[1][2][1] = 0;
    power[1][2][2] = 0;
    power[1][2][3] = 0;
    power[1][2][4] = 16000;
  }

  /**
   * 如果型表中势力相同,则随机选取一个
   * */
  private  int  RandonInt(int  i,int  j) {
   int  k  =  rand.nextInt();
   if(k  <  0)
       k  =  -(k  +  1);
       return  i  +  k  %  (j  -  i);
   }

   public void AI()
   {
       for(int i6 = 0; i6 < lineNum; i6++)
       {
           for(int j6 = 0; j6 < lineNum; j6++)
           {
               Ctable[i6][j6] = 0;
           }

       }

       for(int i = 0; i < lineNum; i++)
       {
           for(int j = 0; j < lineNum; j++)
           {
               int k4 = ChessBoard[i][j];
               if(k4 <= 0)
               {
                   for(int l4 = 0; l4 < 4; l4++)
                   {
                       switch(l4)
                       {
                       default:
                           break;

                       case 0: // '\0'
                           for(int k3 = 1; k3 <= 2; k3++)
                           {
                               int i5 = computerfirst + k3 != 2 ? 1 : 0;
                               byte byte0 = ((byte)(k3 != 2 ? 2 : 1));
                               int k;
                               for(k = 1; i + k < lineNum; k++)
                               {
                                   if(ChessBoard[i + k][j] != k3)
                                   {
                                       break;
                                   }
                               }

                               int i1;
                               for(i1 = -1; i + i1 >= 0; i1--)
                               {
                                   if(ChessBoard[i + i1][j] != k3)
                                   {
                                       break;
                                   }
                               }

                               if(i + k <= lineNum - 1 && ChessBoard[i + k][j] <= 0 && i + i1 >= 0 && ChessBoard[i + i1][j] <= 0)
                               {
                                   Ctable[i][j] = Ctable[i][j] + power[i5][0][k - i1 - 2 <= 4 ? k - i1 - 2 : 4];
                               } else
                               if((i + k > lineNum - 1 || i + k < lineNum && ChessBoard[i + k][j] == byte0) && (i + i1 < 0 || i + i1 >= 0 && ChessBoard[i + i1][j] == byte0))
                               {
                                   Ctable[i][j] = Ctable[i][j] + power[i5][2][k - i1 - 2 <= 4 ? k - i1 - 2 : 4];
                               } else
                               {
                                   Ctable[i][j] = Ctable[i][j] + power[i5][1][k - i1 - 2 <= 4 ? k - i1 - 2 : 4];
                               }
                           }

                           break;

                       case 1: // '\001'
                           for(int l3 = 1; l3 <= 2; l3++)
                           {
                               int j5 = computerfirst + l3 != 2 ? 1 : 0;
                               byte byte1 = ((byte)(l3 != 2 ? 2 : 1));
                               int k1 = 1;
                               int k2;
                               for(k2 = 1; i + k1 < lineNum && j + k2 < lineNum; k2++)
                               {
                                   if(ChessBoard[i + k1][j + k2] != l3)
                                   {
                                       break;
                                   }
                                   k1++;
                               }

                               int i2 = -1;
                               int i3;
                               for(i3 = -1; i + i2 >= 0 && j + i3 >= 0; i3--)
                               {
                                   if(ChessBoard[i + i2][j + i3] != l3)
                                   {
                                       break;
                                   }
                                   i2--;
                               }

                               if(i + k1 <= lineNum - 1 && j + k2 <= lineNum - 1 && ChessBoard[i + k1][j + k2] <= 0 && i + i2 >= 0 && j + i3 >= 0 && ChessBoard[i + i2][j + i3] <= 0)
                               {
                                   Ctable[i][j] = Ctable[i][j] + power[j5][0][k1 - i2 - 2 <= 4 ? k1 - i2 - 2 : 4];
                               } else
                               if((i + k1 > lineNum - 1 || j + k2 > lineNum - 1 || i + k1 <= lineNum - 1 && j + k2 <= lineNum - 1 && ChessBoard[i + k1][j + k2] == byte1) && (i + i2 < 0 || j + i3 < 0 || i + i2 >= 0 && j + i3 >= 0 && ChessBoard[i + i2][j + i3] == byte1))
                               {
                                   Ctable[i][j] = Ctable[i][j] + power[j5][2][k1 - i2 - 2 <= 4 ? k1 - i2 - 2 : 4];
                               } else
                               {
                                   Ctable[i][j] = Ctable[i][j] + power[j5][1][k1 - i2 - 2 <= 4 ? k1 - i2 - 2 : 4];
                               }
                           }

                           break;

                       case 2: // '\002'
                           for(int i4 = 1; i4 <= 2; i4++)
                           {
                               int k5 = computerfirst + i4 != 2 ? 1 : 0;
                               byte byte2 = ((byte)(i4 != 2 ? 2 : 1));
                               int l;
                               for(l = 1; j + l < lineNum; l++)
                               {
                                   if(ChessBoard[i][j + l] != i4)
                                   {
                                       break;
                                   }
                               }

                               int j1;
                               for(j1 = -1; j + j1 >= 0; j1--)
                               {
                                   if(ChessBoard[i][j + j1] != i4)
                                   {
                                       break;
                                   }
                               }

                               if(j + l <= lineNum - 1 && ChessBoard[i][j + l] <= 0 && j + j1 >= 0 && ChessBoard[i][j + j1] <= 0)
                               {
                                   Ctable[i][j] = Ctable[i][j] + power[k5][0][l - j1 - 2 <= 4 ? l - j1 - 2 : 4];
                               } else
                               if((j + l > lineNum - 1 || j + l <= lineNum - 1 && ChessBoard[i][j + l] == byte2) && (j + j1 < 0 || j + j1 >= 0 && ChessBoard[i][j + j1] == byte2))
                               {
                                   Ctable[i][j] = Ctable[i][j] + power[k5][2][l - j1 - 2 <= 4 ? l - j1 - 2 : 4];
                               } else
                               {
                                   Ctable[i][j] = Ctable[i][j] + power[k5][1][l - j1 - 2 <= 4 ? l - j1 - 2 : 4];
                               }
                           }

                           break;

                       case 3: // '\003'
                           for(int j4 = 1; j4 <= 2; j4++)
                           {
                               int l5 = computerfirst + j4 != 2 ? 1 : 0;
                               byte byte3 = ((byte)(j4 != 2 ? 2 : 1));
                               int l1 = -1;
                               int l2;
                               for(l2 = 1; i + l1 >= 0 && j + l2 <= lineNum - 1; l2++)
                               {
                                   if(ChessBoard[i + l1][j + l2] != j4)
                                   {
                                       break;
                                   }
                                   l1--;
                               }

                               int j2 = 1;
                               int j3;
                               for(j3 = -1; i + j2 <= lineNum - 1 && j + j3 >= 0; j3--)
                               {
                                   if(ChessBoard[i + j2][j + j3] != j4)
                                   {
                                       break;
                                   }
                                   j2++;
                               }

                               if(i + l1 >= 0 && j + l2 <= lineNum - 1 && ChessBoard[i + l1][j + l2] <= 0 && i + j2 <= lineNum - 1 && j + j3 >= 0 && ChessBoard[i + j2][j + j3] <= 0)
                               {
                                   Ctable[i][j] = Ctable[i][j] + power[l5][0][j2 - l1 - 2 <= 4 ? j2 - l1 - 2 : 4];
                               } else
                               if((i + l1 < 0 || j + l2 > lineNum - 1 || i + l1 >= 0 && j + l2 <= lineNum - 1 && ChessBoard[i + l1][j + l2] == byte3) && (i + j2 > lineNum - 1 || j + j3 < 0 || i + j2 <= lineNum - 1 && j + j3 >= 0 && ChessBoard[i + j2][j + j3] <= 0))
                               {
                                   Ctable[i][j] = Ctable[i][j] + power[l5][2][j2 - l1 - 2 <= 4 ? j2 - l1 - 2 : 4];
                               } else
                               {
                                   Ctable[i][j] = Ctable[i][j] + power[l5][1][j2 - l1 - 2 <= 4 ? j2 - l1 - 2 : 4];
                               }
                           }

                           break;
                       }
                   }

               }
           }

       }

    }


}

⌨️ 快捷键说明

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