使用java编写飞机_教你如何一步一步用Java实现飞机大战(三)

飞机大战第三天

1,画分数和画命的实现步骤:

(1)hero---getLife()获取生命值:

/** 获取英雄机的命 */

public int getLife(){

return life; //返回命数

} 2)ShootGame---paint(g){

......

paintScore(g); //画分和命

}

/** 重写paint() g:画笔*/

public void paint(Graphics g){

g.drawImage(background,0,0,null); //画背景图

paintHero(g); //画英雄机对象

paintFlyingObjects(g); //画敌人(敌机+小蜜蜂)对象

paintBullets(g); //画子弹对象

paintScoreAndLife(g); //画分和画命

paintState(g); //画状态

} 3)ShootGame----paintScoreAndLife(g){

设置颜色g.setColor(...)

设置字体g.setFont(...)

画分g.drawString(...);

画命g.drawString(...);

}

/** 画分和画命 */

public void paintScoreAndLife(Graphics g){

g.setColor(new Color(0xFF0000)); //设置颜色(纯红)

g.setFont(new Font(Font.SANS_SERIF,Font.BOLD,24)); //设置字体样式(字体:SANS_SERIF 样式:BOLD加粗 字号:24)

g.drawString("SCORE: "+score,10,25);

g.drawString("LIFE: "+hero.getLife(),10,45);

}2.英雄机与敌人碰撞的实现步骤:

1)Hero---boolean hit(FlyingObject other);

/** 英雄机与敌人的碰撞算法 this:英雄机 other:敌人 */

public boolean hit(FlyingObject other){

int x1 = other.x-this.width/2; //x1:敌人的x-1/2英雄机的宽

int x2 = other.x+other.width+this.width/2; //x2:敌人的x+敌人的宽+1/2英雄机的宽

int y1 = other.y-this.height/2; //y1:敌人的y-1/2英雄机的高

int y2 = other.y+other.height+this.height/2; //y2:敌人的y+敌人的高+1/2英雄机的高

int x = this.x+this.width/2; //x:英雄机的x+1/2英雄机的宽

int y = this.y+this.height/2; //y:英雄机的y+1/2英雄机的高

return x>=x1 && x<=x2

&&

y>=y1 && y<=y2; //x在x1与x2之间,并且,y在y1与y2之间,即为撞上了

}

2)Hero---substractLife()

clearDoubleFire();

/** 英雄机减命 */

public void subtractLife(){

life--; //命数减1

}

/** 英雄机增火力 */

public void addDoubleFire(){

doubleFire+=40; //火力值增40

}

/** 清空英雄机的火力值 */

public void clearDoubleFire(){

doubleFire = 0; //火力值归零

}

3)ShootGame----action(){

重写run(){

...

hitAction(); //检测英雄机与敌人撞

repaint();

}

}

public void run(){ //定时干的那个事--10毫秒走一次

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

enterAction(); //敌人(敌机+小蜜蜂)入场

stepAction(); //飞行物(敌机+小蜜蜂+子弹+英雄机)走一步

shootAction(); //子弹入场(英雄机发射子弹)

outOfBoundsAction(); //删除越界的飞行物(敌机+小蜜蜂+子弹)

bangAction(); //子弹与敌人(敌机+小蜜蜂)的碰撞

hitAction(); //英雄机与敌人(敌机+小蜜蜂)的碰撞

checkGameOverAction(); //判断游戏结束

}

repaint(); //重画(调用paint()方法)

} 4)hitAction(){

遍历所有敌人,获取每一个敌人f

判断hero.hit(f){

减命

火力值清零

删除被撞的敌人(交换,缩容)

}

}

5)action(){

重写run(){

...

checkGameOverAction(); //检测游戏结束

repaint();

}

}

6)checkGameOverAction(){

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

}

}

/** 英雄机与敌人(敌机+小蜜蜂)的碰撞 */

public void hitAction(){//10毫秒走一次

for(int i=0;i3.画状态的实现步骤:

1)START,RUNNING,PAUSE,GAME_OVER

state=START;(存储当前状态)

2)paint(){

...

paintState(g);

}

3)paintState(g){

START状态--贴start图

PAUSE状态--贴pause图

GAME_OVER状态--贴gameover图

}

4)run(){

if(state==RUNNING){

一堆action();

}

repaint();

}

5)mouseMoved(){

if(state==RUNNING){

获取x,y,调英雄机移动方法

}

}

6)重写mouseClicked(){

若为启动状态,则改为运行状态

若为游戏结束状态,则:

清理现场(hero,flyings,bullets,score)

改为启动状态

}

7)checkGameOverAction(){

if(hero.getLife()<=0){

state=GAME_OVER;

}

}

8)重写mouseExited(){

if(state == RUNNING){

state = PAUSE;

}

}

9)重写mouseEntered(){

if(state == PAUSE){

state = RUNNING;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值