📄 tetrics.java~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 + -