java飞机大战小游戏作业二次开发

一,来源:java团长 https://www.cnblogs.com/java1024/p/7985173.html
二,运行截图:JRE


三,主要问题:1.原版对抗元素过低,不容易死,弹幕也太少,所以我加入了三倍火力,六倍活力,以及敌方二倍三倍移速。
2.原版游戏模式基础,所以我跟随着分数的变化,让本体战机有着对应的改变,100分,500分分别为一个阶段。
3.原版过于q化,所以我加入了大量科幻元素,从绘图网寻找飞机大战的素材图片,让子弹和战机更为科幻。
四,更新代码:public Bullet[] shoot(){ //火力改变
int xStep = width/4;
int yStep = 20;
if(ShootGame.getscore() > 500) {
Bullet[] bullets = new Bullet[6];
bullets[0] = new Bullet(x+2xStep,y-yStep); //y-yStep(子弹距飞机的位置)
bullets[1] = new Bullet(x+3
xStep,y-yStep);
bullets[2] = new Bullet(x+4xStep,y-yStep);
bullets[3] = new Bullet(x+5
xStep,y-yStep); //y-yStep(子弹距飞机的位置)
bullets[4] = new Bullet(x+6xStep,y-yStep);
bullets[5] = new Bullet(x+7
xStep,y-yStep);

        return bullets; 
    }
    if(ShootGame.getscore() > 100) {
    	Bullet[] bullets = new Bullet[3]; 
        bullets[0] = new Bullet(x+xStep,y-yStep);  //y-yStep(子弹距飞机的位置) 
        bullets[1] = new Bullet(x+2*xStep,y-yStep); 
        bullets[2] = new Bullet(x+3*xStep,y-yStep); 
        
        return bullets; 
    }

public void change() {//战机改变
if(ShootGame.getscore() >100) {
image =ShootGame.hero2;
}
if(ShootGame.getscore() >500) {
image =ShootGame.hero3;
}
}
public void change() {//子弹改变
if(ShootGame.getscore() >500) {
image =ShootGame.bullet2;
}
}
public void enterAction() {
flyEnteredIndex++; //飞机生成的数量

   if(ShootGame.getscore()>500) {
    	if(flyEnteredIndex%10==0) {
         	FlyingObject obj = nextOne(); // 随机生成一个飞行物 
            flyings = Arrays.copyOf(flyings, flyings.length + 1); 
            flyings[flyings.length - 1] = obj;
    	}

    }
    
    else if(ShootGame.getscore()>100) {
    	if(flyEnteredIndex%20==0) {
         	FlyingObject obj = nextOne(); // 随机生成一个飞行物 
            flyings = Arrays.copyOf(flyings, flyings.length + 1); 
            flyings[flyings.length - 1] = obj;
    	}

    }

public void herochange() {//子弹和战机改变
hero.change();//新增

}
public void bulletchange() {
	for(int i=0;i<bullets.length;i++) {
		bullets[i].change();//新增
	}
	
	
}

herochange();//为什么存在不及时的问题

                bulletchange();

public void step() { //敌机速度改变
if(ShootGame.getscore()>500) {
speed=9;
}
else if(ShootGame.getscore()>100) {
speed=6;
}
else {
speed=3;
}
y += speed;
}
public static BufferedImage hero2;
public static BufferedImage hero3;
hero3 = ImageIO.read(ShootGame.class.getResource("hero3.png"));
五,运行截图:








六,总结:本篇对于实体的改变较少,改编路上遇到了很多困难,最开始想要以让敌机也可以发射子弹,以增加对抗性,但改编到一半发现,
子弹要考虑绘图,两种子弹是否具有互相碰撞的属性,以及同属于Bullet类,如何对敌机和hero战机判定,所以放弃了,之后便是对敌方
战机的数量进行增加,因为原文代码采用的是通过索引取余的方法来产生飞行物,所以只要降低数字便可以,同理速度的改变也很容易,另
一个的难点在于子弹的改变,最初我忽略了bullets数组,我又创建了一个Bullet类对象,导致系统报错,同时子弹不同于hero战机的改变,
子弹有多个,存于数组之中,所以如果想要让500分之后的子弹改变,就要让整个数组的子弹都变化,则利用遍历即可。
其实除此之外,我还有更大的时间花费,我想要在1000分之后的阶段加入一个boss元素,boss有生命条,且可以发射黑洞反弹子弹,绘图是
绘图好了,但是仍然卡在了子弹问题上,boss也无法发射子弹,可能是我某一个地方的代码误看了,或者没理解透彻,希望大佬们指教一下。
所以我最大的思考在于,如果想要逆向软件工程,我认为一定要先看明白整个代码的框架,以及代码的底层逻辑,然后再进行想法设立,再
建设,如果一开始就有宏大的概念,并不利于代码的实现,往往会浪费更多的时间,同时也一定要有一定的代码基础。同时,我也发现了反向
软件工程的好处所在,单独对我们一个人而言,我们很难在短时间内建设一个大的工程,我们很难自己去构思整个框架以及代码逻辑,同时我们
也有着相应代码知识的缺失,那么一次反向软件工程就是一个对我们很好的专项帮助,强大的原作者已经帮我们搭建好了框架,对于不懂的地方
或者是想要去改变的地方我们就可以专项思考和学习,同时也是对我们代码基础的一次查漏补缺,并且在项目完成之后,我们也会有着自豪感,以
推动我们积极学习,所以从多个方面来看,都对我们是有很大的帮助的。
最后,对我而言,通过反向软件工程我看到了代码知识的不足,缺失之处,应当及时学习。

热门相关:妖夏   龙组使命   花都保镖   万古第一帝   神医嫁到