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

📄 frame1.java

📁 java 五子棋 v2.1 Java源码。
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
        else if(maxNumber==2){ //到达2子共线
          if(k+3<max&&preBoard[k+1][j]==0&&preBoard[k+2][j]==n&&preBoard[k+3][j]==n){ //是否为2-2棋型
            label[2]++;
          }
          if((k-4>=min&&k+1<max&&preBoard[k-2][j]==0&&preBoard[k-3][j]==n&&preBoard[k-4][j]==0&&preBoard[k+1][j]==0)
             ||(k-2>=min&&k+3<max&&preBoard[k-2][j]==0&&preBoard[k+1][j]==0&&preBoard[k+2][j]==n&&preBoard[k+3][j]==0)){ //是否为-1-2-棋型或-2-1-棋型
            label[3]++;
          }
          if((k+3<max&&preBoard[k+1][j]==0&&preBoard[k+2][j]==n&&preBoard[k+3][j]==0)
             ||(k-4>=min&&preBoard[k-4][j]==0&&preBoard[k-3][j]==n&&preBoard[k-2][j]==0)){ //是否为2-1-棋型或-1-2棋型
            label[4]++;
          }
          if((k+3<max&&preBoard[k+1][j]==0&&preBoard[k+2][j]==0&&preBoard[k+3][j]==n)
             ||(k-4>=min&&preBoard[k-4][j]==n&&preBoard[k-3][j]==0&&preBoard[k-2][j]==0)){ //是否为2--1棋型或1--2棋型
            label[4]++;
          }
          if((k-2>=min&&k+2<max&&preBoard[k-2][j]==0&&preBoard[k+1][j]==0&&preBoard[k+2][j]==n)
             ||(k-3>=min&&k+1<max&&preBoard[k-3][j]==n&&preBoard[k-2][j]==0&&preBoard[k+1][j]==0)){ //是否为-2-1棋型或1-2-棋型
            label[4]++;
          }
          if((k-3>=min&&k+1<max&&preBoard[k-3][j]==0&&preBoard[k-2][j]==0&&preBoard[k+1][j]==0)
             ||(k-2>=min&&k+2<max&&preBoard[k-2][j]==0&&preBoard[k+1][j]==0&&preBoard[k+2][j]==0)){ //是否为--2-棋型或-2--棋型
            label[5]++;
          }
          if((k-4>=min&&preBoard[k-4][j]==0&&preBoard[k-3][j]==0&&preBoard[k-2][j]==0)
             ||(k+3<max&&preBoard[k+1][j]==0&&preBoard[k+2][j]==0&&preBoard[k+3][j]==0)){ //是否为---2棋型或2---棋型
            label[6]++;
          }
        }
        else if(maxNumber==3){ //到达3子共线
          if((k-4>=min&&preBoard[k-3][j]==0&&preBoard[k-4][j]==n)
             ||(k+2<max&&preBoard[k+1][j]==0&&preBoard[k+2][j]==n)){ //是否为1-3棋型或3-1棋型
            label[2]++;
          }
          if((k-4>=min&&k+1<max&&preBoard[k-4][j]==0&&preBoard[k-3][j]==0&&preBoard[k+1][j]==0)
             ||(k-3>=min&&k+2<max&&preBoard[k-3][j]==0&&preBoard[k+1][j]==0&&preBoard[k+2][j]==0)){ //是否为--3-棋型或-3--棋型
            label[3]++;
          }
          if((k-4>=min&&preBoard[k-4][j]==0&&preBoard[k-3][j]==0)
             ||(k+2<max&&preBoard[k+1][j]==0&&preBoard[k+2][j]==0)){ //是否为--3棋型或3--棋型
            label[4]++;
          }
          if(k-3>=min&&k+1<max&&preBoard[k-3][j]==0&&preBoard[k+1][j]==0){ //是否为-3-棋型
            label[4]++;
          }
        }
        else if(maxNumber==4){ //到达4子共线
          if(k-4>=min&&k+1<size&&preBoard[k-4][j]==0&&preBoard[k+1][j]==0){ //是否为-4-棋型
            label[1]++;
          }
          if((k-4>=min&&preBoard[k-4][j]==0)||(k+1<max&&preBoard[k+1][j]==0)){ //是否为-4棋型或4-棋型
            label[2]++;
          }
        }
        else if(maxNumber>=5){ //到达5子共线
          label[0]++;
        }
      }
      //恢复数据
      maxNumber=0;
      for(int k=0; k<7; k++){
        if(label[k]>0){
          result[k]++;
          label[k]=0;
        }
      }

      //检查左斜线
      for(int k=4; k>=0; k--){
        if(i-k>=0&&j-k>=0){
          min=k;
          break;
        }
      }
      for(int k=4; k>=0; k--){
        if(i+k<size&&j+k<size){
          max=k+1;
          break;
        }
      }
      for(int k=-min; k<max; k++){
        if(preBoard[i+k][j+k]==n){ //棋子计数
          maxNumber++;
        }
        else{
          maxNumber=0;
        }

        if(maxNumber==1){ //到达1子共线
          if(i+k+4<i+max&&j+k+4<j+max&&preBoard[i+k+1][j+k+1]==0&&preBoard[i+k+2][j+k+2]==n&&preBoard[i+k+3][j+k+3]==0&&preBoard[i+k+4][j+k+4]==n){ //是否为1-1-1棋型
            label[4]++;
          }
          if(i+k-1>=i-min&&j+k-1>=j-min&&i+k+3<i+max&&j+k+3<j+max&&preBoard[i+k-1][j+k-1]==0&&preBoard[i+k+1][j+k+1]==0&&preBoard[i+k+2][j+k+2]==n&&preBoard[i+k+3][j+k+3]==0){ //是否为-1-1-棋型
            label[6]++;
          }
          if((i+k-1>=i-min&&j+k-1>=j-min&&i+k+3<i+max&&j+k+3<j+max&&preBoard[i+k-1][j+k-1]==0&&preBoard[i+k+1][j+k+1]==0&&preBoard[i+k+2][j+k+2]==0&&preBoard[i+k+3][j+k+3]==n)
             ||(i+k+4<i+max&&j+k+4<j+max&&preBoard[i+k+1][j+k+1]==0&&preBoard[i+k+2][j+k+2]==0&&preBoard[i+k+3][j+k+3]==n&&preBoard[i+k+4][j+k+4]==0)){ //是否为-1--1棋型或1--1-棋型
            label[6]++;
          }
          if((i+k+4<i+max&&j+k+4<j+max&&preBoard[i+k+1][j+k+1]==0&&preBoard[i+k+2][j+k+2]==n&&preBoard[i+k+3][j+k+3]==0&&preBoard[i+k+4][j+k+4]==0)
             ||(i+k-2>=i-min&&j+k-2>=j-min&&i+k+2<i+max&&j+k+2<j+max&&preBoard[i+k-2][j+k-2]==0&&preBoard[i+k-1][j+k-1]==0&&preBoard[i+k+1][j+k+1]==0&&preBoard[i+k+2][j+k+2]==n)){ //是否为1-1--棋型或--1-1棋型
            label[6]++;
          }
          if(i+k+4<i+max&&j+k+4<j+max&&preBoard[i+k+1][j+k+1]==0&&preBoard[i+k+2][j+k+2]==0&&preBoard[i+k+3][j+k+3]==0&&preBoard[i+k+4][j+k+4]==n){ //是否为1---1棋型
            label[6]++;
          }
        }
        else if(maxNumber==2){ //到达2子共线
          if(i+k+3<i+max&&j+k+3<j+max&&preBoard[i+k+1][j+k+1]==0&&preBoard[i+k+2][j+k+2]==n&&preBoard[i+k+3][j+k+3]==n){ //是否为2-2棋型
            label[2]++;
          }
          if((i+k-4>=i-min&&j+k-4>=j-min&&i+k+1<i+max&&j+k+1<j+max&&preBoard[i+k-4][j+k-4]==0&&preBoard[i+k-3][j+k-3]==n&&preBoard[i+k-2][j+k-2]==0&&preBoard[i+k+1][j+k+1]==0)
             ||(i+k-2>=i-min&&j+k-2>=j-min&&i+k+3<i+max&&j+k+3<j+max&&preBoard[i+k-2][j+k-2]==0&&preBoard[i+k+2][j+k+2]==n&&preBoard[i+k+3][j+k+3]==0&&preBoard[i+k+1][j+k+1]==0)){ //是否为-1-2-棋型或-2-1-棋型
            label[3]++;
          }
          if((i+k+3<i+max&&j+k+3<j+max&&preBoard[i+k+1][j+k+1]==0&&preBoard[i+k+2][j+k+2]==n&&preBoard[i+k+3][j+k+3]==0)
             ||(i+k-4>=i-min&&j+k-4>=j-min&&preBoard[i+k-4][j+k-4]==0&&preBoard[i+k-3][j+k-3]==n&&preBoard[i+k-2][j+k-2]==0)){ //是否为2-1-棋型或-1-2棋型
            label[4]++;
          }
          if((i+k+3<i+max&&j+k+3<j+max&&preBoard[i+k+1][j+k+1]==0&&preBoard[i+k+2][j+k+2]==0&&preBoard[i+k+3][j+k+3]==n)
             ||(i+k-4>=i-min&&j+k-4>=j-min&&preBoard[i+k-4][j+k-4]==n&&preBoard[i+k-3][j+k-3]==0&&preBoard[i+k-2][j+k-2]==0)){ //是否为2--1棋型或1--2棋型
            label[4]++;
          }
          if((i+k-2>=i-min&&j+k-2>=j-min&&i+k+2<i+max&&j+k+2<j+max&&preBoard[i+k-2][j+k-2]==0&&preBoard[i+k+1][j+k+1]==0&&preBoard[i+k+2][j+k+2]==n)
             ||(i+k-3>=i-min&&j+k-3>=j-min&&i+k+1<i+max&&j+k+1<j+max&&preBoard[i+k-3][j+k-3]==n&&preBoard[i+k-2][j+k-2]==0&&preBoard[i+k+1][j+k+1]==0)){ //是否为-2-1棋型或1-2-棋型
            label[4]++;
          }
          if((i+k-3>=i-min&&j+k-3>=j-min&&i+k+1<i+max&&j+k+1<j+max&&preBoard[i+k-3][j+k-3]==0&&preBoard[i+k-2][j+k-2]==0&&preBoard[i+k+1][j+k+1]==0)
             ||(i+k-2>=i-min&&j+k-2>=j-min&&i+k+2<i+max&&j+k+2<j+max&&preBoard[i+k-2][j+k-2]==0&&preBoard[i+k+1][j+k+1]==0&&preBoard[i+k+2][j+k+2]==0)){ //是否为--2-棋型或-2--棋型
            label[5]++;
          }
          if((i+k-4>=i-min&&j+k-4>=j-min&&preBoard[i+k-4][j+k-4]==0&&preBoard[i+k-3][j+k-3]==0&&preBoard[i+k-2][j+k-2]==0)
             ||(i+k+3<i+max&&j+k+3<j+max&&preBoard[i+k+1][j+k+1]==0&&preBoard[i+k+2][j+k+2]==0&&preBoard[i+k+3][j+k+3]==0)){ //是否为---2棋型或2---棋型
            label[6]++;
          }
        }
        else if(maxNumber==3){ //到达3子共线
          if((i+k-4>=i-min&&j+k-4>=j-min&&preBoard[i+k-3][j+k-3]==0&&preBoard[i+k-4][j+k-4]==n)
             ||(i+k+2<i+max&&j+k+2<j+max&&preBoard[i+k+1][j+k+1]==0&&preBoard[i+k+2][j+k+2]==n)){ //是否为1-3棋型或3-1棋型
            label[2]++;
          }
          if((i+k-4>=i-min&&j+k-4>=j-min&&i+k+1<i+max&&j+k+1<j+max&&preBoard[i+k-4][j+k-4]==0&&preBoard[i+k-3][j+k-3]==0&&preBoard[i+k+1][j+k+1]==0)
             ||(i+k-3>=i-min&&j+k-3>=j-min&&i+k+2<i+max&&j+k+2<j+max&&preBoard[i+k-3][j+k-3]==0&&preBoard[i+k+1][j+k+1]==0&&preBoard[i+k+2][j+k+2]==0)){ //是否为--3-棋型或-3--棋型
            label[3]++;
          }
          if((i+k-4>=i-min&&j+k-4>=j-min&&preBoard[i+k-4][j+k-4]==0&&preBoard[i+k-3][j+k-3]==0)
             ||(i+k+2<i+max&&j+k+2<j+max&&preBoard[i+k+1][j+k+1]==0&&preBoard[i+k+2][j+k+2]==0)){ //是否为--3棋型或3--棋型
            label[4]++;
          }
          if(i+k-3>=i-min&&j+k-3>=j-min&&i+k+1<i+max&&j+k+1<j+max&&preBoard[i+k-3][j+k-3]==0&&preBoard[i+k+1][j+k+1]==0){ //是否为-3-棋型
            label[4]++;
          }
        }
        else if(maxNumber==4){ //到达4子共线
          if(i+k-4>=i-min&&j+k-4>=j-min&&i+k+1<i+max&&j+k+1<j+max&&preBoard[i+k-4][j+k-4]==0&&preBoard[i+k+1][j+k+1]==0){ //是否为-4-棋型
            label[1]++;
          }
          if((i+k-4>=i-min&&j+k-4>=j-min&&preBoard[i+k-4][j+k-4]==0)||(i+k+1<i+max&&j+k+1<j+max&&preBoard[i+k+1][j+k+1]==0)){ //是否为-4棋型或4-棋型
            label[2]++;
          }
        }
        else if(maxNumber>=5){ //到达5子共线
          label[0]++;
        }
      }
      //恢复数据
      maxNumber=0;
      for(int k=0; k<7; k++){
        if(label[k]>0){
          result[k]++;
          label[k]=0;
        }
      }

      //检查右斜线
      for(int k=4; k>=0; k--){
        if(i-k>=0&&j+k<size){
          min=k;
          break;
        }
      }
      for(int k=4; k>=0; k--){
        if(i+k<size&&j-k>=0){
          max=k+1;
          break;
        }
      }
      for(int k=-min; k<max; k++){
        if(preBoard[i+k][j-k]==n){ //棋子计数
          maxNumber++;
        }
        else{
          maxNumber=0;
        }

        if(maxNumber==1){ //到达1子共线
          if(i+k+4<i+max&&j-k-4>=j-max+1&&preBoard[i+k+1][j-k-1]==0&&preBoard[i+k+2][j-k-2]==n&&preBoard[i+k+3][j-k-3]==0&&preBoard[i+k+4][j-k-4]==n){ //是否为1-1-1棋型
            label[4]++;
          }
          if(i+k-1>=i-min&&j-k-3>=j-max+1&&i+k+3<i+max&&j-k+1<j+min+1&&preBoard[i+k-1][j-k+1]==0&&preBoard[i+k+1][j-k-1]==0&&preBoard[i+k+2][j-k-2]==n&&preBoard[i+k+3][j-k-3]==0){ //是否为-1-1-棋型
            label[6]++;
          }
          if((i+k-1>=i-min&&j-k-3>=j-max+1&&i+k+1<i+max&&j-k+3<j+min+1&&preBoard[i+k-1][j-k+1]==0&&preBoard[i+k+1][j-k-1]==0&&preBoard[i+k+2][j-k-2]==0&&preBoard[i+k+3][j-k-3]==n)
             ||(i+k+4<i+max&&j-k-4>=j-max+1&&preBoard[i+k+1][j-k-1]==0&&preBoard[i+k+2][j-k-2]==0&&preBoard[i+k+3][j-k-3]==n&&preBoard[i+k+4][j-k-4]==0)){ //是否为-1--1棋型或1--1-棋型
            label[6]++;
          }
          if((i+k+4<i+max&&j-k-4>=j-max+1&&preBoard[i+k+1][j-k-1]==0&&preBoard[i+k+2][j-k-2]==n&&preBoard[i+k+3][j-k-3]==0&&preBoard[i+k+4][j-k-4]==0)
             ||(i+k-2>=i-min&&j-k-2>=j-max+1&&i+k+2<i+max&&j-k+2<j+min+1&&preBoard[i+k-2][j-k+2]==0&&preBoard[i+k-1][j-k+1]==0&&preBoard[i+k+1][j-k-1]==0&&preBoard[i+k+2][j-k-2]==n)){ //是否为1-1--棋型或--1-1棋型
            label[6]++;
          }
          if(i+k+4<i+max&&j-k-4>=j-max+1&&preBoard[i+k+1][j-k-1]==0&&preBoard[i+k+2][j-k-2]==0&&preBoard[i+k+3][j-k-3]==0&&preBoard[i+k+4][j-k-4]==n){ //是否为1---1棋型
            label[6]++;
          }
        }
        else if(maxNumber==2){ //到达2子共线
          if(i+k+3<i-min&&j-k-3>=j-max+1&&preBoard[i+k+1][j-k-1]==0&&preBoard[i+k+2][j-k-2]==n&&preBoard[i+k+3][j-k-3]==n){ //是否为2-2棋型
            label[2]++;
          }
          if((i+k-4>=i-min&&j-k+4<j+min+1&&i+k+1<i+max&&j-k-1>=j-max+1&&preBoard[i+k-2][j-k+2]==0&&preBoard[i+k-3][j-k+3]==n&&preBoard[i+k-4][j-k+4]==0&&preBoard[i+k+1][j-k-1]==0)
             ||(i+k-2>=i-min&&j-k-3>=j-max+1&&i+k+2<i+max&&j-k+2<j+min+1&&preBoard[i+k-2][j-k+2]==0&&preBoard[i+k+2][j-k-2]==n&&preBoard[i+k+3][j-k-3]==0&&preBoard[i+k+1][j-k-1]==0)){ //是否为-1-2-棋型或-2-1-棋型
            label[3]++;
          }
          if((i+k+3<i+max&&j-k-3>=j-max+1&&preBoard[i+k+1][j-k-1]==0&&preBoard[i+k+2][j-k-2]==n&&preBoard[i+k+3][j-k-3]==0)
             ||(i+k-4>=i-min&&j-k+4<j+min+1&&preBoard[i+k-4][j-k+4]==0&&preBoard[i+k-3][j-k+3]==n&&preBoard[i+k-2][j-k+2]==0)){ //是否为2-1-棋型或-1-2棋型
            label[4]++;
          }
          if((i+k+3<i+max&&j-k-3>=j-max+1&&preBoard[i+k+1][j-k-1]==0&&preBoard[i+k+2][j-k-2]==0&&preBoard[i+k+3][j-k-3]==n)
             ||(i+k-4>=i-min&&j-k+4<j+min+1&&preBoard[i+k-4][j-k+4]==n&&preBoard[i+k-3][j-k+3]==0&&preBoard[i+k-2][j-k+2]==0)){ //是否为2--1棋型或1--2棋型
            label[4]++;
          }
          if((i+k-2>=i-min&&j-k+2<j+min+1&&i+k+2<i+max&&j-k-2>=j-max+1&&preBoard[i+k-2][j-k+2]==0&&preBoard[i+k+1][j-k-1]==0&&preBoard[i+k+2][j-k-2]==n)
             ||(i+k-3>=i-min&&j-k+3<j+min+1&&i+k+1<i+max&&j-k-1>=j-max+1&&preBoard[i+k-3][j-k+3]==n&&preBoard[i+k-2][j-k+2]==0&&preBoard[i+k+1][j-k-1]==0)){ //是否为-2-1棋型或1-2-棋型
            label[4]++;
          }
          if((i+k-3>=i-min&&j-k+3<j+min+1&&preBoard[i+k-3][j-k+3]==0&&preBoard[i+k-2][j-k+2]==0&&preBoard[i+k-1][j-k+1]==0)
             ||(i+k-2>=i-min&&j-k-2>=j-max+1&&i+k+2<i+max&&j-k+2<j+min+1&&preBoard[i+k-2][j-k+2]==0&&preBoard[i+k+1][j-k-1]==0&&preBoard[i+k+2][j-k-2]==0)){ //是否为--2-棋型或-2--棋型
            label[5]++;
          }
          if((i+k-4>=i-min&&j-k+4<j+min+1&&preBoard[i+k-4][j-k+4]==0&&preBoard[i+k-3][j-k+3]==0&&preBoard[i+k-2][j-k+2]==0)
             ||(i+k+3<i+max&&j-k-3>=j-max+1&&preBoard[i+k+1][j-k-1]==0&&preBoard[i+k+2][j-k-2]==0&&preBoard[i+k+3][j-k-3]==0)){ //是否为---2棋型或2---棋型
            label[6]++;
          }
        }
        else if(maxNumber==3){ //到达3子共线
          if((i+k-4>=i-min&&j-k+4<j+min+1&&preBoard[i+k-3][j-k+3]==0&&preBoard[i+k-4][j-k+4]==n)
             ||(i+k+2<i+max&&j-k-2>=j-max+1&&preBoard[i+k+1][j-k-1]==0&&preBoard[i+k+2][j-k-2]==n)){ //是否为1-3棋型或3-1棋型
            label[2]++;
          }
          if((i+k-4>=i-min&&j-k-1>=j-max+1&&i+k+1<i+max&&j-k+4<j+min+1&&preBoard[i+k-4][j-k+4]==0&&preBoard[i+k-3][j-k+3]==0&&preBoard[i+k+1][j-k-1]==0)
             ||(i+k-3>=i-min&&j-k-2>=j-max+1&&i+k+2<i+max&&j-k+3<j+min+1&&preBoard[i+k-3][j-k+3]==0&&preBoard[i+k+1][j-k-1]==0&&preBoard[i+k+2][j-k-2]==0)){ //是否为--3-棋型或-3--棋型
            label[3]++;
          }
          if((i+k-4>=i-min&&j-k+4<j+min+1&&preBoard[i+k-4][j-k+4]==0&&preBoard[i+k-3][j-k+3]==0)
             ||(i+k+2<i+max&&j-k-2>=j-max+1&&preBoard[i+k+1][j-k-1]==0&&preBoard[i+k+2][j-k-2]==0)){ //是否为--3棋型或3--棋型
            label[4]++;
          }
          if(i+k-3>=i-min&&j-k-1>=j-max+1&&i+k+1<i+max&&j-k+3<j+min+1&&preBoard[i+k-3][j-k+3]==0&&preBoard[i+k+1][j-k-1]==0){ //是否为-3-棋型
            label[4]++;
          }
        }
        else if(maxNumber==4){ //到达4子共线
          if(i+k-4>=i-min&&j-k+4<j+min+1&&i+k+1<i+max&&j-k-1>=j-max+1&&preBoard[i+k-4][j-k+4]==0&&preBoard[i+k+1][j-k-1]==0){ //是否为-4-棋型
            label[1]++;
          }
          if((i+k-4>=i-min&&j-k+4<j+min+1&&preBoard[i+k-4][j-k+4]==0)||(i+k+1<i+max&&j-k-1>=j-max+1&&preBoard[i+k+1][j-k-1]==0)){ //是否为-4棋型或4-棋型
            label[2]++;
          }
        }
        else if(maxNumber>=5){ //到达5子共线
          label[0]++;
        }
      }
      //恢复数据
      maxNumber=0;
      for(int k=0; k<7; k++){
        if(label[k]>0){
          result[k]++;
          label[k]=0;
        }
      }

      return result;
    }

    /**
     * <p>Description: 直线扫描</p>
     * @return 游戏结束标记
     */
    public boolean checkLine(){
      int state=0; //当前状态
      int 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(i-1,size-5,i-1,size-1);
            }
            else{
              canvas.setLine(i,j-5,i,j-1);
            }
            return true;
          }
          if(board[i][j]==state&&state!=0){
            maxNumber++;
          }
          if(board[i][j]!=state){
            if(board[i][j]==0){
              maxNumber=0;
            }
            else{

⌨️ 快捷键说明

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