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

📄 tetrics.java~3~

📁 俄罗斯方块游戏,大学时写的,支持单机及点对点网络对战!同时我还在里面加入了使用技能的功能!不过有一个缺点,呵呵好象代码写的不够严谨,所以现在性能很低,我一直也没有优化它!
💻 JAVA~3~
📖 第 1 页 / 共 2 页
字号:
            mvalue+=nextPiece.m_prePiece[i].m_nPieceValue;
        }

        m_bGameInPlay=moveSquares(old,m_curPiece);//若方块可移动则游戏可进行
        if(!m_bGameInPlay && m_tFrame.m_nNetStatus!=Frame1.NOCONNECT)m_tFrame.sendStr("GameOver:"+sScore.m_nTheScore);
        else if(!m_bGameInPlay && m_tFrame!=null)m_tFrame.ScoreReport(m_tFrame.jLabel8.getText(),sScore.m_nTheScore);
   }
   //去掉可以消去的行
   private void removelines()
   {
        outerlabel://标识
        for(int j=0;j<m_nRows;j++)//判断游戏区内方块状态
        {
                for(int i=0;i<m_nCols;i++)//判断列
                  if(oGameArea.m_nField[i][j]==0)
                      continue outerlabel;//返回标识并继续
                  //消行
                for(int k=j;k<m_nRows-1;k++)
                    for(int i=0;i<m_nCols;i++)
                      oGameArea.m_nField[i][k] = oGameArea.m_nField[i][k + 1]; //将游戏第k+1行状态赋给第k行

                  sScore.m_nTheScore +=mvalue; //分数增加
                  m_nOldScore += mvalue; //累加分数增加

            j-=1;//下移一行
            m_sound.remov_voice();
      }
   }

   //键盘响应
   public boolean keyDown(Event evt,int nKey)
   {//判断游戏是否在游戏区及游戏是否暂停
   if(!m_bGameInPlay)return true;
   if(m_bPaused)return true;
   //按键响应
   switch(nKey){
        case 'p'://暂停键
        case KeyEvent.VK_P:
          this.pause();
          m_repaint();
          break;
        case 'q'://游戏结束
      case KeyEvent.VK_Q:
        this.stop();
        m_repaint();
        break;


        case 'z'://技能
        case KeyEvent.VK_Z:
        m_tFrame.sendStr("addRandomLine");
        m_repaint();
        break;

         case 'x'://技能
         case KeyEvent.VK_X:
             m_tFrame.sendStr("addRandomBox");
             m_repaint();
             break;

         case 'c'://技能
         case KeyEvent.VK_C:
           m_tFrame.sendStr("addRandomLine");
           m_tFrame.sendStr("addRandomBox");
           m_repaint();
           break;

        case 'a':
        case Event.LEFT	://‘a ’键或左键
            moveCurPiece(-1,0,false);//方块左移1单位
            nextPiece.m_bNeedNewPiece=false;//不需生成新方块
          m_repaint();

            break;//跳出本次操作

        case 'd':
        case Event.RIGHT://‘d’键或右键
            moveCurPiece(1,0,false);//方块右移1单位
            nextPiece.m_bNeedNewPiece=false;
          m_repaint();
            break;//跳出本次操作

        case 'w':
        case Event.UP://‘w’键或上键
            moveCurPiece(0,0,true);//方块不动
           m_repaint();
           m_sound.remot_voice();
            break;//跳出本次操作

        case 's':
        case Event.DOWN://‘s’键或下键
            while(moveCurPiece(0,-1,false));//方块持续下移
            m_repaint();
            m_sound.down_voice();
            break;//跳出本次操作

       }
       return true;
   }

  //结束游戏
   public synchronized void stop()
   {  b=-1;//游戏结束状态
        if(m_theThread!=null)
                m_theThread.stop();//线程停止

       /*    try{
              for(int i=0;i<m_nCols;i++){//绘制游戏结实画面
                for (int j = 0; j < m_nRows; j++) {

                  if (i == 1) {
                    if (j >= 2 && j <= 4) {
                      oGameArea.m_nField[i][j] = 2; //当前游戏区全部为方块
                      oGameArea.m_nOldField[i][j] = 0; //当前游戏区无方块
                    }
                    else {
                      oGameArea.m_nField[i][j] = 0; //当前游戏区无方块
                      oGameArea.m_nOldField[i][j] = -1; //当前游戏区全部为方块
                    }
                  }
                  else if (i == 2) {
                    if (j == 3) {
                      oGameArea.m_nField[i][j] = 2; //当前游戏区有方块
                      oGameArea.m_nOldField[i][j] = 0; //当前游戏区无方块
                    }
                    else {
                      oGameArea.m_nField[i][j] = 0; //当前游戏区无方块
                      oGameArea.m_nOldField[i][j] = -1; //上一页游戏区全部为方块
                    }
                  }
                  else if (i == 3) {
                    if ( (j >= 2 && j <= 4) || j == 8 || j == 11 || j == 14 || j == 17) {
                      oGameArea.m_nField[i][j] = 2; //当前游戏区全部为方块
                      oGameArea.m_nOldField[i][j] = 0; //当前游戏区无方块
                    }
                    else {
                      oGameArea.m_nField[i][j] = 0; //当前游戏区无方块
                      oGameArea.m_nOldField[i][j] = -1; //上一页游戏区全部为方块
                    }
                  }
                  else if (i == 4) {
                    if (j == 9 || j == 10 || j == 15 || j == 16) {
                      oGameArea.m_nField[i][j] = 2; //当前游戏区全部为方块
                      oGameArea.m_nOldField[i][j] = 0; //当前游戏区无方块
                    }
                    else {
                      oGameArea.m_nField[i][j] = 0; //当前游戏区无方块
                      oGameArea.m_nOldField[i][j] = -1; //上一页游戏区全部为方块
                    }

                  }
                  else if (i == 5) {
                    if (j == 9 || j == 10 || j == 15 || j == 16) {
                      oGameArea.m_nField[i][j] = 2; //当前游戏区全部为方块
                      oGameArea.m_nOldField[i][j] = 0; //上一页游戏区无方块
                    }
                    else {
                      oGameArea.m_nField[i][j] = 0; //当前游戏区无方块
                      oGameArea.m_nOldField[i][j] = -1; //上一页游戏区全部为方块
                    }

                  }
                  else if (i == 6) {
                    if ( (j == 2 || j == 4) || j == 8 || j == 11 || j == 14 || j == 17) {
                      oGameArea.m_nField[i][j] = 2; //当前游戏区全部为方块
                      oGameArea.m_nOldField[i][j] = 0; //上一页游戏区无方块
                    }
                    else {
                      oGameArea.m_nField[i][j] = 0; //当前游戏区无方块
                      oGameArea.m_nOldField[i][j] = -1; //上一页游戏区全部为方块
                    }

                  }
                  else if (i == 7) {
                    if (j >= 2 && j <= 4) {
                      oGameArea.m_nField[i][j] = 2; //当前游戏区全部为方块
                      oGameArea.m_nOldField[i][j] = 0; //上一页游戏区无方块
                    }
                    else {
                      oGameArea.m_nField[i][j] = 0; //当前游戏区无方块
                      oGameArea.m_nOldField[i][j] = -1; //上一页游戏区全部为方块
                    }

                  }
                  else if (i == 8) {
                    if (j == 4) {
                      oGameArea.m_nField[i][j] = 2; //当前游戏区全部为方块
                      oGameArea.m_nOldField[i][j] = 0; //上一页游戏区无方块
                    }
                    else {
                      oGameArea.m_nField[i][j] = 0; //当前游戏区无方块
                      oGameArea.m_nOldField[i][j] = -1; //上一页游戏区全部为方块
                    }

                  }
                  else {
                    oGameArea.m_nField[i][j] = 0; //当前游戏区无方块
                    oGameArea.m_nOldField[i][j] = -1; //上一页游戏区全部为方块
                  }
              m_repaint();
                }
              }
              }
                catch(ArrayIndexOutOfBoundsException a){}*/

             m_theThread=null;//清空线程
   }

