坦克大战项目总结

最近复习了一下刚学习J2SE后,跟着马士兵老师学习的这个项目--坦克大战;

首先,写一个项目需要注意需求分析:

1.能够四处移动;

2.能够打击敌人;

3.敌人能够移动;

4.能够产生爆炸;

5.能够产生障碍;

6.能够增长生命;

其次,写项目不是一蹴而就的,先从最基础的功能实现,然后不断的往上面加东西,注意保存版本。

下面对这个项目进行一个小结:

  0.1 产生一个窗口:这个是通过继承类Frame就可以轻易的实现,不赘述;

0.2 窗口关闭事件:通过内部类来实现;

0.3 画出代表坦克的实心圆:通过paint方法实现---

public void paint(Graphics g){
    Color c = g,getColor();
    g.setColor(Color.RED);
    g.fillOval(50,50,30,30);
    g.setColor(c);
}
注意事项有两个:一、paint方法不需要显示的调用,在窗口重画的时候自动调用;

二、paint方法编写的时候,不要改变原来的前景色,先取出来,用完之后再恢复;

0.4 让坦克动起来:启动线程不断重画;线程建为内部类,好处:

可以方便的访问包装类的方法。不方便公开的,只为包装类服务。

0.4.1 使用双缓冲消除闪烁现象:  解决办法:将所有的东西画在一副虚拟的图片上,一次性的显示出来;

 每一次调用repaint方法,先调用update方法再调用,因此,在调用paint方法之前,我们重写update方法。

0.5 代码重构:

将需要多处改变的量定义为常量,如本文中的Frame宽度和高度;定义常量的方式:public static final int ;

0.6 让坦克听从我们键盘的指挥: 需要增加键盘监听器类 KeyMonitior;   同时注意switch .... case ... 语句中 break语句的使用;

0.7 将坦克独立的包装成类:步骤:建立Tank类;为坦克类添加成员变量x,y;添加draw 方法,使Tank类独立的控制自己的画法;

添加Tank类处理按键的方法;根据Tank类修改TankClient;

0.8 让主战坦克向8个方向移动:  步骤: 添加按键状态的boolean; 添加代表方向的量(使用枚举);根据按键状态确定Tank方向;根据方向进行下一步移动(move方法);

0.9 修改上一个版本的bug : 步骤: 处理抬起键的问题;修改TankClient的相关代码;

1.0 添加子弹类  : 步骤  : 添加x,y,dir等属性;添加构造方法、draw等必要方法;根据不同的方向,进行不同的运动;在TankClient中模拟一颗子弹;

1.1 根据主战坦克的方向和位置,打出子弹: 步骤: 增加Ctrl键的按键处理;由于是坦克打出子弹,所以坦克中fire方法的返回值是Missile;

根据坦克的方向和位置设定子弹的方向和位置并new 出来,然后返回(fire方法的实现);

1.2 解决坦克停下来也能打出炮弹的问题--画出炮筒  步骤: Tank类新增属性ptDir ;  每次move 后根据坦克的新方向确定炮筒的方向;将炮筒用直线的方式表现出来;

1.3 能打出多发炮弹 步骤: 使用容器装炮弹; 每当抬起Ctrl键的时候就往容器中装入新的炮弹;逐一画出每一发炮弹;

1.4 解决炮弹不消亡的问题 :  步骤 : 加入控制炮弹生死的量bLive(Missile); 当炮弹已经死去就不需要对其重画; 当炮弹飞出边界就死亡; 当炮弹死亡就从容器中去除;

1.5 画一辆敌人的坦克 :  步骤: 加入区别敌我的量good;根据敌我的不同设置不同颜色;更新Tank的构造函数,加入good;TankClient中new出敌人的坦克并画出;

1.6 将敌人坦克击毙: 步骤 : Missile中加入hitTank(Tank)方法,返回布尔类型;碰撞检测的辅助类Rectangle,使用这个方法,可以正好拿到包在坦克外的方块;

为Tank和Missile都加入getRect方法;当击中敌人坦克时,敌人被打死,子弹也死去;

增加控制Tank生死的量live,当打中的时候设置为false,Tank的draw方法里,先判断live的量,如果false的话就不画了;

1.7 加入爆炸:  步骤:  用不同直径的圆模拟爆炸;加入live;加入位置属性;加入draw方法;

1.8 添加多辆坦克 :步骤 : 用容器来装敌人的Tank; 向容器中装入多辆敌人Tank; 画出来; 添加hitTanks方法打击多辆Tank;

1.9 让敌军更加智能: 步骤:敌军坦克动起来;让敌军坦克向随机的方向移动; 让敌军坦克可以发射炮弹;敌军的炮火不能太猛烈;

2.0 添加两堵墙 : 步骤 : 建立Wall类,画出来;  让每颗子弹打击墙,添加hitWall方法;让坦克不能穿越墙;

2.1 坦克不能互相穿越  步骤 : 当坦克撞到坦克时stay;在Tank类中增加collidesWithTanks; 在TankClient的paint方法中new出坦克的时候,加入collideWithWall;

2.2 超级炮弹 步骤:处理按键A;

2.3 主战坦克的生命值 步骤: 加入life变量; 在窗口显示生命值;

2.4 图形化主战坦克的生命值: 根据不同的life进行不同的显示;在Tank类中加入内部类BloodBar(血条);

2.5 添加血块: 步骤 :添加blood类;添加必要的方法,并且让blood对象固定轨迹运动;

2.6 最后的修正 : 敌人死光了重新加入; 我军挂掉按F2加入;

还有图片版和网络版,留到下回分析。

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值