坦克大战报告.doc

上传人:大张伟 文档编号:5727084 上传时间:2020-07-24 格式:DOC 页数:17 大小:392KB
返回 下载 相关 举报
坦克大战报告.doc_第1页
第1页 / 共17页
坦克大战报告.doc_第2页
第2页 / 共17页
坦克大战报告.doc_第3页
第3页 / 共17页
坦克大战报告.doc_第4页
第4页 / 共17页
坦克大战报告.doc_第5页
第5页 / 共17页
点击查看更多>>
资源描述

《坦克大战报告.doc》由会员分享,可在线阅读,更多相关《坦克大战报告.doc(17页珍藏版)》请在三一文库上搜索。

1、JAVA程序开发课程设计课程大作业 专 业: 软 件 工 程 班 级: 14软工2 学 号: 1422130236 姓 名: 张敏慧 项目名称:坦克大战一、 需求分析:1. 基本功能:(1) 我方坦克能上下移动(2) 敌方坦克能自由移动(3) 我方坦克能开火(4) 敌方坦克能自由开火(5) 子弹打中我方,会减血,我方打中敌方,敌死。敌打敌不会受伤(6) 有血条,主界面2. 扩展功能(1) 用图形来表示坦克和炮弹(2) 用图形来表示中子弹后的爆炸效果(3) 地图上存在金属墙,我方坦克和子弹不能穿过(4) 地图上存在曹村,我方和敌方坦克能够自由穿过,子弹也一样(5) 地图上会随机出现加血包(6)

2、我方坦克遇到加血包,会增加生命(7) 游戏开始时,会启动背景音乐(8) 我方坦克死亡时,提示游戏结束二、系统设计: 1. BgMusic(1)主要功能:添加背景音乐TankMap类通过调用该类,并读取BgMusic包下面的背景音乐文件(2)成员属性:1)filename,用于记录读取到的文件名,并处理2)nBytesRead,这是缓存,用于读取音乐文件,缓存下来(3)成员方法: 1)run,播放背景音乐2) 构造方法BgMusic,将读取到的文件名,存储到成员属性filename中2. Blood(1)主要功能:地图中添加血包(2)成员属性:1)x,y,width,height,血包的位置以及

3、宽高2)rpos_x,rpos_y,用于记录血包移动后的位置3)tm,调用TankMap类,并在地图中放血包4)live,血包的存活,被坦克吃了就消失5) blood,用于记录血包的存活6)step,血包的步长7)stepMove,血包走过总的步长(3)成员方法: 1)Blood,构造方法,将血包放到地图中2) draw,画血包3) move,血包的移动4) getRect,获取血包的位置3. Tank(1)主要功能:地图中添加我方坦克(2)成员属性:1)WIDTH,HEIGHT,xspeed,yspeed,坦克的宽高和x,y上的移动速度2)x,y,direction,我方坦克出现的初始位置和

4、初始状态3)tm,调用TankMap类,并在地图中放坦克4)isLive,我方坦克是否存活5) isgood,坦克属于哪一方6) life,我方坦克的初始生命值7) step,使用Blood类,血包随机出现8)upimage,rightimage,downimage,leftimage,oldimage,存放坦克图片(3)成员方法: 1)draw,绘制坦克 2)move,根据移动方向,移动坦克,不允许坦克移除地图 3)checkDirection,确定用户单击的方向键,修正坦克即将移动方向 4)fire,发射子弹 5)getRec,返回坦克当前位置,便于判断是否与敌方坦克或子弹重叠 6)sta

5、y,坦克撞墙的处理 7)eat,我方坦克吃血包 4.EnemyTank(1)主要功能:地图中添加敌方坦克(2)成员属性:1)WIDTH,HEIGHT,xspeed,yspeed,坦克的宽高和x,y上的移动速度2)x,y,direction,我方坦克出现的初始位置和初始状态3)tm,调用TankMap类,并在地图中放坦克4)islive,我方坦克是否存活5)enemytank,存放坦克图片(3)成员方法: 1)draw,绘制坦克 2)move,根据移动方向,移动坦克,不允许坦克移除地图 3)fire,发射子弹 4.Explor(1)主要功能:子弹打中坦克,发生爆炸效果(2)成员属性:1)x,y,

