java飞机大战英雄机游戏结束_Java学习二(飞机大战项目)day10

day10

1.英雄机和敌人的碰撞

1) 借用FlyingObject中的hit()碰撞行为

借用FlyingObject中的goDead()方法

在Hero中设计subtractLife()减命、clearDoubleFire()清空火力值4

/** 成员方法:减命 */

public void subtractLife() {

life--; //命数减1

}

/** 成员方法:清空火力值 */

public void clearDoubleFire() {

doubleFire = 0; //火力值归0

}

2)因为英雄机与敌人碰撞为定时发生的,所以在run()中调用heroBangAction()方法:

在heroBangAction()中:

遍历所以敌人,获取每个敌人,判断是否与英雄机撞上了

若撞上了:敌人去死、英雄机减命 、英雄机清空火力值

/** 成员方法:英雄机与敌人的碰撞 */

public void heroBangAction() { //每10个毫秒走一次

for (int i = 0; i < enemies.length; i++) {

FlyingObject f =enemies[i]; //得到每一个敌人

if (hero.isLife() && f.isLife() && f.hit(hero)) { //若撞上了

f.goDead(); //敌人去死

hero.subtractLife(); //英雄机减命

hero.clearDoubleFire(); //英雄机清火力

}

}

}

2.检测游戏结束

1)借用hero的getLIfe()获取命

2)因为检测游戏结束为定时发生的,所以在run()中调用checkGameOverAction()方法:

在checkGameOverAction()中:

判断英雄机的命数 <= 0,若为true则

/** 成员方法:检测游戏结束 */

public void checkGameOverAction() {//每10个毫秒走一次

if(hero.getLife() <= 0) { //游戏结束了

state = GAME_OVER;

}

}

3.画状态

1)设计了四个状态常量,当前状态state变量

设计了三个静态图片,在static块中初始化

2)在paint()中设计在不同状态下画不同的图片

3)将一堆action()设计为仅在运行状态下在执行

将英雄机随着鼠标动设计为仅在运行状态下在执行

4)重写mouseClicked()鼠标点击事件

重写mouseClicked()鼠标点击事件

重写mouseClicked()鼠标点击事件

/** 常量:游戏的开始、运行、暂停、结束)*/

public static final int START = 0;

public static final int RUNNING = 1;

public static final int PAUSE = 2;

public static final int GAME_OVER = 3;

/** 成员变量:当前状态(默认为启动状态) */

private int state = START;

/** 成员变量:三张图(启动、暂停、结束) */

private static BufferedImage start;

private static BufferedImage pause;

private static BufferedImage gameover;

static { //初始化静态图片

start = FlyingObject.loadImage("start.png");

pause = FlyingObject.loadImage("pause.png");

gameover = FlyingObject.loadImage("gameover.png");

}

switch(state) { //在不同状态下画不同的图

case START: //启动

g.drawImage(start, 0, 0, null);

break;

case PAUSE: //暂停

g.drawImage(pause, 0, 0, null);

break;

case GAME_OVER: //结束

g.drawImage(gameover, 0, 0, null);

break;

}

/** 重写mouseMoved()鼠标移动 */

public void mouseMoved(MouseEvent e) {

if(state == RUNNING) {

int x = e.getX(); //获取鼠标的x坐标

int y = e.getY(); //获取鼠标的y坐标

hero.moveTo(x, y); //英雄机随着鼠标移动

}

}

/** 重写mouseClicked()鼠标点击 */

public void mouseClicked(MouseEvent e) {

switch (state) { //根据当前状态做不同操作

case START: //启动状态 state = RUNNING; //变为运行状态

break;

case GAME_OVER: //结束状态

score = 0;

sky = new Sky();

hero = new Hero();

enemies = new FlyingObject[0];

bullets = new Bullet[0];

state = START; //变为启动状态

break;

}

}

/** 重写mouseExited()鼠标移出 */

public void mouseExited(MouseEvent e) {

if(state == RUNNING) { //运行状态

state = PAUSE; //修改为暂停状态

}

}

/** 重写mouseEntered()鼠标移入 */

public void mouseEntered(MouseEvent e) {

if(state == PAUSE) { //暂停状态

state = RUNNING; //修改为运行状态

}

}

基于Java飞机大战游戏主要需要我方飞和敌方飞,还有子弹,特殊nPC,开始背景,结束背景,以及背景音乐。我方飞可以随意移动,敌方飞无规律出现。游戏玩家通过鼠标移动控制飞移动,我方飞游戏开始时就一直能发射子弹,当我方子弹碰到敌方飞时,敌方飞消失。当玩家飞碰到敌方子弹时,生命值减一,直到玩家飞生命值为一时,游戏结束。基本模块包括:游戏状态控制功能模块、游戏难度的调整模块、游戏界面绘画功能模块、玩家游戏控制功能模块等。本系统结构如下: (1)游戏状态控制功能模块:游戏的状态控制包括运行及结束游戏,首先进入游戏的开始页面,在游戏进行时,玩家必须躲避或者击落敌方飞,玩家飞的生命值降低为0的时候游 戏就会结束,弹出游戏结束界面 (2)游戏难度的调整模块:玩家玩的时间越长游戏的难度越高,敌方飞的数量越多、敌方飞出现的频率越高,玩家保证飞的存活的难度越高,操作难度相应也高。 (3)游戏界面绘画功能模块:左上角会显示玩家飞当前生命值,游戏时间,当前分数,其他地方用来输出玩家对我方飞的控制与敌方飞的动作显示 (4)玩家游戏控制功能模块: 玩家可以通过控制鼠标或者键盘来控制方飞(Hero airplane)的移动。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值