局域网坦克大战-第3组_第1页
局域网坦克大战-第3组_第2页
局域网坦克大战-第3组_第3页
局域网坦克大战-第3组_第4页
局域网坦克大战-第3组_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、榆林学院本科毕业论文(设计)软件工程课程设计报告题 目局域网坦克大战院 系信息工程学院班 级13计本2组 长组 员指导教师局域网坦克大战系统设计与实现目录目录I一、 目的、要求1二、 任务分配11 局域网坦克大战系统分析21.1 系统需求分析21.1.1 系统功能需求21.1.2 系统性能分析21.2系统用例分析31.2.1 游戏总体流程设计51.2.2 敌方坦克用例分析61.2.3游戏玩家坦克用例分析62 局域网坦克大战系统设计82.1 总体设计82.2 系统功能设计82.3 数据库设计82.3.1 数据库概念结构设计92.3.2 数据库逻辑结构设计92.3.3 数据库物理结构设计102.3

2、.4 数据库整体关系103 局域网坦克大战系统实现113.1 系统环境113.2 数据库连接113.3模块的实现113.3.1用户登录与注册113.3.2己方坦克运动123.3.3敌方坦克运动133.3.4能否穿越墙体133.3.5子弹能否升153.3.6游戏的成功与失败164 局域网坦克大战系统测试174.1测试的意义和目的174.2 功能测试174.2.1 登录注册测试174.2.2坦克运动测试如下194.4.3测试能否穿越墙体204.4.4测试子弹的升级214.4.5测试225 总结24I局域网坦克大战系统设计与实现一、 目的、要求通过软件开发的实践训练,进一步掌握软件工程的方法和技术,

3、提高软件开发的实际能力,培养工程设计能力和综合分析、解决问题的能力。具体如下:1. 学习和实践在分析和设计计算机应用系统所需要的知识,包括面向对象的系统分析与设计,编码和测试方面的知识;2. 熟悉自动化的软件开发工具Visio 或者Rational Rose,并将其运用于软件开发的全过程;3. 进一步加强和提高软件工程文档的编写能力;4. 培养协作能力和团队精神。二、 任务分配任务负责人参与人备注需求分析总体设计详细设计系统实现与测试1 局域网坦克大战系统分析1.1 系统需求分析 90坦克大战无疑是坦克游戏中的经典之作。这款游戏对90后的我们的童年也有着极大的意义,它使我们开始对游戏产生了浓厚

4、的兴趣,亦给我们的童年生活记上了浓墨重彩的一笔。因此,我们将在PC端还原这款经典之作,以表达我们的喜爱与敬意。1.1.1 系统功能需求本系统的坦克大战是基于Java语言设计开发的,具有高超的人工智能,精美的图形处理,支持单机运行和网络对战的坦克射击游戏。比之前网络上实现的游戏更加方便,快捷,智能。游戏基本玩法较简单,游戏可一人电脑作战,每次电脑方有坦克10辆,游戏以消灭全部敌方坦克过关为目的。在这过程中,坦克有机会得到血块来添加生命值,从而变得更加强大,也能利用各种有利地形来阻击敌人。游戏设置了墙面,电脑方坦克不能穿越墙面射击玩家坦克,而玩家坦克可随意穿越墙面打击电脑方坦克,这一游戏特权。还有

5、给玩家坦克设置超级炮弹,当电脑方坦克数量过多时,玩家坦克可以发射超级炮弹打击敌方。主要新增的功能简单罗列如下:(1) 坦克可以上下左右移动;(2)坦克可以发子弹(可以连发);(3)我的坦克击中敌人坦克时,敌人就消失(显示爆炸效果);(4)我被击中后显示爆炸效果;(5)防止敌人坦克重叠运动;(6)玩游戏时可以暂停和继续;(7)记录玩家的成绩。1.1.2 系统性能分析设计一个图形用户界面,将所有游戏的元素都能在此用于界面上表现出来,界面能够接受用户的操作,具有人机交互功能。用户可以选择重新开始游戏,退出游戏。界面中包含我方坦克和敌方坦克发出的子弹和爆炸后的效果。坦克:坦克分为两种,敌方坦克均可以发

