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

📄 mainframe.java

📁 一款java图形界面的游戏
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
    //显示方块方法
    public void show(){
      for(int i=0;i<4;i++)
      {
        playBlocks[rows[i]][cols[i]].setBackground(color);
        playBlocks[rows[i]][cols[i]].setVisible(true);
      }

    }
    //方块下落到底部
    public void downToBottom(){

      while(!isToBottom)
        downOneLine();


    }
    //方块下落一行
    public void downOneLine(){
      //循环处理各个小方块
      for(int i=0;i<4;i++)
      {
        //如果方块达到底部,则设置底部标志
        if(rows[i]>=19)
        {
          isToBottom=true;
          break;
        }
        //如果方块下面有其他方块,则设置底部标志
        if(flagBlocks[rows[i]+1][cols[i]]!=0)
        {
          isToBottom=true;
          //如果到底底部并且上部无法在放置其他方块,则设置顶部标志
          if(rows[i]<=2)
            {
              isToTop = true;

            }
          break;
        }
      }
      //如果到顶部,则游戏结束
      if(isToTop)
      {
        JOptionPane.showMessageDialog(jPanel1, "游戏结束!!!");
        return;
      }
      //如果到达底部
      if(isToBottom)
      {
        //更新游戏区方块标志
        for (int j = 0; j < 4; j++)
          flagBlocks[rows[j]][cols[j]] = 1;
        //积分
        score+=5;
        //消除所有能够消除的行
        for(int i=0;i<20;i++)
        {
            boolean isClear=true;
            //判断能够消除当前行
            for(int j=0;j<10;j++)
            {
               if(flagBlocks[i][j]==0)
               {
                 isClear = false;
                 break;
               }
            }
            //消除当前行,并更新记分
            if(isClear)
            {
              for(int j=i;j>0;j--)
                for(int k=0;k<10;k++)
                {
                  flagBlocks[j][k] = flagBlocks[j - 1][k];
                  playBlocks[j][k].setBackground(playBlocks[j-1][k].getBackground());
                  if(flagBlocks[j][k]!=0)
                    playBlocks[j][k].setVisible(true);
                  else
                    playBlocks[j][k].setVisible(false);
                }
              score+=20;
              totalLines++;
              currentLines++;
              if(currentLines>=20&&level<=10)
              {
                currentLines=0;
                level++;
                speed-=50;
                jLabel4.setText(Integer.toString(level));
              }
            }
        }
        //更新记分显示
        jLabel2.setText(Long.toString(score));
        jLabel6.setText(Integer.toString(totalLines));
        return;
      }
      //清除当前方块
      clear();
      //下移方块
      for(int i=0;i<4;i++)
      {
        rows[i]++;
      }
      //重新显示方块
      show();

    }
    //方块左移
    public void left(){
      for(int i=0;i<4;i++)
      {//如果方块已经达到左边界,则返回
        if(cols[i]<=0)
          return;
        //如果方块左边有其他方块,则返回
        if(flagBlocks[rows[i]][cols[i]-1]!=0)
          return;
      }
      //清空方块显示
      clear();
      //方块左移一列
      for(int i=0;i<4;i++)
      {
        cols[i]--;
      }
      //重新显示方块
      show();

    }
    //方块右移
    public void right(){
      for(int i=0;i<4;i++)
      {
        if(cols[i]>=9)
          return;
        if(flagBlocks[rows[i]][cols[i]+1]!=0)
          return;
      }

      clear();
      for(int i=0;i<4;i++)
      {
        cols[i]++;
      }
      show();

    }

  }
  //类型1方块
  class BlockOne extends Block{

   public BlockOne() {
     rows[0] = 1;
     rows[1] = 1;
     rows[2] = 2;
     rows[3] = 2;
     cols[0] = 4;
     cols[1] = 5;
     cols[2] = 5;
     cols[3] = 6;
     color = Color.GREEN;
   }

   public void turn() {

     //根据当前方块状态,设置翻转后的状态
     switch(status){
       case 1:
         //清空方块
         clear();
         //设置方块位置
         rows[0]--;
         rows[2]--;
         cols[0]++;
         cols[2]--;
         cols[3]-=2;
         //更新状态
         status=2;
         //重新显示方块
         show();
         break;
       case 2:
         if(cols[0]>=9)
           break;
         if(flagBlocks[rows[0]][cols[0]+1]!=0)
           break;
         clear();
         rows[0]++;
         rows[2]++;
         cols[0]--;
         cols[2]++;
         cols[3]+=2;
         status=1;
         show();
         break;
     }
   }
  }
  //类型2方块
  class BlockTwo extends Block{

   public BlockTwo() {
     rows[0] = 1;
     rows[1] = 1;
     rows[2] = 2;
     rows[3] = 2;
     cols[0] = 6;
     cols[1] = 5;
     cols[2] = 5;
     cols[3] = 4;
     color = Color.blue;
   }

   public void turn() {


     switch(status){
       case 1:
         clear();
         rows[0]--;
         rows[2]--;
         cols[0]--;
         cols[2]++;
         cols[3]+=2;
         status=2;
         show();
         break;
       case 2:
         if(cols[0]<=0)
           break;
         if(flagBlocks[rows[0]][cols[0]-1]!=0)
           break;
         clear();
         rows[0]++;
         rows[2]++;
         cols[0]++;
         cols[2]--;
         cols[3]-=2;
         status=1;
         show();
         break;
     }
   }
  }
  //类型3方块
  class BlockThree extends Block{

   public BlockThree() {
     rows[0] = 1;
     rows[1] = 1;
     rows[2] = 2;
     rows[3] = 2;
     cols[0] = 4;
     cols[1] = 5;
     cols[2] = 4;
     cols[3] = 5;
     color = Color.cyan;
   }
   //类型4方块
   public void turn() {}
  }
  class BlockFour extends Block{

    public BlockFour() {
      rows[0] = 1;
      rows[1] = 1;
      rows[2] = 1;
      rows[3] = 2;
      cols[0] = 4;
      cols[1] = 5;
      cols[2] = 6;
      cols[3] = 6;
      color = Color.yellow;
    }

    public void turn() {

      switch(status){
        case 1:
          clear();
          rows[0]++;
          rows[2]--;
          rows[3]-=2;
          cols[0]++;
          cols[2]--;
          status=2;
          show();
          break;
        case 2:
          if(cols[0]<=0)
            break;
          if(flagBlocks[rows[0]][cols[0]-1]!=0)
           break;
          clear();
          rows[0]--;
          rows[2]++;
          cols[0]++;
          cols[2]--;
          cols[3]-=2;
          status=3;
          show();
          break;
        case 3:
          clear();
          rows[0]--;
          rows[2]++;
          rows[3]+=2;
          cols[0]--;
          cols[2]++;
          status=4;
          show();
          break;
        case 4:
          if(cols[0]>=9)
            break;
          if(flagBlocks[rows[0]][cols[0]+1]!=0)
           break;
          clear();
          rows[0]++;
          rows[2]--;
          cols[0]--;
          cols[2]++;
          cols[3]+=2;
          status=1;
          show();
          break;

      }
    }
   }
   //类型5方块
   class BlockFive extends Block{

     public BlockFive() {
       rows[0] = 1;
       rows[1] = 1;
       rows[2] = 1;
       rows[3] = 2;
       cols[0] = 6;
       cols[1] = 5;
       cols[2] = 4;
       cols[3] = 4;
       color = Color.magenta;
     }

     public void turn() {

       switch(status){
         case 1:
           clear();
           rows[0]--;
           rows[2]++;
           cols[0]--;
           cols[2]++;
           cols[3]+=2;
           status=2;
           show();
           break;
         case 2:
           if(cols[0]<=0)
             break;
           if(flagBlocks[rows[0]][cols[0]-1]!=0)
             break;
           clear();
           rows[0]++;
           rows[2]--;
           rows[3]-=2;
           cols[0]--;
           cols[2]++;

           status=3;
           show();
           break;
         case 3:
           clear();
           rows[0]++;
           rows[2]--;

           cols[0]++;
           cols[2]--;
           cols[3]-=2;
           status=4;
           show();
           break;
         case 4:
           if(cols[0]>=9)
             break;
           if(flagBlocks[rows[0]][cols[0]+1]!=0)
             break;
           clear();
           rows[0]--;
           rows[2]++;
           rows[3]+=2;
           cols[0]++;
           cols[2]--;
           status=1;
           show();
           break;

       }
     }
    }
    //类型6方块
    class BlockSix extends Block{

      public BlockSix() {
        rows[0] = 1;
        rows[1] = 1;
        rows[2] = 1;
        rows[3] = 2;
        cols[0] = 4;
        cols[1] = 5;
        cols[2] = 6;
        cols[3] = 5;
        color = Color.darkGray;
      }

      public void turn() {

        switch(status){
          case 1:
            clear();
            rows[0]++;
            rows[2]--;
            rows[3]--;
            cols[0]++;
            cols[2]--;
            cols[3]++;
            status=2;
            show();
            break;
          case 2:
            if(cols[0]<=0)

⌨️ 快捷键说明

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