敌机模型设计

与玩家飞机类相同,敌机类也是会飞的模型类的子类。游戏开始时,敌机开始进入游戏面板中。敌机被玩家飞机用导弹击中后,玩家飞机会获得分数奖励,每击中一架敌机,玩家飞机会获得 5 分。而未被导弹击中的敌机,将移动到游戏面板外。敌机的图片如图23.10所示。

(1)上文介绍了,不仅敌机类也是会飞的模型类的子类,而且每击中一架敌机,玩家飞机会获得 5 分。因为 Java 不支持多继承,所以为了同时实现这两个效果,需要引入接口。新建一个名为 Hit 的接口,并在该接口中编写一个将用于获得分数的抽象方法。具体代码如下:

image 2024 03 06 17 20 42 684
Figure 1. 图23.10 敌机
/**
* 敌机被击中,玩家飞机获得分数
*/
public interface Hit {
    int getScores();     // 获得分数
}

(2)首先,在敌机类中,初始化敌机图片的移动速度。然后,在敌机类的构造方法中,初始化敌机图片、敌机图片的宽度、敌机图片的高度、敌机图片左上角的 x 坐标和敌机图片左上角的 y 坐标。当游戏开始时,敌机的位置是随机出现的,因此需要借助 Random 类予以实现。代码如下:

public class Enemy extends FlyModel implements Hit {
    ...
}

(3)敌机类既继承了抽象的会飞的模型类,又实现了 Hit 接口。因此,在敌机类中,要重写会飞的模型类中的 move() 方法和 outOfPanel() 方法,以及 Hit 接口中的 getScores() 方法。代码如下:

/**
* 获得分数
*/
public int getScores() {
    return 5;    // 击落一架敌机得 5 分
}

/**
* 敌机图片移动
*/
public void move() {
    y += speed;
}

/**
* 敌机图片是否移动到游戏面板外
*/
public boolean outOfPanel() {
    return y > GamePanel.HEIGHT;
}