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

📄 chuangti.java~589~

📁 一个使用JB9编写的网络俄罗斯方块,大家可以下载如有不足还请原谅,有是可以给我EMAIL
💻 JAVA~589~
📖 第 1 页 / 共 3 页
字号:
          for(i = 0;i<4;i++)
            {
              yulan.SetIcon(m_prePiece[i].m_nColumn-3,m_prePiece[i].m_nRow-18,tukuai[m_prePiece[i].m_ntupian]);
            }
         break;
         case 2:
             //XX  green;
         m_nPieceValue=18;
                 /****
            X  X
         X  X
                  ****/
         m_prePiece[0]=new Kuai(middle,top-2,2);
         m_prePiece[1]=new Kuai(middle-1,top-1,2);
         m_prePiece[2]=new Kuai(middle,top-1,2);
         m_prePiece[3]=new Kuai(middle+1,top-2,2);
         for(i = 0;i<4;i++)
       {
         yulan.SetIcon(m_prePiece[i].m_nColumn-3,m_prePiece[i].m_nRow-18,tukuai[m_prePiece[i].m_ntupian]);

       }
         break;
         case 3:
            //XX  blue;
        m_nPieceValue=18;

                 /****
        X
        X  X  X
              *****/
         m_prePiece[0]=new  Kuai(middle,top-1,4);
         m_prePiece[1]=new  Kuai(middle+1,top-1,4);
         m_prePiece[2]=new  Kuai(middle-1,top-1,4);
         m_prePiece[3]=new  Kuai(middle-1,top-2,4);
         for(i = 0;i<4;i++)
     {
       yulan.SetIcon(m_prePiece[i].m_nColumn-3,m_prePiece[i].m_nRow-18,tukuai[m_prePiece[i].m_ntupian]);
     }
         break;
         case 4:
             //XX  light blue;
        m_nPieceValue=10;

                    /***
        X X
          X X
                   */
          m_prePiece[0]=new  Kuai(middle,top-2,7);
          m_prePiece[1]=new  Kuai(middle+1,top-1,7);
          m_prePiece[2]=new  Kuai(middle,top-1,7);
          m_prePiece[3]=new  Kuai(middle-1,top-2,7);
          for(i = 0;i<4;i++)
     {
       yulan.SetIcon(m_prePiece[i].m_nColumn-3,m_prePiece[i].m_nRow-18,tukuai[m_prePiece[i].m_ntupian]);
     }
         break;
         case 5:
             //XXX  purle;
        m_nPieceValue=12;
                   /****
        X  X
        X  X
         */
        m_prePiece[0]=new  Kuai(middle-1,top-1,3);
        m_prePiece[1]=new  Kuai(middle,top-1,3);
        m_prePiece[2]=new  Kuai(middle-1,top-2,3);
        m_prePiece[3]=new  Kuai(middle,top-2,3);
        for(i = 0;i<4;i++)
     {
       yulan.SetIcon(m_prePiece[i].m_nColumn-3,m_prePiece[i].m_nRow-18,tukuai[m_prePiece[i].m_ntupian]);
     }
         break;
         case 6:
             //XXX  yellow;
        m_nPieceValue=12;
        /********
           X
         X X X
        */
         m_prePiece[0]=new  Kuai(middle,top-1,6);
         m_prePiece[1]=new  Kuai(middle-1,top-1,6);
         m_prePiece[2]=new  Kuai(middle+1,top-1,6);
         m_prePiece[3]=new  Kuai(middle,top-2,6);
         for(i = 0;i<4;i++)
           {
             yulan.SetIcon(m_prePiece[i].m_nColumn-3,m_prePiece[i].m_nRow-18,tukuai[m_prePiece[i].m_ntupian]);
           }
         break;
     }
}
  private void transferPreToCur()//将预览的方块转变成正在动的方块
   {
      for(int j = 0;j<4;j++)
      {
      if(mine[m_prePiece[j].m_nColumn][m_prePiece[j].m_nRow] !=0 )//判断是否还能玩
      IsGameInPlay = false;
      for(int i=0;i<4;i++)
       {
         //用类定义的变量如同int 定义的可这样赋值
         m_curPiece[i]=m_prePiece[i];
       }
      for(int i=0;i<4;i++)
        {
          mine[m_curPiece[j].m_nColumn][m_curPiece[j].m_nRow]  = m_curPiece[j].m_ntupian;
          Mine.SetIcon(m_curPiece[j].m_nColumn,m_curPiece[j].m_nRow,tukuai[ m_curPiece[j].m_ntupian ]);
          //将预览区的方块赋给游戏区域.
        }
      }
    }