6、坦克出现的位置2)tm,调用TankMap类,并在地图中放爆炸3)islive,我方坦克是否存活 (3)成员方法: 1)draw,绘制爆炸 2)Explor,爆炸的构造方法 5.Help(1)主要功能:给用户游戏帮助(2)成员属性:1)help,将帮助的文字存放在字符串中 (3)成员方法: 1)getHelpDialog,调用帮助 6.Shell(1)主要功能:设计子弹(2)成员属性:1)WIDTH,HEIGHT,xspeed,yspeed,子弹的宽高和x,y上的移动速度2)x,y,direction,子弹出现的位置和方向3)tm,调用TankMap类,并在地图中放子弹4)isLive,子弹是

7、否打中坦克5)isgood,是否是我方6)Image,加载子弹图片 (3)成员方法: 1)draw,绘制子弹 2)move,根据移动方向,移动坦克,得到子弹的移动 3)getRec,获取坦克的位置 4)hitTanks,子弹打坦克 5)hitWalls,子弹打墙 7.Wall(1)主要功能:给地图添加墙(2)成员属性:1)x,y,w,h,墙的位置和宽度高度2)tc,地图 (3)成员方法: 1)draw,画墙 2)getRect,获取墙的位置8.TankMap(1)主要功能:地图(2)成员属性:1)MAPWIDTH,MAPHEIGHT,地图的宽高2)t,我方坦克3)bufferImage,缓冲,

8、用于解决闪屏4)forestimage,草丛5)shells,EnemyTank,Blood,Explors泛型6)enemyCount,敌方坦克数量7)w1,w2,不可穿过的墙 (3)成员方法: 1)init,初始化地图 2)paint,画血包,地图,坦克等 3)addBloods,加血 4)update,解决闪屏 三、功能实现:1. 功能1:我方,敌方坦克上下移动并开火(1) 操作说明 游戏启动时,按上下左右键可以是我方坦克移动,按F键可以开火 (2)关键代码/绘制坦克public void draw(Graphics g)/根据不同方向加载不同图片,读取的时候需要处理异常tryswitc

