武汉理工大学论文
}
}
}
//如果一行被填满,消除一行,用f记录消除的行数 if(t == 10) { }
f++;
remove(a.ai[i]+x);
return f; //返回被消除的行数,会用来计分
5.6 分数的统计和速度的控制
分数的统计是游戏一个重要的模块,通过对分数的统计来调节游戏的速度,提高游戏趣味性和挑战难度。tscore(int)把消除的行数传入该方法,游戏的分数用score来统计,传入消除行数t,则游戏总得分为score=score+t*t*10;用一个for循环把游戏得分按位存入一个一维数组,以方便通过图片来显示游戏的分数。
public void tscore(int t) {
}
//计分,t为消除的行数 score += t*t*10; //把分数按位存入数组 int sa = score;
for(int i = 3; i >= 0; i--) { }
sco[i] = sa % 10; sa /= 10;
速度控制是通过分数来调节的,用Thread.sleep()来控制游戏的速度,而速度的调节则是通过方法passWar()来实现的,当游戏的分数超过某一个值,速度控制变量speed增加60,从而减少游戏的休眠时间,从而达到速度增快的效果。
public void passWar() {//通过分数调节速度变量
if(score > gat*100) {
gat++;
if(speed < 340) {
25
武汉理工大学论文
}
}
}
speed += 60;
在run()方法里面控制游戏的速度,即方块下降速度。
try {
Thread.sleep(400 - cm.speed);
}
catch (InterruptedException e) {
}
e.printStackTrace();
5.7 游戏界面的绘制
游戏界面的绘制主要指游戏运行界面图片的绘制,主要包括游戏背景的绘制,游戏区域方块的绘制,下一个区域方块的绘制,分数的绘制等。
public void draw() {
try {
canvas= sHolder.lockCanvas(); if (canvas!= null) {
canvas.drawBitmap(bbk,0,0,paint); canvas.drawBitmap(border1, 2,1 ,paint); canvas.drawBitmap(border2,240,20, paint); canvas.drawBitmap(record,240, 270,paint);
showFace(canvas,paint); showC(canvas,paint); showT(canvas,paint); showP(canvas,paint); }
} catch (Exception e) {
System.out.println(\
} finally {
if (canvas!= null)
sHolder.unlockCanvasAndPost(canvas);
26
武汉理工大学论文
}
}
其中showFace(canvas,paint)绘制下一个方块区域下方的小恶魔表情,该人物通过消除的行数不同而显示不同的表情。
public void showFace(Canvas canvas,Paint paint) {//通过face控制人物的表情
}
if(face == 0) { }
else if(face == 1) { }
else if(face == 2||face==3) { }
else if(face==4) { }
canvas.drawBitmap(happy, 240,120, paint); canvas.drawBitmap(good, 240,120, paint); canvas.drawBitmap(conti, 240,120, paint); canvas.drawBitmap(goon, 240,120, paint);
showC(canvas,paint),showT(canvas,paint),showP(canvas,paint)分别用来绘
制分数、下一个方块区域的方块,游戏区域的方块。
5.8 游戏结束
当方块摆放超过屏幕顶部时,则游戏结束。每摆放好一个方块后就要检测一次方块是否超过屏幕顶端,如果超过了,则游戏结束,切换到游戏结束画面。
public boolean outM(Store a,int x,int y) {
}
for(int i = 0; i < 4; i++) { }
return false;
if(x+a.ai[i] < 1) { }
return false;
27
武汉理工大学论文
如果游戏失败,则切换到游戏结束画面。
if(tm.outM(a, x, y)) {//如果方块触顶了,结束游戏,转换到游戏结束界面
Intent intent = new Intent();
intent.setClass( ActivityGame.acGame,ActGameover.class); ActivityGame.acGame.startActivity(intent); ActivityGame.acGame.finish(); break;
}
28