欢迎来到三一文库! | 帮助中心 三一文库31doc.com 一个上传文档投稿赚钱的网站
三一文库
全部分类
  • 研究报告>
  • 工作总结>
  • 合同范本>
  • 心得体会>
  • 工作报告>
  • 党团相关>
  • 幼儿/小学教育>
  • 高等教育>
  • 经济/贸易/财会>
  • 建筑/环境>
  • 金融/证券>
  • 医学/心理学>
  • ImageVerifierCode 换一换
    首页 三一文库 > 资源分类 > DOC文档下载  

    坦克大战报告.doc

    • 资源ID:5727084       资源大小:392KB        全文页数:17页
    • 资源格式: DOC        下载积分:4
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录   微博登录  
    二维码
    微信扫一扫登录
    下载资源需要4
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    坦克大战报告.doc

    JAVA程序开发课程设计课程大作业 专 业: 软 件 工 程 班 级: 14软工2 学 号: 1422130236 姓 名: 张敏慧 项目名称:坦克大战一、 需求分析:1. 基本功能:(1) 我方坦克能上下移动(2) 敌方坦克能自由移动(3) 我方坦克能开火(4) 敌方坦克能自由开火(5) 子弹打中我方,会减血,我方打中敌方,敌死。敌打敌不会受伤(6) 有血条,主界面2. 扩展功能(1) 用图形来表示坦克和炮弹(2) 用图形来表示中子弹后的爆炸效果(3) 地图上存在金属墙,我方坦克和子弹不能穿过(4) 地图上存在曹村,我方和敌方坦克能够自由穿过,子弹也一样(5) 地图上会随机出现加血包(6) 我方坦克遇到加血包,会增加生命(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,血包的位置以及宽高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,我方坦克出现的初始位置和初始状态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)stay,坦克撞墙的处理 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,坦克出现的位置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,子弹是否打中坦克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,缓冲,用于解决闪屏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)/根据不同方向加载不同图片,读取的时候需要处理异常tryswitch(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 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);/根据移动方向,移动坦克,不允许坦克移出地图public void move(Direction d)/* 记录坦克原来的位置,撞墙可以回到原位置*/oldX=x;/记录坦克原来的位置,撞墙可以回到原位置oldY=y;if(d = Direction.STOP)else if(d = Direction.UP)y-=yspeed;if(y<=HEIGHT)y=HEIGHT;else if(d=Direction.RIGHT)x+=xspeed;if(x>=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:我方开火,敌方会爆炸,然后死亡。我方中弹,会爆炸再扣血(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;Explor e=new Explor(x-3,y-3,this.tm);tm.explors.add(e);return true;return false;public boolean hitTanks(List<EnemyTank>enemyTanks)EnemyTank e;for(int i=0;i<enemyTanks.size();i+)e=enemyTanks.get(i);if(this.getRec().intersects(e.getRec()System.out.print("hittanks");e.setLive(false);tm.enemys.remove(e);this.isLive=false;Explor ex=new Explor(x-3,y-3,this.tm);tm.explors.add(ex);return true;return false;3. 功能3:加血(1)操作说明 当我方坦克血不够时,会随机产生一到两个加血包,加血包碰到我方的,会加满血 (2) 关键代码 4. 功能4:(1)操作说明 游戏启动时,按上下左右键可以是我方坦克移动,按F键可以开火 (2) 关键代码public class Blood int x, y, width, height;int rpos_x, rpos_y;private TankMap tm;private boolean live = false;private boolean blood;private int step = 0;private int stepMove = 0;/* 补给移动位置点集合*/int pos = 50, 80, 60, 80, 70, 80, 80, 90, 90, 100, 100, 110, 110, 120, 120, 130,130, 140, 140, 150, 150, 160, 140, 170, 130, 180, 120, 180, 110, 170, 100, 160,90, 150, 80, 140, 70, 130, 60, 120, 60, 110, 60, 100, 60, 90;public Blood(TankMap tm) width = 20;height = 20;this.tm = tm;/* 画出补给* param g*/public void draw(Graphics g) stepMove +;if(!live) if(stepMove >= 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(stepMove%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 = pos.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 stepMove) 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 = 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 boolean 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() Dialog 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提供帮助

    注意事项

    本文(坦克大战报告.doc)为本站会员(大张伟)主动上传,三一文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




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

    三一文库
    收起
    展开