/**********************************************************************/
    private synchronized boolean moveCurPiece(int nDx,int nDy,boolean bRotate)//判断方块是否变形
   {
   Kuai newpos[] = new Kuai[4];
   int dx , dy;
       for (int i = 0; i < 4; i++)
       {
         if (bRotate)
         {
           dx = m_curPiece[i].m_nColumn - m_curPiece[0].m_nColumn;
           dy = m_curPiece[i].m_nRow - m_curPiece[0].m_nRow;
           newpos[i] = new Kuai(m_curPiece[0].m_nColumn - dy,
                                m_curPiece[0].m_nRow + dx,
                                m_curPiece[i].m_ntupian);
           //顺时针转动
         }
         else
         {
           newpos[i] = new Kuai(m_curPiece[i].m_nColumn + nDx,
                                m_curPiece[i].m_nRow + nDy,
                                m_curPiece[i].m_ntupian);
         }
       }
    if (moveSquares(m_curPiece, newpos) == false)//如果新的方块和游戏区域的方块不相同
         return false;
       for(int i = 0; i < 4; i++)
         {
            m_curPiece[i] = newpos[i];
             }
       for(int i = 0; i < 4; i++)
         {
          Mine.SetIcon(m_curPiece[i].m_nColumn,m_curPiece[i].m_nRow,tukuai[m_curPiece[i].m_ntupian]);
              }
       return true;
   }
   /**
    ************************************************* 移动方块,如果不能移动,则返回假
    */
  boolean moveSquares(Kuai from[],Kuai to[])
   { //判断是否能移动
          outerlable:
          for (int i=0;i<to.length;i++)
        {
              if (to[i].InBounds()==false) return false ;
          //如果不在可玩区域,则返回假
              if(mine[to[i].m_nColumn][to[i].m_nRow]!=0)
            {
                for (int j=0;j<from.length;j++)
                      if (to[i].IsEqual(from[j]))
                         continue  outerlable;
                return false;
            }
        }
  //移动
          for(int i=0;i<from.length;i++)
          {
            if(from[i].InBounds())
                 mine[from[i].m_nColumn][from[i].m_nRow]=0;
                 Mine.SetIcon(from[i].m_nColumn,from[i].m_nRow,tukuai[0]);
          }
          for(int i=0;i<to.length;i++)
              mine[to[i].m_nColumn][to[i].m_nRow]=to[i].m_ntupian;
                return true;
   }
/**********************************************************************/
    private void removelines()//消行函数。
      {
           outerlabel:
           for(int j=0;j<Mine.Row;j++)
           {
                   for (int i=0;i<Mine.Comln;i++)
                     if (mine[i][j]==0)
                       continue  outerlabel;
                  for (int k=j;k<Mine.Row-1;k++)
                       for (int i=0;i<Mine.Comln;i++)
                          { mine[i][k]=mine[i][k+1];
                           Mine.SetIcon(i,k,tukuai[mine[i][k+1]]);
                           }
               j-=1;
              Score+=50;
              try{
                  String cx="../";
                  url=new URL("file:///E:mc/TowerDie.wav");
                  audioClip=java.applet.Applet.newAudioClip(url);
                  audioClip.play();
               }
               catch(Exception error)
                 {error.printStackTrace();}

         }//音乐的加入.从try开始
      }//****************************************************************消行
      public synchronized void addRandomLine()//添加随即行
         {
           int butong;
              int nRandom[]=new int[Mine.Comln];//20个整形的数组
              for(int i=0;i<Mine.Comln;i++)
             {
               nRandom[i] = (int) (7 * Math.random());
             }
              butong =  (int)(7 * Math.random());
              nRandom[butong] = 0;
               for(int nRow=Mine.Row;nRow>0;nRow--)
                 for(int  nCol=0; nCol<Mine.Comln; nCol++)
                 {
                     mine[nCol][nRow]=mine[nCol][nRow-1];
                     }
               for(int i=0;i<Mine.Comln;i++)
               {
               mine[i][0] = nRandom[i];
               }
               for(int nRow=Mine.Row-1;nRow>=0;nRow--)
                      for(int  nCol=0; nCol<Mine.Comln; nCol++)
                      {
                      Mine.SetIcon(nCol,nRow,tukuai[mine[nCol][nRow]]);
                      }
        for(int i = 0 ; i<4;i++)
        {
          m_curPiece[i].m_nRow++;
          mine[m_curPiece[i].m_nColumn][m_curPiece[i].m_nRow]=m_curPiece[i].m_ntupian;
          Mine.SetIcon( m_curPiece[i].m_nColumn, m_curPiece[i].m_nRow, tukuai[m_curPiece[i].m_ntupian]);
        }
    }
 /************************************************************加行*/