//暂停游戏
   public synchronized void pause()
   { b=1;//游戏暂停状态
        if(m_theThread!=null)
        {
            try
            {
                m_theThread.suspend();//暂停线程
                m_bPaused=true;//m_bPaused赋真值
            }
            catch(Exception e){e.printStackTrace();}
        }

   }

//设置游戏难度
   public void setPlayLevel(int nLevel)
   {
        sScore.m_nPlayLevel=nLevel;//将传来的参数设为难度
        System.out.println("m_nPlayLevel="+sScore.m_nPlayLevel);//在cmd窗口中输出"m_nPlayLevel=难度"
       if(m_tFrame.m_nNetStatus!=Frame1.NOCONNECT)
       m_tFrame.sendStr("Level:"+nLevel);
     //  m_tFrame.sendStr("Talk:"+"你的对手将难度设置为:"+nLevel);
    // m_repaint();
   }

//得到游戏难度
   public int getPlayLevel()
   {
        return sScore.m_nPlayLevel;//返回游戏难度值
   }

//添加随机行
  public synchronized void addRandomLine()
   {
        int nRandom[]=new int[m_nCols];//定义整形数组,存放随机生成的方块
        //布尔变量表示是否有方块
        boolean bAllZero=true;
        boolean bNoZero=true;
        //循环判断本行方块状态
        for(int i=0;i<m_nCols;i++)
        {
            nRandom[i]=(int)(7*Math.random());//随机生成一个数组存放新生成方块
            if(nRandom[i]!=0)bAllZero=false;//若本行内有无快则bAllZero为假
            else bNoZero=false;//若本行内都为方块则bNoZero为假
        }
        if(bAllZero)
        {//如无方块
            nRandom[(int)(m_nCols*Math.random())]=(int)(Math.random()*6+1);//在此行内随机选择一列,将其变为方块
        }
        else if(bNoZero)
        {//如都为方块
            nRandom[(int)(m_nCols*Math.random())]=0;//在此行内随机选择一列,将其变为无方块
        }
        //绘制随机产生的方块
        for(int nCol=0;nCol<m_nCols;nCol++)
            for(int nRow=m_nRows+3;nRow>0;nRow--)//
            {
                oGameArea.m_nField[nCol][nRow]=oGameArea.m_nField[nCol][nRow-1];//将原游戏区底0-22行游戏画面赋给新游戏画面的第1-23行
            }
        for(int nCol=0;nCol<m_nCols;nCol++)oGameArea. m_nField[nCol][0]=nRandom[nCol];//将随机产生的方块加入游戏区第0行
        for(int i=0;i<4;i++)
        {
            m_curPiece[i].m_nRow++;//游戏区内正在下落方块上移1行
        }
   }

   //添加随机方块
  public synchronized void addRandomBox(){
    //随机产生1到5个方块
       int r = (int) (5 * Math.random()+1);
       int nRandom[]= new int[r]; //定义整形数组,存放随机生成的方块
       //随机选择一组行和列
       int m_cols[]=new int[r];
       int m_rows[]=new int[r];
       for(int i=0;i<r;i++){
        nRandom[i]=(int) (6 * Math.random()+1);
        m_cols[i]=(int) (10 * Math.random());
        m_rows[i]=(int) (14 * Math.random());
       }
       //将随机产生的方块赋给游戏区域
              for(int k=0;k<r;k++){
            oGameArea.m_nField[m_cols[k]][m_rows[k]]=nRandom[k];
            }
   }
}

⌨️ 快捷键说明

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