项目坦克大战设计报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《JA V A程序开发课程设计》项目设计
项目名称:TankWar 软件
专业:软件工程班级:13软工1班姓名:毛晨光学号:24
一、需求分析:
基本功能:
1.玩家控制的坦克能够四处移动并且打击敌方坦克;
2.敌方坦克能够随机四处移动并且打击玩家控制的坦克;
3.玩家控制的坦克拥有血量,而敌方坦克没有;
4.坦克受到攻击时血条会缩短;
5.敌方坦克被消灭完之后,提示游戏胜利;
6.用户方坦克被消灭后提示游戏结束;
特色功能:
1.坦克具有图片,不单单只是个圈圈。
2.增加了血包功能,地图上会随机出现一个血包,我方坦克开过会增加
血量。
二、系统设计:
类:实现游戏界面地图的初始化。
类:绘制和重绘功能。
:监听用户的键盘输入。
类:实现坦克的初始化,绘制,移动,发射等功能。
:实现敌方坦克的初始化,绘制,移动,发射等功能。
类:实现炮弹的初始化,绘制,移动,攻击功能。
类:实现爆炸的初始化。绘制功能,爆炸效果由绘制半径从小到大再到小的圆实现。
类:包含枚举。
类:用于实现血包的功能。
三、功能实现。
一.绘制地图功能:
public class TankMap extends Frame{
tart();
}
制坦克功能:public class Tank {
方坦克的绘制方法
public class EnemyTank extends Tank{
弹绘制方法public class Shell {
ntersects())){
ntersects())){
"hittanks");
(false);
=false;
Explor ex=new Explor(x-3,y-3,;
return true;
}
}
return true;
}
}
五.爆炸类源代码:
public class Explor {
举方向源代码
package tank;
机血包产生的方法
public class Blood
{
public final int WIDTH=30,HEIGHT=30;
public int x= new Random().nextInt(800),y= new Random().nextInt(600);
TankMap tm;
public void draw(Graphics g)
{
ImageIcon icon=new ImageIcon("");
Image tankImage=();
(tankImage,x,y,null);
}
public boolean bloodb(Tank t){ if&&().intersects()))
{
if()<=60)
{
"blood up");
()+40);
}
else
{
"blood up");
(100);
}
}
return false;
}
public Rectangle getRec(){
return new Rectangle,,,;
}
}
四、总结。
1.如何解决地图频闪的问题
用双缓冲机制来画出屏幕,双缓冲机制是通过虚拟出一张图片,
将屏幕画在这张虚拟的图片上,在将这张虚拟的图片呈现在屏幕
上。
2.如何确定炮弹击中坦克
炮弹类和坦克类里都有一个getRec()方法来获取炮弹和坦克的
当前位置,当炮弹的getRec()与坦克的getRec()相交,则判
定炮弹击中坦克。
3.如何限制坦克在地区上行驶,不会跑出规定的区域
当坦克移动超出地图大小,则立马让坦克返回到地图边缘加坦克
大小的位置。
4.如何自行设置发射炮弹的按键
在坦克类中原本是监听f键,当f键按下后发射炮弹,只需要修改
监听的键就可以改变发射炮弹的按键。
5.如何处理多个炮弹的产生、消失
炮弹类有个方法isLive(),当用户按下f键或者地方坦克随机数
达到要求是isLive()为true,开始画炮弹,即炮弹产生。当炮弹
的getRec()与普通墙、金属墙、坦克的getRec()相交,或者
子弹移动出地图外,isLive()为faise,则立马从地图上remove
炮弹,即炮弹消失。
五、软件说明书
首先打开eclipse,然后将坦克大战的文件夹导入进去,然后运行程序,上下左右键控制坦克的移动,开火,己方坦克遇到敌方坦克的炮弹会
扣血,当血量扣光是会跳出Game over字样,表示游戏结束。