小菜鸟以前做的第一个完整程序-飞机大战游戏-思考总结
作者:互联网
翻以前学习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