📄 tetrics.java~1~
字号:
case 1: // [][][] 形 // [] m_nPieceValue=120;//方块价值 //方块位置形状 m_prePiece[0]=new Square(middle,top-2,5); m_prePiece[1]=new Square(middle,top-1,5); m_prePiece[2]=new Square(middle-1,top-2,5); m_prePiece[3]=new Square(middle+1,top-2,5); break; case 2: //[][] // [][] 形 m_nPieceValue=200;//方块价值 //方块位置形状 m_prePiece[0]=new Square(middle,top-2,2); m_prePiece[1]=new Square(middle-1,top-1,2); m_prePiece[2]=new Square(middle,top-1,2); m_prePiece[3]=new Square(middle+1,top-2,2); break; case 3: //[][] 形 // [][] m_nPieceValue=200;//方块价值 //方块位置形状 m_prePiece[0]=new Square(middle,top-2,7); m_prePiece[1]=new Square(middle+1,top-1,7); m_prePiece[2]=new Square(middle,top-1,7); m_prePiece[3]=new Square(middle-1,top-2,7); break; case 4: //[][] // [][] 形 m_nPieceValue=150;//方块价值 //方块位置形状 m_prePiece[0]=new Square(middle-1,top-1,3); m_prePiece[1]=new Square(middle,top-1,3); m_prePiece[2]=new Square(middle-1,top-2,3); m_prePiece[3]=new Square(middle,top-2,3); break; case 5: //[][][] // [] 形 m_nPieceValue=180;//方块价值 //方块位置形状 m_prePiece[0]=new Square(middle,top-1,6); m_prePiece[1]=new Square(middle-1,top-1,6); m_prePiece[2]=new Square(middle+1,top-1,6); m_prePiece[3]=new Square(middle+1,top-2,6); break; case 6: //[][][] // [] 形 m_nPieceValue=180;//方块价值 //方块位置形状 m_prePiece[0]=new Square(middle,top-1,4); m_prePiece[1]=new Square(middle+1,top-1,4); m_prePiece[2]=new Square(middle-1,top-1,4); m_prePiece[3]=new Square(middle-1,top-2,4); break; } } /** * 将预览的方块转变成正在动的方块 */ private void transferPreToCur() { Square old[]=new Square[4];//声名新方块实例 for(int i=0;i<4;i++) old[i]=new Square(-1,-1,0);//定位新生成的方块 for(int i=0;i<4;i++) { m_curPiece[i]=m_prePiece[i];//将预览区方块移到游戏区 m_nTotalPieces++;//下落的方块+1 } m_bGameInPlay=moveSquares(old,m_curPiece);//若方块可移动则游戏可进行 //if(!m_bGameInPlay && m_tFrame.m_nNetStatus!=TFrame.NOCONNECT)m_tFrame.sendStr("GameOver:"+m_nTheScore); //else if(!m_bGameInPlay && m_tFrame!=null)m_tFrame.insertScoreReport(m_nTheScore); } //去掉可以消去的行 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;//下移一行 } } //键盘响应 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单位 m_bNeedNewPiece=false;//不需生成新方块 repaint();//更新游戏画面 break;//跳出本次操作 case 'd': case Event.RIGHT://‘d’键或右键 moveCurPiece(1,0,false);//方块右移1单位 m_bNeedNewPiece=false; repaint();//更新游戏画面 break;//跳出本次操作 case 'w': case Event.UP://‘w’键或上键 moveCurPiece(0,0,true);//方块不动 repaint();//更新游戏画面 break;//跳出本次操作 case 's': case Event.DOWN://‘s’键或下键 while(moveCurPiece(0,-1,false));//方块持续下移 repaint();//更新游戏画面 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; //上一页游戏区全部为方块 } 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 + -