6、射子弹,可以改变路径的行走,且在行走过程中遇到墙等阻碍物和游戏边界时改变方向,而不能一直盯着障碍物不放。坦克之间不能穿越,碰撞到后自动调节方向。墙:游戏中的边界自己的坦克与敌人的坦克都不能越过,坦克的子弹也不能穿过。子弹:子弹可以由敌方和用户方发射,且发射出去的子弹可以直线移动,直到碰到障碍物就消失,子弹可以穿越树林和河流。敌方坦克受到一颗子弹攻击会爆炸从而导致死亡,死亡后坦克消失。用户方受到子弹攻击后会减少寿命,且受到四次攻击则死亡,此时如还有敌方坦克存在,则用户方输掉本次游戏。爆炸:当子弹射击到坦克身上时,要产生爆炸效果。方向:坦克和子弹都有方向,可以选择上下左右四个方向,且子弹的方向从属

7、于坦克的方向。1.2系统用例分析对于该局域网坦克大战系统的实现,其顶层系统用例图如下所示:图1-1 局域网坦克大战系统顶层用例图在系统中存在两个主要模块:客户端和服务器端,对于服务器端的UML类图如下图所示:图1-2局域网坦克大战服务器端类图对于客户端的UML类图如下图所示:图1-3局域网坦克大战客户端类图1.2.1 游戏总体流程设计对于该系统的游戏总体流程图如图示:图 1-4 游戏总体流程图1.2.2 敌方坦克用例分析在塔克大战游戏中,主要存在两种角色,一种是敌方坦克,一种是游戏玩家坦克,对于敌方坦克的用例分析图如图示:图1-5敌方坦克用例分析图1.2.3游戏玩家坦克用例分析对于游戏玩家来讲

8、,也同时存在两种角色:一种是服务器端即就是主机,另一种是客户端,也就是副机,对于副机,其坦克用例图如下图示:图1-6客户端玩家坦克用例分析图当然,对于该系统,在客户端游戏玩家存在的同时,服务器端也同时存在,对于服务器端,他不仅要实现建筑等功能,同时他也在一定程度上限制或者说是影响着客户端坦克,对于服务器端的坦克用例图如下图示:图1-7服务器端玩家坦克用例分析图242 局域网坦克大战系统设计2.1 总体设计对于该局域网坦克大战游戏主要分为两个部分:游戏客户端以及服务器端,因此对该系统的系统总体设计,如下图示:图2-1 总体设计图2.2 系统功能设计对于该局域网坦克大战游戏的系统结构图,如下图示:

9、图 2-2 系统结构图2.3 数据库设计对于任何一个系统,数据库的存在都是至关重要的,数据库在一定程度上尽可能的减少数据的冗余,避免由于多个用户一起访问而导致的问题图 2-3 数据库设计图2.3.1 数据库概念结构设计在数据库的设计过程,我们多采用E-R图的模式对于数据库的关系模型进行表示,所谓E-R图,即就是实体联系图,用方框表示实体,菱形表示联系,而椭圆形表示的是每一个实体所对应的属性,其中联系包括:1对1,1对多,多对多。那么坦克大战的数据库的E-R图如下图示:图 2-4 数据库E-R图2.3.2 数据库逻辑结构设计按照E-R图到逻辑结构的转换规则,有关局域网坦克大战系统的实体联系可以转

10、换为下列关系模型(其中下划线表示的是数据表中的属性是主键):T_Users(id,nickName,sex,age,score,date_time,pass)2.3.3 数据库物理结构设计表2-1 管理员表(T_Users)序号Name TypeNullDefaultExtra1Idint(11)NoAuto_increment2nicknamevarchar(10)Yes3Sexvarchar(3)Yes4Ageint(11)Yes5Scoreint(11)Yes6Date_timetimestampNoCURRENT_TIMESTAMP7passnt(11)No2.3.4 数据库整体关系图

