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+3xStep,y-yStep);
bullets[2] = new Bullet(x+4xStep,y-yStep);
bullets[3] = new Bullet(x+5xStep,y-yStep); //y-yStep(子弹距飞机的位置)
bullets[4] = new Bullet(x+6xStep,y-yStep);
bullets[5] = new Bullet(x+7xStep,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也无法发射子弹,可能是我某一个地方的代码误看了,或者没理解透彻,希望大佬们指教一下。
所以我最大的思考在于,如果想要逆向软件工程,我认为一定要先看明白整个代码的框架,以及代码的底层逻辑,然后再进行想法设立,再
建设,如果一开始就有宏大的概念,并不利于代码的实现,往往会浪费更多的时间,同时也一定要有一定的代码基础。同时,我也发现了反向
软件工程的好处所在,单独对我们一个人而言,我们很难在短时间内建设一个大的工程,我们很难自己去构思整个框架以及代码逻辑,同时我们
也有着相应代码知识的缺失,那么一次反向软件工程就是一个对我们很好的专项帮助,强大的原作者已经帮我们搭建好了框架,对于不懂的地方
或者是想要去改变的地方我们就可以专项思考和学习,同时也是对我们代码基础的一次查漏补缺,并且在项目完成之后,我们也会有着自豪感,以
推动我们积极学习,所以从多个方面来看,都对我们是有很大的帮助的。
最后,对我而言,通过反向软件工程我看到了代码知识的不足,缺失之处,应当及时学习。