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

📄 tetrics.java~2~

📁 俄罗斯方块游戏,大学时写的,支持单机及点对点网络对战!同时我还在里面加入了使用技能的功能!不过有一个缺点,呵呵好象代码写的不够严谨,所以现在性能很低,我一直也没有优化它!
💻 JAVA~2~
📖 第 1 页 / 共 2 页
字号:
   private void removelines()
   {
        outerlabel://标识
        for(int j=0;j<m_nRows;j++)//判断游戏区内方块状态
        {
                for(int i=0;i<m_nCols;i++)//判断列
                  if(m_nField[i][j]==0)
                      continue outerlabel;//返回标识并继续
                  //消行
                for(int k=j;k<m_nRows-1;k++)
                    for(int i=0;i<m_nCols;i++)
                      m_nField[i][k] = m_nField[i][k + 1]; //将游戏第k+1行状态赋给第k行

                  m_nTheScore += m_nPieceValue; //分数增加
                  m_nOldScore += m_nPieceValue; //累加分数增加

            j-=1;//下移一行
          /*  try{
              String cx="../";
              url=new URL("file://cx:/YY方块/music/xiaohang.wav");
              audioClip=java.applet.Applet.newAudioClip(url);
              audioClip.play();
           }
           catch(Exception error)
             {error.printStackTrace();}*/

      }
   }

   //键盘响应
   public boolean keyDown(Event evt,int nKey)
   {//判断游戏是否在游戏区及游戏是否暂停
   if(!m_bGameInPlay)return true;
   if(m_bPaused)return true;
   //按键响应
   switch(nKey){
        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();

           /* try{
              String cx="../";
              url=new URL("file://cx:/YY方块/music/bianxing.wav");
              audioClip=java.applet.Applet.newAudioClip(url);
              audioClip.play();
             }
          catch(Exception error)
          {error.printStackTrace();}*/

            break;//跳出本次操作

        case 's':
        case Event.DOWN://‘s’键或下键
            while(moveCurPiece(0,-1,false));//方块持续下移
        m_repaint();
       /*     try{
              String cx="../";
              url=new URL("file://cx:/YY方块/music/xialou.wav");
              audioClip=java.applet.Applet.newAudioClip(url);
              audioClip.play();
            }
        catch(Exception error)
        {error.printStackTrace();}*/

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

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

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

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

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

                  }
                  else {
                    m_nField[i][j] = 0; //当前游戏区无方块
                    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)
   {
        m_nPlayLevel=nLevel;//将传来的参数设为难度
        System.out.println("m_nPlayLevel="+m_nPlayLevel);//在cmd窗口中输出"m_nPlayLevel=难度"

        Graphics g=getGraphics();//得到游戏画面
               g.setFont(new Font("宋体",0,18));//设置游戏标识区字体
        //设置标识区坐标
           int gx=m_nSqLength;
          int gy=m_nSqLength*m_nRows/4+30;
          //绘制更新的标识区
        g.clearRect(gx,gy-25,XOFFSET-gx,25);
            g.drawString("等级:"+m_nPlayLevel,gx,gy);

   }

//得到游戏难度
   public int getPlayLevel()
   {
        return 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--)//
            {
                m_nField[nCol][nRow]=m_nField[nCol][nRow-1];//将原游戏区底0-22行游戏画面赋给新游戏画面的第1-23行
            }
        for(int nCol=0;nCol<m_nCols;nCol++)m_nField[nCol][0]=nRandom[nCol];//将随机产生的方块加入游戏区第0行
        for(int i=0;i<4;i++)
        {
            m_curPiece[i].m_nRow++;//游戏区内正在下落方块上移1行
        }
   }
}

⌨️ 快捷键说明

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