分析:
飞机大战 首先对这个游戏分析,在屏幕上的物体都是飞行物,我们可以把建一个类,让其他飞行物继承这个类.游戏中应有英雄机(也就是自己控制的飞机)、敌人。而敌人应该分为打死给分的飞机(就是普通飞机),另一种就是打死有奖励的敌人。他们都应该是飞行物的子类,我们也可以为普通飞机和给奖励的敌人设一个接口让他们去实现接口,这样有利于以后的扩展。
一、创建飞行物父类
import java.awt.image.BufferedImage;
/** 飞行物父类 */
public class FlyingObject {
protected BufferedImage image;//图片
protected int width;//宽
protected int height;//高
protected int x;//x坐标
protected int y;//y坐标
}
二、创建奖励的接口
/** 获取奖励 */
public interface Award {
public int DOUBLE_FIRE = 0;//火力
public int LIFE = 1;//命
/** 获取奖励类型(上面的0或1) */
public int getType();
}
三、创建敌人接口
/** 敌人 */
public interface Enemy {
/** 得分 */
public int getScore();
}
四、创建小蜜蜂类(继承飞行物父类,实现奖励接口)
/** 小蜜蜂: 是飞行物,也是奖励 */
public class Bee extends FlyingObject implements Award {
private int xSpeed = 1;//x坐标移动速度
private int ySpeed = 2;//y坐标移动速度
private int awardType;//奖励的类型(0或1)
/** 重写getType()获取奖励类型 */
public int getType() {
return awardType;//返回奖励类型
}
}
五、创建子弹类(继承飞行物父类)
/** 子弹: 是飞行物 */
public class Bullet extends FlyingObject{
private int speed = 3;//移动的速度
}
六、创建敌机类(继承飞行物父类,实现敌人接口)
/** 敌机: 是飞行物,也是敌人 */
public class Airplane extends FlyingObject implements Enemy {
private int speed = 3; //移动的速度
/** 重写getScore()得分 */
public int getScore() {
return 5;//一个敌机得5分
}
}
七、创建英雄机类(继承飞行物父类)
import java.awt.image.BufferedImage;
/** 英雄机: 是飞行物 */
public class Hero extends FlyingObject{
private int doubleFire; //火力值
private int life; //命
private BufferedImage[] images = {}; //图片数组
private int index; //协助图片切换
}
八、创建主函数类并添加图片资源
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;
/** 主程序类 */
public class ShootGame {
public static final int WIDTH = 400; //窗口宽
public static final int HEIGHT = 654; //窗口高
public static BufferedImage background; //背景图
public static BufferedImage start; //启动图
public static BufferedImage pause; //暂停图
public static BufferedImage gameover; //游戏结束图
public static BufferedImage airplane; //敌机
public static BufferedImage bee; //小蜜蜂
public static BufferedImage bullet; //子弹
public static BufferedImage hero0; //英雄机0
public static BufferedImage hero1; //英雄机1
static{ //初始化静态图片
try{
background = ImageIO.read(ShootGame.class.getResource("background.png"));
start = ImageIO.read(ShootGame.class.getResource("start.png"));
pause = ImageIO.read(ShootGame.class.getResource("pause.png"));
gameover = ImageIO.read(ShootGame.class.getResource("gameover.png"));
airplane = ImageIO.read(ShootGame.class.getResource("airplane.png"));
bee = ImageIO.read(ShootGame.class.getResource("bee.png"));
bullet = ImageIO.read(ShootGame.class.getResource("bullet.png"));
hero0 = ImageIO.read(ShootGame.class.getResource("hero0.png"));
hero1 = ImageIO.read(ShootGame.class.getResource("hero1.png"));
}catch(Exception e){
e.printStackTrace();
}
}
public static void main(String[] args) {
}
}
九、添加构造方法
1.敌机类
import java.util.Random;
public Airplane(){
image = ShootGame.airplane; //图片
width = image.getWidth(); //宽
height = image.getHeight(); //高
Random rand = new Random(); //随机数对象
x = rand.nextInt(ShootGame.WIDTH-this.width); //x:0到(窗口宽-敌机宽)之间的随机数
y = this.height; //y:负的敌机的高
}
2.小蜜蜂类
import java.util.Random;
/** 构造方法 */
public Bee(){
image = ShootGame.bee; //图片
width = image.getWidth(); //宽
height = image.getHeight(); //高
Random rand = new Random(); //随机数对象
x = rand.nextInt(ShootGame.WIDTH-this.width); //x:0到(窗口宽-蜜蜂宽)之间的随机数
y = this.height; //y:负的蜜蜂的高
awardType = rand.nextInt(2); //0到1的随机数
}
3.子弹类
/** 构造方法 */
public Bullet(int x,int y){
image = ShootGame.bullet; //图片
width = image.getWidth(); //宽
height = image.getHeight(); //高
this.x = x; //随着英雄机坐标而得到的x
this.y = y; //随着英雄机坐标而得到的y
}
4.英雄机类
public Hero(){
image = ShootGame.hero0; //图片
width = image.getWidth(); //宽
height = image.getHeight(); //高
x = 150; //固定的x坐标
y = 400; //固定的y坐标
doubleFire = 0; //默认为0(单倍火力)
life = 3; //默认为3
images = new BufferedImage[]{ShootGame.hero0,ShootGame.hero1}; //两张图片
index = 0; //协助切换(默认为0)
}
网友评论