11、2-5数据库整体关系图3 局域网坦克大战系统实现3.1 系统环境硬件要求能运行Windows9.X操作系统的微机系统。JAVA程序设计语言及相应的集成开发环境,J2SDK和ECLIPSE开发工具。3.2 数据库连接/* 数据库连接核心代码*/try Class.forName(com.mysql.jdbc.Driver);connection = DriverManager.getConnection(jdbc:mysql:/localhost:3306/tank?useUnicode=true&characterEncoding=UTF-8,mk, 0702); catch (Excepti

12、on e) / TODO: handle exceptionSystem.err.println(装载 JDBC/ODBC 驱动程序失败。);System.out.println(找不到服务);e.printStackTrace();return connection;3.3 模块的实现3.3.1用户登录与注册进入首页后,已经账号的用户通过登录进入本系统;没有账号的可以注册为用户。后续操作:进行注册信息存储(注册信息填写是否正确,并将数据存入数据库当中);进行登录信息验证(校验用户名和密码是否正确),正确后才可以进入游戏。登录设计流程如图3-1。图3-1 登录设计流程图3.3.2己方坦克运动游

13、戏中坦克需要能往上、下、左、右四个方向运动,故须设立4个按键,使其能操作坦克,另须设一个键控制坦克开火。为方便操作,本游戏设置分别表示上下左右,键盘空格,表示开火。/* 已方坦克发射子弹,转向*/public void keyPressed(KeyEvent e) +times;int key = e.getKeyCode();if (times = 1) / 当时第一次时,更新方向if (key = KeyEvent.VK_UP) jpl.setHostDir(1);/ 将方向设为上 else if (key = KeyEvent.VK_DOWN) jpl.setHostDir(2);/ 将

14、方向设为下 else if (key = KeyEvent.VK_LEFT) jpl.setHostDir(3);/ 将方向设为左 else if (key = KeyEvent.VK_RIGHT) jpl.setHostDir(4);/ 将方向设为右/ 调用声音if (key = 37 | key = 38 | key = 39 | key = 40) jpl.hostMove();/ 移动坦克public void keyReleased(KeyEvent e) times = 0;if (e.getKeyCode() = 32) / 当为空格是,发射子弹jpl.hostFire(); /

15、 发射子弹public void setHostDir(int direction) if (this.start = true) host_tank.setDirection(direction);3.3.3敌方坦克运动敌方出现6个坦克,地图位置随机出现,随机发射子弹,随机往别的敌方运动。/*敌方坦克随机出现并随机发射子弹*/for (int i = 0; i 0.8) bad_tanki.setDirection(new Random().nextInt(4) + 1);if (Math.random() 0.9) / 这里让坦克发射子弹tankFire(bad_tanki);/ 坦克可不

