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

📄 frame1.java

📁 java 五子棋 v2.1 Java源码。
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
              maxNumber=1;
            }
            state=board[i][j];
          }
        }
        //初始下一列扫描
        if(maxNumber<5){
          state=0;
          maxNumber=0;
        }
      }

      //检查横线
      for(int i=0;i<size;i++){
        for(int j=0;j<size;j++){
          if(maxNumber>4){ //到达5子共线
            winner=state;
            //设置直线提示
            if(j==0){
              canvas.setLine(size-5,i-1,size-1,i-1);
            }
            else{
              canvas.setLine(j-5,i,j-1,i);
            }
            return true;
          }
          if(board[j][i]==state&&state!=0){
            maxNumber++;
          }
          if(board[j][i]!=state){
            if(board[j][i]==0){
              maxNumber=0;
            }
            else{
              maxNumber=1;
            }
            state=board[j][i];
          }
        }
        //初始下一行扫描
        if(maxNumber<5){
          state=0;
          maxNumber=0;
        }
      }

      //检查左斜线
      for(int i=0;i<size;i++){ //检查上半部分
        for(int j=0;j<size-i;j++){
          if(maxNumber > 4){ //到达5子共线
            winner=state;
            //设置直线提示
            if(j==0){
              canvas.setLine((i-1)+size-(i-1)-5,size-(i-1)-5,(i-1)+size-(i-1)-1,size-(i-1)-1);
            }
            else{
              canvas.setLine(i+j-5,j-5,i+j-1,j-1);
            }
            return true;
          }
          if(board[i+j][j]==state&&state!=0){
            maxNumber++;
          }
          if(board[i+j][j]!=state){
            if(board[i+j][j]==0){
              maxNumber=0;
            }
            else{
              maxNumber=1;
            }
            state=board[i+j][j];
          }
        }
        //初始下一斜线扫描
        if(maxNumber<5){
          state=0;
          maxNumber=0;
        }
      }
      for(int i=1;i<size;i++){ //检查下半部分
        for(int j=0;j<size-i;j++){
          if(maxNumber>4){ //到达5子共线
            winner=state;
            //设置直线提示
            if(j==0){
              canvas.setLine(size-(i-1)-5,(i-1)+size-(i-1)-5,size-(i-1)-1,(i-1)+size-(i-1)-1);
            }
            else{
              canvas.setLine(j-5,i+j-5,j-1,i+j-1);
            }
            return true;
          }
          if(board[j][i+j]==state&&state!=0){
            maxNumber++;
          }
          if(board[j][i+j]!=state){
            if(board[j][i+j]==0){
              maxNumber=0;
            }
            else{
              maxNumber=1;
            }
            state=board[j][i+j];
          }
        }
        //初始下一斜线扫描
        if(maxNumber<5){
          state=0;
            maxNumber=0;
          }
        }

      //检查右斜线
      for(int i=0;i<size;i++){ //检查下半部分
        for(int j=0;j<size-i;j++) {
          if(maxNumber>4) { //到达5子共线
            winner=state;
            //设置直线提示
            if(j==0){
              canvas.setLine((i-1)+size-(i-1)-5,size+4-(size-(i-1)),(i-1)+size-(i-1)-1,size-(size-(i-1)));
            }
            else{
              canvas.setLine(i+j-5,size+4-j,i+j-1,size-j);
            }
            return true;
          }
          if(board[i+j][size-1-j]==state&&state!=0){
            maxNumber++;
          }
          if(board[i+j][size-1-j]!=state){
            if(board[i+j][size-1-j]==0){
              maxNumber=0;
            }
            else{
              maxNumber=1;
            }
            state=board[i+j][size-1-j];
          }
        }
        //初始下一斜线扫描
        if(maxNumber<5){
          state=0;
          maxNumber=0;
        }
      }
      for(int i=1;i<size;i++){ //检查上半部分
        for(int j=0;j<size-i;j++){
          if(maxNumber>4) { //到达5子共线
            winner=state;
            //设置直线提示
            if(j==0){
              canvas.setLine(size-(i-1)-5,size+4-(i-1)-(size-(i-1)),size-(i-1)-1,size-(i-1)-(size-(i-1)));
            }
            else{
              canvas.setLine(j-5,size+4-i-j,j-1,size-i-j);
            }
            return true;
          }
          if(board[j][size-1-i-j]==state&&state!=0){
            maxNumber++;
          }
          if(board[j][size-1-i-j]!=state){
            if(board[j][size-1-i-j]==0){
              maxNumber=0;
            }
            else{
              maxNumber=1;
            }
            state=board[j][size-1-i-j];
          }
        }
        //初始下一斜线扫描
        if(maxNumber<5){
          state=0;
          maxNumber=0;
        }
      }

      return false;
    }

    /**
     * <p>Description: 更新预测表</p>
     * @param n 棋子控制者(1:用户 2:AI)
     */
    public void refreshTable(int n){
      int[] result;
      int[][] preBoard=new int[size][size];
      for(int i=0;i<size;i++){
        for(int j=0;j<size;j++){
          preBoard[i][j]=board[i][j];
        }
      }

      for(int i=0;i<size;i++){
        for(int j=0;j<size;j++){
          if(board[i][j]==0){
            result=preCheck(preBoard, i, j, n);
            if(n==1){
              user.preBoard1[i][j]=result[0];
              user.preBoard2[i][j]=result[1];
              user.preBoard3[i][j]=result[2];
              user.preBoard4[i][j]=result[3];
              user.preBoard5[i][j]=result[4];
              user.preBoard6[i][j]=result[5];
              user.preBoard7[i][j]=result[6];

              show.userPreBoard1[i][j]=result[0];
              show.userPreBoard2[i][j]=result[1];
              show.userPreBoard3[i][j]=result[2];
              show.userPreBoard4[i][j]=result[3];
              show.userPreBoard5[i][j]=result[4];
              show.userPreBoard6[i][j]=result[5];
              show.userPreBoard7[i][j]=result[6];

              if(result[0]>0){
                userFourLine++;
              }
              if(result[1]+result[2]>0){
                userThreeLine++;
              }
              if(result[0]+result[1]+result[2]>1){
                userMultiLine++;
              }
            }
            else{
              ai.preBoard1[i][j]=result[0];
              ai.preBoard2[i][j]=result[1];
              ai.preBoard3[i][j]=result[2];
              ai.preBoard4[i][j]=result[3];
              ai.preBoard5[i][j]=result[4];
              ai.preBoard6[i][j]=result[5];
              ai.preBoard7[i][j]=result[6];

              show.aiPreBoard1[i][j]=result[0];
              show.aiPreBoard2[i][j]=result[1];
              show.aiPreBoard3[i][j]=result[2];
              show.aiPreBoard4[i][j]=result[3];
              show.aiPreBoard5[i][j]=result[4];
              show.aiPreBoard6[i][j]=result[5];
              show.aiPreBoard7[i][j]=result[6];

              if(result[0]>0){
                aiFourLine++;
              }
              if(result[1]+result[2]>0){
                aiThreeLine++;
              }
              if(result[0]+result[1]+result[2]>1){
                aiMultiLine++;
              }
            }
          }
        }
      }

      //更新最大值数据
      user.refreshMax(1);
      user.refreshMax(2);
      user.refreshMax(3);
      user.refreshMax(4);
      user.refreshMax(5);
      user.refreshMax(6);
      user.refreshMax(7);

      ai.refreshMax(1);
      ai.refreshMax(2);
      ai.refreshMax(3);
      ai.refreshMax(4);
      ai.refreshMax(5);
      ai.refreshMax(6);
      ai.refreshMax(7);
    }

    /**
     * <p>Description: 清空棋子权值</p>
     * @param i 棋子横坐标
     * @param j 棋子纵坐标
     */
    public void clearTable(int i, int j){
      //清空该点预测数据
      user.preBoard1[i][j]=0;
      user.preBoard2[i][j]=0;
      user.preBoard3[i][j]=0;
      user.preBoard4[i][j]=0;
      user.preBoard5[i][j]=0;
      user.preBoard6[i][j]=0;
      user.preBoard7[i][j]=0;

      ai.preBoard1[i][j]=0;
      ai.preBoard2[i][j]=0;
      ai.preBoard3[i][j]=0;
      ai.preBoard4[i][j]=0;
      ai.preBoard5[i][j]=0;
      ai.preBoard6[i][j]=0;
      ai.preBoard7[i][j]=0;

      show.userPreBoard1[i][j]=0;
      show.userPreBoard2[i][j]=0;
      show.userPreBoard3[i][j]=0;
      show.userPreBoard4[i][j]=0;
      show.userPreBoard5[i][j]=0;
      show.userPreBoard6[i][j]=0;
      show.userPreBoard7[i][j]=0;

      show.aiPreBoard1[i][j]=0;
      show.aiPreBoard2[i][j]=0;
      show.aiPreBoard3[i][j]=0;
      show.aiPreBoard4[i][j]=0;
      show.aiPreBoard5[i][j]=0;
      show.aiPreBoard6[i][j]=0;
      show.aiPreBoard7[i][j]=0;
    }

⌨️ 快捷键说明

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