坦克大战项目
2014-09-22 22:45
113 查看
0.2版本
窗口关闭都必须建立监听类,有三种方式:
1.建立和Tankclient并排的类
2.写一个内部类。
3.写一个匿名类(匿名类的使用场合:类短小,不涉及将来的拓展,不涉及重要的业务逻辑)
这里采用第三种方法
设置不能改变窗口大小:this.setResizable(false);
0.3版本
画代表坦克的圆
重写paint方法,使用画笔是先得到当前画笔的颜色,再设置画笔的颜色
0.4版本
让坦克运动起来
步骤:将位置改为变量。
启动线程不断重画(思考:为什么启动线程进行重画,而不是每按下一个键进行重画。因为线程重画更均匀,更能控制重画的速度。第二,按键重画不能解决自动自动飞行的问题)
0.41
使用双缓冲消除闪烁现象
原因:刷星重画频率太快,paint方法还没有完成;逐条显示。
解决方法:将所有东西一次性画在虚拟的图片上,一次性显示出来
paint(graphics);//将画笔传递给paint方法
0.5
需求:使窗口大小容易改动
解决:将原来的窗口大小800*600改成常量便于以后更改
代码的重构可以方便程序的扩展
常量名一般大写,而且一般用public static final
0.6
控制坦克的运动轨迹
实现接口必须实现接口类的所有方法,而继承就不用
要知道用户使用哪个按键,必须通过getKeyCode()方法得到按键的虚拟码
swich语句中要注意有break
0.7
添加一百辆坦克
功能:将坦克单独包装成类.
步骤:建立Tank类,,为Tank类单独添加成员变量x,y;添加draw方法,让坦克自己控制自己的画法;添加Tank类处理按键的方法;根据Tank类修改TankClient类
面向对象的思考方法:1.细节隐藏,构建单独的类,首先考虑系统中有哪些类;
2.合适的方法应该出现在合适的类中
0.8
坦克向8个方向行走
步骤:添加记录按键状态的布尔值;添加代表方向的量(使用枚举);根据按键状态确定Tank方向;根据方向进行下一步的移动(move);
0.9
解决坦克只会往某一方向走的问题
原因:因为按下某个方向键之后,相应的boolean值都变成了true并且没有改成false,所以就会一直往某个方向走
步骤:在keyAdapter里面添加一个keyReleased方法就可以了.
1.0
添加子弹类
1.1
根据主战坦克的方向和位置,打出子弹
步骤:增加对ctrl键的处理
根据"坦克打出一发子弹"这句话,来确定不过坦克中的方法fire,其返回值为missile
根据坦克的方向和位置确定子弹的方向和位置并draw出来,然后返回
eclipse使用tips:按住ctrl键,鼠标对着方法,然后按下去就能跳到对应方法的方法体
这个版本有一定的难度,需要好好理解持有对方的引用这个用法的使用
1.2
功能:
为了解决坦克停下也能打出炮弹的问题—画出炮筒
步骤:
Tank类增加新的属性ptDir
每次move后根据Tank新的方向确定炮筒的方向
将炮筒用直线的形式表现出来
1.3
方法:1使用容器添加多发子弹: List<Missile > missile =new ArrayList<Missile >();
2.每按下ctril键往容器里添加一发炮弹
在tank.java中:
tc.missiles .add(m);
3.在屏幕上显示打了多少发子弹 g.drawString( "missiles
count:" + missiles //最后两个参数是画的位置
1.4
功能
解决炮弹不消亡的问题
解决坦克出界的问题
步骤:
加入控制炮弹生死的量 bLive (Missle )
当炮弹已经死去就不需要对其重画
当炮弹飞出边界就死亡
当炮弹死亡就从容器中去除
注意:
将思维转化为代码
debug
一步一步跟踪代码
为代码设置断点
Step into 和 step over 的概念
学会在运行过程中观测变量的值
1.5功能
画一辆敌人的坦克
步骤:
加入区别敌我的量good
根据敌我的不同设置不同的颜色
更新Tank的构造函数,加入good
TankClient中new 出敌人的坦克并画出
1.6
功能:
将敌人坦克击毙
分析:一颗子弹击中敌人坦克
步骤:
碰撞检测的辅助类Rectangle :
为Tank和Missle都加入getRect方法
public Rectangle getRect(){
return new Rectangle(x,y,WIDTH,HEIGHT);
}
Missle中加入hitTank(Tank)方法,返回布尔类型
public boolean hitTank(Tank t){
if(this.getRect().intersects(t.getRect())){
return ture;
}
return false;
}
当击中敌人坦克时,坦克被打死,子弹也死去
增加控制Tank生死的量live
private boolean live=true;
在Tank类中的draw方法中添加:if(!live) return;
如果死去就不画了
1.7
功能
加入爆炸
步骤:
添加爆炸类
用不同直径的圆模拟爆炸
加 入 live
加入位置属性
加入 draw 方法
爆炸应该存在于集合类中
TankClient 加入集合
将集合中的爆炸逐一画出(如果死去就去除)
击毙一辆坦克后应产生爆炸
hitTank 时应产生爆炸
添加一个Explode类,在里面定义爆炸的属性和方法,代码如图:
窗口关闭都必须建立监听类,有三种方式:
1.建立和Tankclient并排的类
2.写一个内部类。
3.写一个匿名类(匿名类的使用场合:类短小,不涉及将来的拓展,不涉及重要的业务逻辑)
这里采用第三种方法
设置不能改变窗口大小:this.setResizable(false);
0.3版本
画代表坦克的圆
重写paint方法,使用画笔是先得到当前画笔的颜色,再设置画笔的颜色
0.4版本
让坦克运动起来
步骤:将位置改为变量。
启动线程不断重画(思考:为什么启动线程进行重画,而不是每按下一个键进行重画。因为线程重画更均匀,更能控制重画的速度。第二,按键重画不能解决自动自动飞行的问题)
0.41
使用双缓冲消除闪烁现象
原因:刷星重画频率太快,paint方法还没有完成;逐条显示。
解决方法:将所有东西一次性画在虚拟的图片上,一次性显示出来
paint(graphics);//将画笔传递给paint方法
0.5
需求:使窗口大小容易改动
解决:将原来的窗口大小800*600改成常量便于以后更改
代码的重构可以方便程序的扩展
常量名一般大写,而且一般用public static final
0.6
控制坦克的运动轨迹
实现接口必须实现接口类的所有方法,而继承就不用
要知道用户使用哪个按键,必须通过getKeyCode()方法得到按键的虚拟码
swich语句中要注意有break
0.7
添加一百辆坦克
功能:将坦克单独包装成类.
步骤:建立Tank类,,为Tank类单独添加成员变量x,y;添加draw方法,让坦克自己控制自己的画法;添加Tank类处理按键的方法;根据Tank类修改TankClient类
面向对象的思考方法:1.细节隐藏,构建单独的类,首先考虑系统中有哪些类;
2.合适的方法应该出现在合适的类中
0.8
坦克向8个方向行走
步骤:添加记录按键状态的布尔值;添加代表方向的量(使用枚举);根据按键状态确定Tank方向;根据方向进行下一步的移动(move);
0.9
解决坦克只会往某一方向走的问题
原因:因为按下某个方向键之后,相应的boolean值都变成了true并且没有改成false,所以就会一直往某个方向走
步骤:在keyAdapter里面添加一个keyReleased方法就可以了.
1.0
添加子弹类
1.1
根据主战坦克的方向和位置,打出子弹
步骤:增加对ctrl键的处理
根据"坦克打出一发子弹"这句话,来确定不过坦克中的方法fire,其返回值为missile
根据坦克的方向和位置确定子弹的方向和位置并draw出来,然后返回
eclipse使用tips:按住ctrl键,鼠标对着方法,然后按下去就能跳到对应方法的方法体
这个版本有一定的难度,需要好好理解持有对方的引用这个用法的使用
1.2
功能:
为了解决坦克停下也能打出炮弹的问题—画出炮筒
步骤:
Tank类增加新的属性ptDir
每次move后根据Tank新的方向确定炮筒的方向
将炮筒用直线的形式表现出来
1.3
方法:1使用容器添加多发子弹: List<Missile > missile =new ArrayList<Missile >();
2.每按下ctril键往容器里添加一发炮弹
在tank.java中:
tc.missiles .add(m);
3.在屏幕上显示打了多少发子弹 g.drawString( "missiles
count:" + missiles //最后两个参数是画的位置
1.4
功能
解决炮弹不消亡的问题
解决坦克出界的问题
步骤:
加入控制炮弹生死的量 bLive (Missle )
当炮弹已经死去就不需要对其重画
当炮弹飞出边界就死亡
当炮弹死亡就从容器中去除
注意:
将思维转化为代码
debug
一步一步跟踪代码
为代码设置断点
Step into 和 step over 的概念
学会在运行过程中观测变量的值
1.5功能
画一辆敌人的坦克
步骤:
加入区别敌我的量good
根据敌我的不同设置不同的颜色
更新Tank的构造函数,加入good
TankClient中new 出敌人的坦克并画出
1.6
功能:
将敌人坦克击毙
分析:一颗子弹击中敌人坦克
步骤:
碰撞检测的辅助类Rectangle :
为Tank和Missle都加入getRect方法
public Rectangle getRect(){
return new Rectangle(x,y,WIDTH,HEIGHT);
}
Missle中加入hitTank(Tank)方法,返回布尔类型
public boolean hitTank(Tank t){
if(this.getRect().intersects(t.getRect())){
return ture;
}
return false;
}
当击中敌人坦克时,坦克被打死,子弹也死去
增加控制Tank生死的量live
private boolean live=true;
在Tank类中的draw方法中添加:if(!live) return;
如果死去就不画了
1.7
功能
加入爆炸
步骤:
添加爆炸类
用不同直径的圆模拟爆炸
加 入 live
加入位置属性
加入 draw 方法
爆炸应该存在于集合类中
TankClient 加入集合
将集合中的爆炸逐一画出(如果死去就去除)
击毙一辆坦克后应产生爆炸
hitTank 时应产生爆炸
添加一个Explode类,在里面定义爆炸的属性和方法,代码如图:
相关文章推荐
- Java学习总结之坦克大战项目(三)
- JAVA项目学习之坦克大战图片版
- 坦克大战项目1.0版
- Java学习总结之坦克大战项目(一)
- Java小项目之坦克大战单机1.0版
- Java学习总结之坦克大战项目(完结版)
- 自学Unity笔记 坦克大战项目
- Java项目--坦克大战1
- Java学习总结之坦克大战项目(二)
- java小项目,坦克大战完整
- J2SE 坦克大战 马士兵(5)
- nyoj 284-坦克大战
- J2SE 坦克大战 马士兵(2)
- 坦克大战0.41-0.7
- 坦克大战图片版总结
- 坦克项目
- [黑马] 第2天 --Swing编程--坦克大战1.0版 (画出坦克)&&继续关注
- J2SE 坦克大战 马士兵(3)
- 坦克大战0.0-0.4
- 坦克大战0.41-0.7