编程语言
首页 > 编程语言> > 小菜鸟以前做的第一个完整程序-飞机大战游戏-思考总结

小菜鸟以前做的第一个完整程序-飞机大战游戏-思考总结

作者:互联网

翻以前学习java做的笔记,突然翻到跟着视频做的第一个程序,飞机大战游戏,不知道有没有很多人做过这个,当时还挺能思考和总结的。现在在学习上太懈怠啦,小小激励下自己。

飞机大战:

全部步骤:
第一天(静):找对象,分析对象之间的关系
    类的属性设计
    画出各个对象
第二天(动):敌人(敌机+小蜜蜂)入场
    飞行物(敌机、小蜜蜂、子弹、英雄机)走一步
    子弹入场
    英雄机随着鼠标动
    删除越界的飞行物

第三天:子弹和敌人(敌机+小蜜蜂)的碰撞
    画分和命
    英雄机和敌人(敌机+小蜜蜂)的碰撞
    画状态


设计过程考虑:
1、行为是公有的还是独有的,所有子类都一样还是不一样;
2、谁的行为写在谁的里面:
3、是定时发生的吗(定时发生:什么也不动,也可以发生)
4、生成敌人对象,加入到敌人数组中
5、移动方法是公有的,所有子类不同的,抽象方法到父类
6、敌人如何出现的?从上面随机产生的,系统随机产生的。
    子弹是如何出现的?子弹是由英雄机发射出来的

设计细节考虑:
1、if(one instanceof Enemy){
Enemy e=(Enemy)one;
score+=e.getScore();

强转接口的原因:扩展性好
如果加了一种敌机类型:
one--敌机,超敌机,蜜蜂,大黄蜂
e--敌机,超敌机
调用getScore看对象,如果是敌机调用敌机重写的getScore

2、if(){}
if(){}
而不是if(){}else if(){}
原因是考虑扩展性:蜜蜂可能即是奖励又加分的话

3、int score=0;//是哪些方法用,后面要用到score所以要写在方法外
4、life<=0游戏结束  严谨一点,万一剩一条命的时候,同时撞上两个敌人
5、增加生命 火力值,是英雄机的行为,必须在英雄机类中写方法,在外部调用。
    因为生命和火力值是英雄机私有的数据,外部不能直接操作

自己做遇到的问题:

1、子弹没有出现原因:
构造方法中没有:
this.x=x;
this.y=y;
传的参数没有赋值到子弹坐标上,一直默认为0

2、开始状态没有转换为运行状态
switch的case中没有break;?

3、为什么不清零gameover之后点击start再点击又是gameover,因为不清0生命<1直接变gameover状态
4、接口的常量调用Award.DOUBLE_FIRE;
5、敌机没有消失:for循环错误,右大括号位置错了
6、销毁出界的飞行物,先保存没有出界的飞行物然后复制到数组中
7、在构造方法外和方法内初始化的区别:没看出来还
8、为什么初始化声明为3但显示为0:int life=3;在构造方法中多了一个int,其实没有初始化类中声明的life
9、Bullet[] bullets=new Bullet[2]
注意bullets中还没有子弹对象,遍历数组会空指针异常
10、4、new处错误都是因为构造方法
11、先声明?是固定值直接初始化,不是在构造方法中初始化
为什么可以new TimerTask(){};匿名内部类

遗漏知识:
1、Random rand=new Random();
int a=rand.nextInt(100)//0到99

2、继承要符合是一个is a的关系
paint()只能由系统调用
 

标签:初始化,构造方法,飞行物,菜鸟,子弹,大战,小蜜蜂,思考,敌机
来源: https://blog.csdn.net/will_be_better/article/details/113943556