16、可以移动if (canMove(bad_tanki) bad_tanki.move(); else bad_tanki.setDirection(new Random().nextInt(4) + 1);/ 发送每个坦克的信息this.sendMsg( + i + /+ bad_tanki.getDirection() + /+ bad_tanki.getTank_x() + /+ bad_tanki.getTank_y();bad_tanki.drawTank(g);/ 绘画坦克3.3.4能否穿越墙体测试坦克能否穿越墙体,墙体有:砖墙、水地、铁墙。其中子弹可以穿越水地,子弹可以打破砖墙。不能

17、打破铁墙。/*坦克穿越墙体等,子弹击中之后墙体消失*/if (tank_id 2) / 小于2 表示玩家的子弹for (int i = 0; i bad_tank.length; i+) if (bullet.getRec().intersects(bad_tanki.getRec()& bad_tanki.isLive() = true) bad_tanki.setBlood(bad_tanki.getBlood()- bullet.getHitPower();/ 发送消息this.sendMsg( + bad_tanki.getId() + / + bullet.getHitPower()

18、;if (bad_tanki.getBlood() = 0) bad_tanki.setLive(false);/ 将击中的坦克设为死亡if (tank_id = 0) / 是主机时host_tank.setScore(host_tank.getScore() + 100);this.sendMsg( + 0);/ 发送成绩信息 else / 是副机时client_tank.setScore(client_tank.getScore() + 100);this.sendMsg( + 1);/ 发送消息this.sendMsg( + id);/ 发送移除子弹的消息this.m_bullet.re

19、move(id);return true; else if (bullet.getRec().intersects(symbol.getRec() System.out.println(击中鹰);symbol.setLive(false);this.sendMsg();return true;/ 这里判断物体/ 这里判断物体 去除物体for (int i = 0; i Bricks.size(); i+) if (bullet.getRec().intersects(Bricks.get(i).getRec()& Bricks.get(i).isLive() /发送移除砖块的信息this.se

20、ndMsg(+i); Bricks.remove(i);System.out.println(移除成功);this.sendMsg( + id); this.m_bullet.remove(id);return true;for (int i = 0; i Irons.size(); i+) if (bullet.getRec().intersects(Irons.get(i).getRec()& Irons.get(i).isLive() if (bullet.getStyle() = 1) Irons.get(i).setBlood(Irons.get(i).getBlood() - bu

21、llet.getHitPower();this.sendMsg(+i+/+bullet.getHitPower(); if (Irons.get(i).getBlood() = 0) Irons.get(i).setLive(false);Irons.get(i).setBlood(0);this.sendMsg(+i);Irons.remove(i);System.out.println(钢快 移除);this.sendMsg( + id);/ 发送移除子弹的消息this.m_bullet.remove(id);return true; else / 普通子弹打不穿this.sendMsg(

22、 + id);/ 发送移除子弹的消息this.m_bullet.remove(id);return true;3.3.5子弹能否升游戏随机出现子弹升级包,当己方坦克运动到地图子弹升级包位置,己方坦克可以升级,子弹可以打破铁墙。if (tank.getId() = 1) if (tank.getRec().intersects(fire.getRec() System.out.println(吃了升级子弹);bulletStyleS = 1;fire.setLive(false);3.3.6游戏的成功与失败基地被砖墙保卫,敌方坦克打破砖墙,摧毁基地,游戏失败。反之保护基地完整,己方坦克打死所有地

23、方坦克,升级下一关。/*游戏开始,过关或者游戏失败等提示信息绘制*/if (host_tank.isLive() = false & client_tank.isLive() = false| symbol.isLive() = false) / 绘制游戏结束的提示信息g.setFont(new Font(宋体, Font.BOLD, 80);g.setColor(Color.RED);g.drawString(游戏结束, 240, 300);/ 绘制游戏结束提示信息if(updateScore=true)SqlInfoImpl sql=new SqlInfoImpl();sql.update

24、Score(host_tank.getScore(),father.jtfNickName.getText().trim();sql.updateScore(client_tank.getScore(),father.clientName);father.jpView = new TableData().getTableDate();father.jpr.add(father.jpView);father.jpr.updateUI();updateScore=false;elseint j=0; /设置变量是验证坦克是否全部死亡for(int i=0;ibad_tank.length;i+)i

25、f(bad_tanki.isLive()=true)+j;if(j=0)g.setFont(new Font(宋体, Font.BOLD, 80);g.setColor(Color.GREEN);g.drawString(游戏过关, 240, 300);/ 绘制游戏结束提示信息if(updateScore=true)SqlInfoImpl sql=new SqlInfoImpl();sql.updateScore(host_tank.getScore(),father.jtfNickName.getText().trim();sql.updateScore(client_tank.getSco

26、re(),father.clientName);father.jpView = new TableData().getTableDate();father.jpr.updateUI();updateScore=false;4 局域网坦克大战系统测试4.1测试的意义和目的软件测试的意义是是非常重要的,这点想必大家都明白,不可能存在没有缺陷的软件。软件是人开发出来的,人不可避免的会产生错误,而产生软件缺陷。软件缺陷可能在项目初期就存在了。随着软件不断的开发,缺陷造成的影响不断扩大,可能造成无法弥补的损害。所以,软件测试的目标是:以最少的代价找出软件存在的错误和缺陷。在软件系统的开发过程中,软件测试

27、是保证软件质量的关键,它是需求分析、设计和编码的最后审核。确实做到尽可能的将软件中存在的问题找出来,以保证软件质量。软件测试的目的是对软件需求分析、设计和编码的审查,通过全面的测试,发现各阶段的问题。软件分析、设计、编码是为了建立一个系统结构,实现系统;而测试主要任务是实现软件开发问题,“破坏”已经做好的软件系统。都是为了能够做出一个好的软件系统。4.2 功能测试 一个项目而言,测试的重要性不言而喻,测试主要分为单元测试等,对于该坦克大战系统而言,功能测试详情表如下图示:表4-1功能测试详情表功能测试 是否正常运行 注册 Yes登录 Yes 己方坦克运动 Yes 敌方坦克运动 Yes 能否穿越

28、墙体 No 子弹的升级 Yes 游戏的失败与成功 Yes4.2.1 登录注册测试(1) 注册测试如下:(2) 测试描述:如表4-2,等注册的信息符合要求并且用户名没被注册的情况下可以注册成功;当有注册信息不符合要求时会在页面出现提示信息。表4-2 用户注册测试用例编号测试项操作步骤预期结果输入数据实际结果结果比较01用户注册在用户注册页输入注册信息所有信息符合规范,且会员登录名没有被注册 不符合用户名,密码不能为空符合02用户注册在用户注册页输入注册信息所有信息符合规范,且会员登录名没有被注册xslxsl符合,用户注册成功符合输入第一组测试数据后,出现图4-1。图4-1 注册页面表4-3 用户

29、注册测试用例编号测试项操作步骤预期结果输入数据实际结果结果比较01用户登录在用户登录页输入登录信息所有信息符合规范,且会员没有注册 xslxsl不符合,登录失败符合02用户登录在用户登录页输入登录信息所有信息符合规范,且会员已注册xslxsl符合,用户登录成功符合测试描述:如表4-3,登录的信息符合要求并且用户名已被注册的情况下可以登录成功;当没有注册的用户登录时出现如图4-2 。图4-2 登录页面4.2.2坦克运动测试如下对于坦克而言主要分为玩家坦克和敌方坦克,所以,对于坦克运行的测试如下图示:表4-4 坦克运动测试用例编号测试项操作步骤预期结果实际结果结果比较01己方坦克在游戏界面下操作坦

30、克运动控制运动射击没有问题符合,可控制运动射击符合02敌方坦克在游戏界面下敌方坦克自助运动敌方坦克自助运动射击符合,自助运动射击符合4.4.3测试能否穿越墙体在经典版的90版坦克大战中,功能相对来说比较完善,这版坦克大战一直以来都是我们记忆深处的不可磨灭的一款可以记录我们成长,见证我们成长得一款游戏,在这款游戏中,我们不仅要守护我们的大本营,在此同时,我们也要通过操控自己的游戏坦克,去干掉对方的坦克,以至于最终赢得游戏,在这款游戏中,同时也存在了其他的功能,比如敌方坦克或者游戏玩家坦克可以穿过草坪,也可以通过击中坦克,最终使得砖块变为铁块等,为了尽可能的还原经典,在我们的这次的课程设计中,虽然

31、没有能够完全还原经典的坦克大战,但是,对于基本的一些功能,我们都做以实现,比如经典坦克的穿过草坪,子弹升级等,也存在了这样的功能,比如,子弹升级,子弹穿过墙体并击中墙体,最终使得墙体消失这样的一个过程。在下图中,我们就不管是敌方坦克还是游戏玩家坦克能否穿过墙体做以简单的测试,其测试过程如下图所示:表4-5测试能否穿越墙体用例编号测试项操作步骤预期结果实际结果结果比较01坦克穿越控制坦克穿越墙体无法穿越墙体符合,无法穿越符合02子弹穿越测试子弹穿越墙体子弹可以穿透水墙,砖墙铁墙无法穿越符合, 可以穿越水墙,砖墙铁墙无法穿越符合对于该课程设计中他的子弹测试结果如下图示:图4-3 子弹穿过墙体测试4

32、.4.4测试子弹的升级在本次课程设计中,我们对于子弹的升级测试也是一个引人注意的地方,对于子弹升级的测试如下图示:表4-6测试子弹升级用例编号测试项操作步骤预期结果实际结果结果比较01子弹升级坦克吃升级包,子弹升级可以打破砖墙符合,可以打破符合为了还原最经典的坦克大战游戏,在这款游戏中,同时也存在了其他的功能,比如敌方坦克或者游戏玩家坦克可以穿过草坪,也可以通过击中坦克,最终使得砖块变为铁块等,为了尽可能的还原经典,在我们的这次的课程设计中,虽然没有能够完全还原经典的坦克大战,但是,对于基本的一些功能,我们都做以实现,比如经典坦克的穿过草坪,子弹升级等,也存在了这样的功能,比如,子弹升级,子弹穿过墙体并击中墙体,最终使得墙体消失这样的一个过

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论