public void SetSpeed(int speed)
      {
       this.thespeed = speed;
      }
public int GetSpeed()
      {
      return this.thespeed;
      }
/***************************************************停止*/
      public synchronized void stop()//线层处理
      {
           if(theThread!=null)//如果线层不为空
                   theThread.stop();
           theThread=null;
      }
 /****************************************************暂停*/
      public synchronized void pause()//游戏暂停
       {
            if(theThread!=null)//如果线层不为空
            {
                try
                {
                    theThread.suspend();//线层暂停
                    Paused=true;//暂停为真
                }
               catch(Exception e){e.printStackTrace();}
            }
      }
 //***********************************************************启动线程
      public synchronized void start()
         {
          if(theThread!=null)
          {
              Paused=false;//暂停为假
              theThread.resume();//继续执行线层以前执行的线层
             return;
         }
         for(int j = 0; j<Mine.Row;j++)
              for(int i = 0 ;i<Mine.Comln;i++ )
              {
                mine[i][j]=0;
                Mine.SetIcon(i,j,tukuai[0]);
              }
       theThread  = new Thread(this);
       IsNeedNewPiece = true;
       IsGameInPlay=true;
       Mine.requestFocus();//将焦点设置回到游戏区域
       theThread.start();
   }
 /******************************************run*/
 public void run()//游戏的主要函数
{
int sudu;
int l = 0;
while (IsGameInPlay) {
  try {
    sudu = this.thespeed;
    Thread.sleep(DelayMap[sudu]);
  }
  catch (InterruptedException e) {
    e.printStackTrace();
  }
  if (IsNeedNewPiece) {
    if(m_nPieceValue>0)//就是有方块产生,因为每一个方块都带有自身的分数。
           {
             Score += m_nPieceValue;}

    removelines();//消行函数
    newPrePiece();//产生新方块函数.
    transferPreToCur();//将预览的方块转变成正在动的方块
    IsNeedNewPiece = false;//产生新方块为假.
  }
  else {
    IsNeedNewPiece = !moveCurPiece(0, -1, false);//方块的自动下落.
  }
   sendStatus();//若是连机把玩家游戏区域的信息发送给对手
    l+=1;
    if(l%30==0)addRandomLine();
     jTextArea1.setText("分数:"+Score);

}
theThread = null;

 Frm  bang = new Frm(this.Score);
   bang.show();
 }//***************************
 private void sendStatus()
 {//若是连机把玩家游戏区域的信息发送给对手
     if(m_nNetStatus==NOCONNECT)return;
      String str="mine:";
      for(int nCol=0;nCol<10;nCol++)
          for(int nRow=0;nRow<20;nRow++)
          {
              str+=mine[nCol][nRow]+"|";
          }
              sendStr(str);
 }//连机时候使用
  public void sendStr(String str)//把自己的游戏区域的消息发送出去.
     {
        switch(m_nNetStatus)
         {
             case SERVER:
                if(m_server!=null)
                    m_server.writeStr( str + "\n");
                 break;
             case CLIENT:
                 if(m_client!=null)
                    m_client.writeStr( str + "\n");
                 break;
         }
     }
  protected void processWindowEvent(WindowEvent e) {
    super.processWindowEvent(e);
    if (e.getID() == WindowEvent.WINDOW_CLOSING) {
      System.exit(0);
    }
  }
  void jButton1_actionPerformed(ActionEvent e) {//开始按钮
    if (this.m_nNetStatus == this.CLIENT) {//如果这个窗体是客户机就没有权利使用开始命令
          JOptionPane.showConfirmDialog(this,"客户机不能使用这个命令","提示!",JOptionPane.DEFAULT_OPTION,JOptionPane.WARNING_MESSAGE);
    }
    else
     { sendStr("start");
   this.start();Score=0;}
  }
  void jButton2_actionPerformed(ActionEvent e) {//退出按钮
  System.exit(0);
  }
  public boolean Mine_keyPressed(KeyEvent e) {
    int Key;
    Key = e.getKeyCode();
    if(!IsGameInPlay)return true;
    if(Paused)return true;
    if( moveCurPiece(0,-1,false)==false)
       jTextArea1.setText("完拉!!!!");

    if(Key == KeyEvent.VK_RIGHT)
    {

⌨️ 快捷键说明

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