本节我们将完成这个游戏的计分功能,新增一个角色显示分数,重点是如何判断得分。
第一步:新增一个用于显示分数的角色

1、右键点击Actor,选择New subclass…

Greenfoot制作flappybird游戏[五]

2、输入名称Score,确定

Greenfoot制作flappybird游戏[五]

3、编辑Myworld程序,在游戏开始时添加Score角色

addObject(new Score(), 300, 100);

Greenfoot制作flappybird游戏[五]

4、编辑Score角色代码,添加一个变量score用来记录得分,然后显示在世界里。

public static int score;//计分变量

   public Score(){

   score = 0;//初始化为0

}

public void act(){

   World myWorld = getWorld();

   myWorld.showText(String.valueOf(score), 300, 100);//在世界中显示变量值

}

//计分操作

public static void add(int num){

   score += num;

}

Greenfoot制作flappybird游戏[五]

4、划重点,这一步就是要判断何时加分。

思路:如果小鸟水平位置已经穿越了Pipe,也就是水平位置与管子发生了碰撞,并且变量alive==true(还活着),就可以加一分。

编辑Flappybird角色代码,先增加一个变量isacross,标记是否在穿越管子:

private boolean isacross = false;

然后在碰撞检测里添加代码,如果水平发生碰撞,修改这个值,表示已经开始穿越了。

Greenfoot制作flappybird游戏[五]

接下来,在Act方法里增加代码,判断是否可以加分。

if(isacross && isalive){

Score.add(1);

}

目前看来一切就绪,运行一下看看效果。

Greenfoot制作flappybird游戏[五]

问题出现了,只要小鸟开始穿越管子,就开始不停的加分,这是因为每次执行act方法时,只要满足条件都会加分,所以,我们的限制条件还要再增加一个,那就是如果是同一根管道,加过一次分就不再重复计分。

再新增一个变量,private boolean hasaddscore = false; //初始值表示还没加过分

修改Act方法中的加分判断代码,完整的Act方法如下图所示:

Greenfoot制作flappybird游戏[五]

这样我们的计分功能就完成了,核心修改的就是碰撞检测和Act判断计分两处。

原创内容,谢绝转载!