项目-坦克大战-设计报告材料
- 格式:doc
- 大小:197.00 KB
- 文档页数:23
实用文案
文案大全
《JAVA程序开发课程设计》项目设计
项目名称:TankWar 软件
专业: 软件工程 班级:13软工1班 姓名:毛晨光 学号:
1322120124
一、 需求分析:
基本功能:
1.玩家控制的坦克能够四处移动并且打击敌方坦克;
2.敌方坦克能够随机四处移动并且打击玩家控制的坦克;
3.玩家控制的坦克拥有血量,而敌方坦克没有;
4.坦克受到攻击时血条会缩短;
5.敌方坦克被消灭完之后,提示游戏胜利;
6.用户方坦克被消灭后提示游戏结束;
特色功能:
1. 坦克具有图片,不单单只是个圈圈。
2. 增加了血包功能,地图上会随机出现一个血包,我方坦克开过会增加
血量。
二、系统设计:
1.TankMap类:实现游戏界面地图的初始化。
2.PainTread类:绘制和重绘功能。
3.DirectionHandler:监听用户的键盘输入。
4.Tank类:实现坦克的初始化,绘制,移动,发射等功能。
5.EnemyTank:实现敌方坦克的初始化,绘制,移动,发射等功能。
6.Shell类:实现炮弹的初始化,绘制,移动,攻击功能。
7.Explor类:实现爆炸的初始化。绘制功能,爆炸效果由绘制半径从小
到大再到小的圆实现 。
8.Direction类:包含枚举。
9.Blood类:用于实现血包的功能。
三、功能实现。
一.绘制地图功能:
public class TankMap extends Frame{
//定义地图的尺寸。
public static final int MAPWIDTH=800;
public static final int MAPHEIGHT=600;
//我方坦克
实用文案
文案大全
Tank t=null;
//定义随机出现的血包
Random r=new Random();
Image bufferImage=null;
public static java.util.List
//地方坦克集合
public static java.util.List
enemys=new ArrayList
public static java.util.List
//爆炸集合
public.static.java.util.List
java.util.ArrayList
//敌方坦克数量默认10个
public int enemyCount=5;
//主方法
public static void main(String[] args) {
TankMap tv=new TankMap();
tv.init();
}
public void drawImage(){
}
//地图初始化方法
public void init(){
//初始化地图
this.setSize(MAPWIDTH,MAPHEIGHT);
this.setTitle("TankWar");
this.setVisible(true);
//添加键盘监听器
this.addKeyListener(new DirectionHandler());
实用文案
文案大全
//添加穿口关闭监听器
this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent arg0){
System.exit(0);
}
});
//初始化我方坦克
t=new Tank(this);
//初始化敌方坦克
for(int i=0;i
enemys.add(new EnemyTank(40+30*i,80,Color.YELLOW));
}
//启动绘制线程
new Thread(new PaintThread()).start();
}
//@Override
public void paint(Graphics g)
{
//画地图
Color c=g.getColor();
g.setColor(Color.GREEN);
g.fillRect(0,0,MAPWIDTH,MAPHEIGHT);
g.setColor(Color.RED);
g.drawString("当前炮弹数目:"+shells.size(),20,40);
g.drawString("生命值:",20,60);
g.fillRect(65,55,t.getLife(),5);
g.setColor(c);
实用文案
文案大全
//画坦克
t.draw(g);
if(r.nextInt(10)==9 && bloods.size()==0)
bloods.add(new Blood());
if(r.nextInt(60)==7 && bloods.size()==1)
bloods.remove(0);
for(int i=0;i
et.draw(g);
}
//画爆炸
for(int i=0;i
实用文案
文案大全
e.draw(g);
}
//绘制血包 Blood b=bloods.get(i); //画炮弹
for(int i=0;i
b.bloodb(t);
b.draw(g);
}
for(int i=0;i
if(s.islive&&s.isgood){
s.hitTanks(enemys);
}else if(s.islive&&!s.isgood){
s.hitTank(t);
}
s.draw(g);
}
}
//双缓冲,防止游戏地图“频闪”
public void update(Graphics g){
paint(g);
if(bufferImage==null){
实用文案
文案大全
bufferImage=this.createImage(MAPWIDTH,MAPHEIGHT);
}
Graphics gbuffer=bufferImage.getGraphics();
Color c=gbuffer.getColor();
gbuffer.setColor(Color.GREEN);
gbuffer.fillRect(0, 0, MAPWIDTH, MAPHEIGHT);
gbuffer.setColor(Color.RED);
gbuffer.drawString("当前炮弹数目:"+shells.size(),20,40);
gbuffer.drawString("生命值:", 20, 60);
gbuffer.fillRect(65,55,t.getLife(),5);
gbuffer.setColor(c);
paint(gbuffer);
g.drawImage(bufferImage, 0, 0, null);
}
//内部类,主要通过调用repaint方法,实现绘图功能
class PaintThread implements Runnable{
@Override
public void run(){
while(true){
repaint();
try{
Thread.sleep(260);
}catch(InterruptedException e){
e.printStackTrace();
}
}
}
}
//内部类,键盘监听器
实用文案
文案大全
class DirectionHandler extends KeyAdapter{
@Override
public void keyPressed(KeyEvent arg0){
t.checkDirection(arg0);
}
}
二.绘制坦克功能:
public class Tank {
//坦克的尺寸和移动速度
public static final int WIDTH=50,HEIGHT=50,xspeed=5,yspeed=5;
//坦克的初始位置
public int x=400,y=300;
//坦克的初始化方向,STOP即停止,Direction是自定义的枚举常量,见
枚举源代码
public Direction direction=Direction.STOP;
//地图
TankMap tm;
//坦克是否存活
boolean isLive=true;
//坦克属于哪一方,true为用户方,false为敌方
boolean isgood=true;
//坦克初始化生命值
int life=100;
//定义坦克的初始化方向,以便插图坦克的图片
public int zhuanxiang=1;
//获取和设置存活状况
public boolean isLive(){
return isLive;
}