9、h(direction)case STOP:case UP:upimage=ImageIO.read(new File(src/images/up.gif);oldimage=upimage;g.drawImage(upimage, x, y, null);break;case RIGHT:rightimage=ImageIO.read(new File(src/images/right.gif);oldimage=rightimage;g.drawImage(rightimage, x, y, null);break;case DOWN:downimage=ImageIO.read(new

10、File(src/images/down.gif);oldimage=downimage;g.drawImage(downimage, x, y, null);break;case LEFT:leftimage=ImageIO.read(new File(src/images/left.gif);oldimage=leftimage;g.drawImage(leftimage, x, y, null);break;catch (IOException e) ;g.drawImage(oldimage, x, y, null);move(direction);/根据移动方向,移动坦克,不允许坦克

11、移出地图public void move(Direction d)/* 记录坦克原来的位置,撞墙可以回到原位置*/oldX=x;/记录坦克原来的位置,撞墙可以回到原位置oldY=y;if(d = Direction.STOP)else if(d = Direction.UP)y-=yspeed;if(y=800-WIDTH)x=800-WIDTH;else if(d=Direction.DOWN)y+=yspeed;if(y=600-HEIGHT)y=600-HEIGHT;else if(d=Direction.LEFT)x-=xspeed;2. 功能2:我方开火,敌方会爆炸,然后死亡。我方中

12、弹,会爆炸再扣血(1)操作说明 通过我方坦克的移动和开火,杀死敌方坦克(2)关键代码public boolean hitTank(Tank t)if(this.isLive&t.isLive&this.getRec().intersects(t.getRec()t.setLife(t.getLife()-20);if(t.getLife()0)t.setLive(false);t.direction=Direction.STOP;JOptionPane.showMessageDialog(tm,Game Over!);System.exit(0);this.isLive=false;Explo

13、r e=new Explor(x-3,y-3,this.tm);tm.explors.add(e);return true;return false;public boolean hitTanks(ListenemyTanks)EnemyTank e;for(int i=0;i= 400) rpos_x = Tank.random.nextInt(470);rpos_y = Tank.random.nextInt(480);blood = Tank.random.nextBoolean();live = true;step = 0;stepMove = -1;return;if(stepMov

14、e%5 = 0) move();Color c = g.getColor();/g.setColor(Color.MAGENTA);/g.fillRect(x - 3, y - 3, width + 6, height + 6);if(blood) g.setColor(Color.RED);g.fillRect(x, y, width, height);g.setColor(c);if(stepMove = 300) live = false;tm.bloods.remove(this);stepMove = 0;/* 补给移动*/public void move() if(step = p

15、os.length) step = 0;x = rpos_x + posstep0;y = rpos_y + posstep1;step +;public Rectangle getRect() return new Rectangle(x, y, width, height);public boolean isBlood() return blood;public boolean isLive() return live;public void setLive(boolean live) this.live = live;public void setStepMove(int stepMov

16、e) this.stepMove = stepMove;5. 功能5:金属墙和树林(1)操作说明 坦克可以穿过树林,但是穿不过金属墙,子弹也不能穿过金属墙 (2) 关键代码树林:/* 读取树林*/forestimage=ImageIO.read(new File(src/images/wall_forest.gif);穿不过金属墙:public class Wall /* x,y为墙的位置,w,h为宽度高度;*/int x,y,w,h;/* 持有引用*/TankMap tc;public Wall(int x, int y, int w, int h, TankMap tc) this.x =

17、 x;this.y = y;this.w = w;this.h = h;this.tc = tc;public void draw(Graphics g)Color c=g.getColor();g.setColor(Color.GRAY);g.fillRect(x,y,w,h);g.setColor(c);/* 得到墙的矩形区域;* return*/public Rectangle getRect()return new Rectangle(x,y,w,h);子弹不能穿过金属墙:/* 判断子弹是否撞墙* param w墙* returntrue,撞上,false,未撞上;*/public b

18、oolean hitsWall(Wall w)if(this.isLive&this.getRec().intersects(w.getRect()isLive=false;return true;return false;6. 功能6:帮助界面(1)操作说明 键盘按下F1,显示一个窗口,会显示帮助 (2)关键代码public class Help private static String help = 上:方向键上n +下:方向键下n +左:方向键左n +右:方向键右n +开火: F +帮助: F1n +红块加满血;public static void getHelpDialog() Di

19、alog h = new JOptionPane(help).createDialog(操作说明);h.setVisible(true);四、创新点:1能够放置树林,金属墙2子弹不能穿过金属墙3. 我方坦克不能穿过金属墙4.能够随机出现加血包,而且加血包会随机移动5.我方坦克吃到血包会加血6最后来个背景音乐五、总结:这次的坦克大战是我的第一个java程序。一开始,我就对游戏很感兴趣,很想了解游戏运行的原理。刚写程序的时候,什么都不懂什么都不会,认真地听着课,记着笔记,下课后认真复习上课所讲的。渐渐地,我学到了类与对象,属性,方法等1. 匿名对象的应用直接使用new+类的方式实现匿名对象。匿名对象只使用一次,这样就会产生垃圾,消耗内存,好在java提供了一个垃圾回收机制,简化了回收的操作。2. get和set方法 set和get方法分别是设置属性值,获取值。有了这两个方法,在类与类中可以相互调用,这就产生了现实中的人与其他物的关系等。3. ImageIO的使用 使用图片,需要在属性那边定义,然后在方法中读取图片六、软件说明书:键盘上下左右控制我方坦克移动,F表示开火,打敌方坦克F1提供帮助

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1