坦克大战项目
来源:互联网 发布:hp1000扫描仪安装软件 编辑:程序博客网 时间:2024/04/29 22:53
0.2版本
步骤:
加入区别敌我的量good
根据敌我的不同设置不同的颜色
更新Tank的构造函数,加入good
TankClient中new 出敌人的坦克并画出
当击中敌人坦克时,坦克被打死,子弹也死去
增加控制Tank生死的量live
窗口关闭都必须建立监听类,有三种方式:
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新的方向确定炮筒的方向
将炮筒用直线的形式表现出来
为了解决坦克停下也能打出炮弹的问题—画出炮筒
步骤:
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 :
将敌人坦克击毙
分析:一颗子弹击中敌人坦克
步骤:
碰撞检测的辅助类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类,在里面定义爆炸的属性和方法,代码如图:
0 0
- 坦克大战项目
- 坦克大战项目总结
- 坦克大战项目总结
- 坦克大战 项目总结
- J2se小项目:坦克大战
- Unity3D项目之《坦克大战》
- Java项目--坦克大战1
- 项目:简单实现坦克大战
- Java项目实战:坦克大战(1)
- 小项目之坦克大战步骤
- 图片版坦克大战游戏项目说明
- 小项目の坦克大战游戏
- c语言写坦克大战项目要求
- java小项目,坦克大战完整
- C++实战项目:坦克大战(一)
- 自学Unity笔记 坦克大战项目
- Java小项目:图片版坦克大战
- Java小项目:坦克大战(二)
- mysql字符设置
- zoj 3310 - Unrequited Love
- distributor之Interrupt Set-Enable Registers, GICD_ISENABLERn
- JAVACC 入门(转载)
- OpenERP-Java调用XML-RPC接口示例(Examples for calling XML-RPC interfaces by Java)
- 坦克大战项目
- POJ1656
- 面试题之输入一个数代表多少字节,输出其对应的GBytes/Mbytes/Kbytes/Bytes
- How to create iOS 8 Today extension and share data with containing app – tutorial
- C++中stl使用过程中的一些tips
- 分治法之快速排序
- hdu 5033 Building
- c++学习笔记之友元
- 调用dll的API