版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
炸弹人游戏的设计与实现--毕业(完整版)资料(可以直接使用,可编辑优秀版资料,欢迎下载)
炸弹人游戏的设计与实现--毕业(完整版)资料(可以直接使用,可编辑优秀版资料,欢迎下载)毕业设计炸弹人游戏的设计和实现学生: 指导教师:专业:计算机科学与技术所在单位:计算机科学与工程学院答辩日期:摘要J2SE称为Java标准版或Java标准平台。J2SE提供了标准的SDK开发平台。利用该平台可以开发Java桌面应用程序和低端的服务器应用程序,也可以开发JavaApplet程序。它实际上是一系列规范的集合,由JCP组织制定相关的JavaSpecificationRequest(JSR)并发布。本游戏中通过总结和分析JAVA游戏的开发流程和代码功能的设计,开发了一款炸弹人游戏,该游戏主要分为场景类、子弹类、炸弹人类、敌方炸弹人类、我方炸弹人类等几个类,玩家通过输入IP获得连接,能够实现敌方炸弹人和子弹的智能化运行,添加了草坪,河流,普通墙和钢墙,并给其赋予了自己特有的功能,同时游戏中还包含了记分系统,特殊武器的加入,以及一些帮助说明信息,另外,此游戏中不同的是在游戏中添加了通话功能,在游戏中使用了套接字Socket来完成客户端与服务器端的连接,采用了接口技术,是一个类可以实现多个接口,克服了Java单继承缺点。采用了线程的使用,充分利用和发挥了处理机与外围设备并行工作的能力。本软件接受了网络游戏的软硬件特性,J2SE的相关技术及本程序的分析和功能的具体实现,游戏界面美观,操作简单,功能齐全,是广大游戏爱好者都喜欢的一款网络游戏,具有一定的复杂性和可玩性。关键字:J2SE;C/S;炸弹人游戏ABSTRACTJ2SEJavacalledJavastandardversionorJavastandardplatform.TheSDKprovidesstandardJ2SEJavadevelopmentplatform.UsingthisplatformcancardhairJavadesktopapplicationsandlow-endserverapplication,alsocandevelopaJavaAppletprogram.ItisactuallyaseriesofstandardsetbytheJCPorganization,andmaketherelevantSpecificationthat(JSR)Javaandrelease.ThisgamethroughthesummaryandanalysisofthegamedevelopmentprocessandJAVAcodefunctiondesign,developanewtankwargame,thisgamemainlydividedintothesceneofclasses,bullets,tanktype,theenemytanksclass,ourtanksseveralkindofplayersenterIPgetconnectedbyenemytanks,canrealizetheintellectualizedoperationandbullets,addedthelawn,rivers,commonwallandsteelwall,andgiveitsendowedwithitsownpeculiarfunction,butthegamealsocontainsthescoringsystem,specialweaponstojoin,andsomehelpexplaininformation,inaddition,thegameisdifferentinthegameaddscallsinthegameusefunction,theSocketSockettocompletetheclientandtheserverconnection,adoptedinterfacetechnology,isaclasscanimplementmultipleinterfaces,toovercometheshortcomings.JAVAsingleinheritanceBytheuseofthethread,fullyusedandplayedaprocessorandperipheralsparallelworkability.Thissoftwareacceptedthenetworkgame'ssoftwareandhardwarecharacteristics,therelevanttechnologyandtheJ2SEJavaprogramanalysisandfunctionofthespecificimplementation,gameinterfaceaesthetics,simpleoperation,completefunction,isbroadgamerslikeoneofnetworkgame,hassomeofthecomplexityandcanplaysex.Keywords:J2SEJava;C/S;Boommangames目录摘要 IABSTRACT II绪论 1第1章开发工具介绍 21.1网络游戏介绍 2网络游戏特征 2网络游戏的类型 3语言的特点 4中国网络游戏市场现状 51.2J2SE简介 5什么是J2SE 5平台体系结构 6体系结构优势 6编译运行的过程 7发环境及相关技术的介绍 7网络游戏开发概述 81.3绘图与混淆器 9提供低级绘制的Canvas类 9类 9格式 9有关绘图的一些技术 10混淆器(Obfuscator)的使用 10第2章炸弹人大战游戏的需求分析 112.1炸弹人大战游戏的任务概述 112.2本程序需解决的有关程序问题 112.3使用对象 122.4游戏功能 122.5建议软硬件配置 12第3章总体设计 133.1炸弹人大战游戏的总体功能 13第4章算法设计和主要技术 144.1炸弹人大战生成算法 14子弹产生的算法 14敌人炸弹人产生的算法 15爆炸效果产生算法 15大本营产生算法 16面板产生算法 17草坪产生算法 18河流产生算法 19普通墙的产生算法 19钢墙的产生算法 19主机服务器建立连接算法 204.2功能实现算法 20子弹功能算法 20炸弹人功能算法 20面板功能算法 20第5章炸弹人大战游戏的详细设计 225.1服务器的类 22主类ServerView类 22服务器模型ServerModel类 23子弹属性bullet类的实现 23轰炸类bomb类的实现 24面板类drawingPanel类的实现 24敌人炸弹人enemy类的实现 25游戏关数level类 25游戏者player类的实现 255.2客户端的类 25子弹属性bullet类的实现 25客户端模型ClientModel类的实现 26面板类drawingPanel类的实现 28说明控制类instructionHandler类的实现 285.3服务器类结构图 315.4客户端类结构图 31第6章游戏测试 336.1测试方法 336.2部分测试用例 336.2.1系统启动测试 336.2.2子弹发射测试 336.2.3玩家移动测试 346.2.4信息发送测试 346.2.5游戏暂停和继续的测试 346.2.6游戏胜利与失败的测试 356.3测试分析和小结 35第7章用户手册 367.1炸弹人大战运行环境配置 367.1.1软件配置 367.1.2硬件配置 367.2“炸弹人大战”游戏规则 367.3“炸弹人大战”游戏操作 36总结 37参考文献 38致谢 39绪论自从Java问世以来,Sun公司已经成功的将Java平台技术推广到台式计算机与服务器。Java是一门很优秀的编程语言,具有面向对象,与平台无关,安全,稳定和多线程等特点,是目前软件设计中极为健壮的编程语言。Java不仅可以用来开发大型的应用程序,而且特别适合于Tnternet的应用开发。Java确实具备了“一次写成,处处运行”的特点,Java已成为网络时代最重要的编程语言之一。Java语言的迅猛发展使得Java实现的应用产品遍及商务应用,短信获取,英汉互译,游戏娱乐等多媒体领域,Java语言原先的开发目的与市场的需求不某而和,在不久的将来,Java将会成为最热门的语言。将Java语言引入,作为一种通用的开发标准,并且也已经成为应用程序开发的标准,国际大公司如Nokia,Motorola及Siemens等所设计的内都加入Java程序的支持,可见在不久的将来,Java将成为移动设备上最热门的语言。本课题的研究目标:实现在C/S模式下,进行的一场炸弹人大战游戏。本课题的研究内容:该游戏的研究内容涉及到服务器端主机的建立,客户端客户机的连接,进入游戏后地图是如何载入的,子弹发射时是如和运作的,即子弹打中了不同的物体会给出不同的效果,还有炸弹人吃到特殊图标,即所谓的超级武器时,游戏中会产生相应的反应,另外,还包括玩家在游戏中是如何互相通信的,我方炸弹人获得胜利后是如何显示的,我方大本营被敌人攻破或是游戏玩家的生命值为0时,系统又会做出怎样的处理,当玩家成功的攻破当前关时,下一关的地图又会如何显示出来,还有就是当炸弹人行驶到地图边沿时,如何改变行驶方向的,敌人的炸弹人又是如何实现子弹的发射与自能化的。本课题的方法和手段:本游戏采用的是基于J2SE标准平台的java编程技术,涉及到接口,套接字Socket,线程的使用,以及绘图方法Graphics()方法的使用。随着网络的日益普及、Java功能在网络中的实现,Java应用程序产生的网络增值服务逐渐体现出其影响力,对丰富人们的生活内容、提供快捷的资讯起着不可忽视的作用。游戏开发者和玩家常常是前沿计算机技术的最早的采用者。由于他们的创新天性,游戏不再是由大型采购公司控制的技术产品,游戏领域总是有充足的空间给那些在这方面有天分的单个创新者。随着技术对游戏经验的促进,游戏市场持续增长。商业IT革命为我们节省了时间力之一。计算机游戏和金钱,从而提高了我们的工作水平,我们因此花费更多的时间和金钱在游戏上,来改善生活的整体质量。甚至在当今困难的经济时代,游戏仍保持快速增长,他仍然是盈利行业的组成部分。Java开发者应该注意到这里蕴藏着的巨大的商机。第1章开发工具介绍1.1网络游戏介绍网络游戏是利用TCP/IP协议,以互联网为依托,可以多人同时参与的游戏项目,它是通过网络实现的一种新的人机和人际互动形式。网络游戏包括单机游戏,模拟器支持的视频等。网络游戏秉承了传统文化丰富的文化元素,有着极大的文化内涵,它是信息的情趣化表征与传递。网络游戏中凸显出的艺术性极大地折射出其丰富的文化底蕴。网络游戏可以向学生展示不同的文化背景,把学生置于缤纷的文化氛围中,去体验和汲取文化精髓。游戏中所勾画出的虚拟世界也有其特定的世界观和价值观,好的网络游戏同样可以向学生传递积极的世界观和价值观。第一代网络游戏游戏特征:1、非持续性,机器重启后游戏的相关信息即会丢失,因此无法模拟一个持续发展的世界;2、游戏只能在同一服务器/终端机系统内部执行,无法跨系统运行。第二代网络游戏游戏特征:1、网络游戏出现了“可持续性”的概念,玩家所扮演的角色可以成年累月地在同一世界内不断发展,而不像PLATO上的游戏那样,只能在其中扮演一个匆匆过客。2、游戏可以跨系统运行,只要玩家拥有电脑和调制解调器,且硬件兼容,就能连入当时的任何一款网络游戏。第三代网络游戏游戏特征:“大型网络游戏”(MMOG)的概念浮出水面,网络游戏不再依托于单一的服务商和服务平台而存在,而是直接接入互联网,在全球范围内形成了一个大一统的市场。第四代网络游戏游戏特征:在第四代网络游戏代表作中,大型网络游戏也占有绝大多数的比重。素有“中国版奇迹”之称的醉逍遥的崛起为第四代网游带来了又一片春天。醉逍遥是原网禅团队与中国某研发团队联合创制,在安全防护和玩法创新上做了卓著的成绩,一直都深受玩家青睐,这也是第四代网游之所以被成为新生代网游的原因。在网络游戏中有一系列的规范或规则,为玩家设定了参与游戏的基本结构,作为玩家必须遵守这些规则,才能在游戏中保持自己的位置。网络游戏具有强烈的挑战性,而且这种挑战性对学生具有很大的吸引力。在虚拟的网络游戏中,学生会遇到许多困难,必须想方设法去克服困难,出奇制胜,发挥最大的聪明才智,才能控制复杂的局面,并最终到达光明的彼岸。从种类方面分类1、棋牌类休闲网络游戏:即登陆网络服务商提供的游戏平台后,进行双人或多人对弈,如纸牌、象棋等,提供此类游戏的公司主要有腾讯、联众、新浪等。2、网络对战类游戏:即玩家通过安装市场上销售的支持局域网对战功能游戏,通过网络中间服务器,实现对战,如CS、星际争霸、魔兽争霸等,主要的网络平台有盛大、腾讯、浩方等。3、角色扮演类大型网上游戏:即RPG类,通过扮演某一角色,通过任务的执行,使其提升等级,等到宝物等,如大话西游、传奇等,提供此类平台的主要有盛大等。从游戏模式方面分类1、ACT=动作游戏;2、AVG=冒险游戏;3、PUZ=益智游戏;PUZ原来指用于培养和开发儿童智力的拼图游戏,之后概念得到扩展,引申为各类益智休闲游戏。《俄罗斯方块》是其中最为经典的作品,《宝石方块》、《旋转泡泡球》、《LUMINES》等也是大家喜闻乐见的益智游戏。本次分类会将益智游戏的范围进一步扩充,《脑白金》、《找碴博物馆》等原本归于ETC类型的健脑类游戏,也一并归为益智游戏类型。其他归为益智类的还有少量以智力问答为核心内容的游戏;4、CAG=卡片游戏;5、FTG=格斗游戏;格斗又成“对战格斗”,尽管也有2D和3D格斗之分,但其概念与特征一直没有太多的变化,正统的FTG有体力槽、操作和出招方式、角色处于同一轴线以及讲究对抗与平衡相对统一的特点,因此不再拆分。《街头霸王》、《格斗之王》、《VR战士》、《铁拳》等都是玩家十分熟悉的格斗游戏。注意,像《任天堂全明星大乱斗》和一些动漫改编的乱斗游戏不具备格斗游戏的传统特征,因此均归为动作类游戏;6、LVG=恋爱游戏;7、TCG=养成类游戏;8、TAB=桌面游戏;9、MSC=音乐游戏;10、SPG=体育游戏;11、SLG=战略游戏;12、STG=射击游戏;13、RPG=角色扮演;14、RCG=赛车游戏;竞速游戏俗称“赛车游戏”,因为其中大部分游戏需要驾驶车辆进行比赛,或对速度进行挑战。著名的赛车游戏系列有《GT赛车》、《头文字D》、《火爆狂飙》等。但并不是所有的竞速游戏驾驶的都是车辆,也有摩托艇、飞行器或是一些科幻色彩浓重的未来交通工具,比如《F-ZERO》、《反重力赛车》等。Java语言的特点1.平台无关性平台无关性是指Java能运行于不同的平台。Java引进虚拟机原理,并运行于虚拟机,实现不同平台的Java接口之间。使用Java编写的程序能在世界范围内共享。Java的数据类型与机器无关,Java虚拟机(JavaVirtualMachine)是建立在硬件和操作系统之上,实现Java二进制代码的解释执行功能,提供于不同平台的接口的。2.安全性Java的编程类似C++,学习过C++的读者将很快掌握Java的精髓。Java舍弃了C++的指针对存储器地址的直接操作,程序运行时,内存由操作系统分配,这样可以避免病毒通过指针侵入系统。Java对程序提供了安全管理器,防止程序的非法访问。3.面向对象Java吸取了C++面向对象的概念,将数据封装于类中,利用类的优点,实现了程序的简洁性和便于维护性。类的封装性、继承性等有关对象的特性,使程序代码只需一次编译,然后通过上述特性反复利用。程序员只需把主要精力用在类和接口的设计和应用上。Java提供了众多的一般对象的类,通过继承即可使用父类的方法。在Java中,类的继承关系是单一的非多重的,一个子类只有一个父类,子类的父类又有一个父类。Java提供的Object类及其子类的继承关系如同一棵倒立的树形,根类为Object类,Object类功能强大,经常会使用到它及其它派生的子类。4.分布式Java建立在扩展TCP/IP网络平台上。库函数提供了用HTTP和FTP协议传送和接受信息的方法。这使得程序员使用网络上的文件和使用本机文件一样容易。5.键壮性Java致力于检查程序在编译和运行时的错误。类型检查帮助检查出许多开发早期出现的错误。Java自己操纵内存减少了内存出错的可能性。Java还实现了真数组,避免了覆盖数据的可能。这些功能特征大大提高了开发Java应用程序的周期。Java提供:Null指针检测、数组边界检测、异常出口、Bytecode校验。中国网络游戏市场规模及预测:于中国网络游戏市场规模部分的描述,其中有大量的数据及图表,均摘自一份调查报告[8],阅读之后,我认为该调查报告符合统计学的理论,客观严谨具有较高的可行度。该报告主要采用了计算机网上联机的调查方法进行,通过在中国多家主要网站的主要频道投放网幅广告和文字链接广告,于2004年12月1日——12月31日期间,由用户主动参与填写问卷的方式,共收到调查问卷103341份,经处理排除无效问卷,并根据网民的男女性别比例[根据CNNIC于2004年7月公布的网民性别比例(男:女=6:4)]进行配额,对最终的样本问卷进行随机抽样,获得54975份样本。经过统计分析之后,该报告得出以下结论:根据CNNIC的统计,2001年,中国上网人口仅为3370万。到2003年,上网人口已经接近了8000万,相比2002年增长了35%。报告认为至2004年末中国上网人口达到1.04亿。到2007年,中国上网人口将达到2.05亿。庞大的网民基数,以及巨大的增长潜力,将是中国网络游戏用户增长的根本基础。报告认为至2004中国网络游戏用户达到1976万,即有19%的中国网民为网络游戏用户,同时报告预测到2007年中国网络游戏用户将达3731万,在网民中所占比例为18%。同时,报告预计随着网络游戏产业的快速发展,网络游戏用户中付费用户的比例和数量将有所增长。根据我们的研究,2002年,国内收费网络游戏用户数为350万,到了2003年,收费用户数增长了一倍,达到710万。2004年,收费网络游戏用户为1130万,占网络游戏用户的57%。预计到2007年,中国收费网络游戏用户将达到2255万,占网络游戏用户60%。1.2J2SE简介是J2SEJ2SE是SUN公司针对桌面应用软件的编程推出的开发平台,与J2ME和J2EE共同组成Java技术的三个重要的分支。J2SE实际上是一系列规范的集合,由JCP组织制定相关的JavaSpecificationRequest(JSR)并发布,J2SE商业版本,标准版本(Java2StandardEdition)定位在客户端,主要用于桌面应用软件的编程。J2SE包含那些构成Java语言核心的类。比如:接口定义、输入/输出、网络编程。J2SE平台体系结构要精通J2SE,必须对J2SE的四大重要技术有深入的了解。具体分为:(1)Java应用程序接口(JavaAPI);(2)Java虚拟机;(3)JavaClass文件格式;(4)Java程序设计语言。J2SE的体系结构使得Java更适应于网络。其最大的两个优势就是:平台无关性和网络移动性。这一点在其体系结构的各个技术上都有体现。J2SE体系结构优势J2SE的体系结构使得Java更适应于网络。其最大的两个优势就是:平台无关性和网络移动性。这一点在其体系结构的各个技术上都有体现。1.JavaAPI的优势体现JavaAPI是运行库的集合,它提供了一套访问主机系统资源的标准方法。运行Java程序时,虚拟机装在.class文件所使用的JavaAPIclass文件,并和所有已近转载的动态库(本地方法)共同组成Java虚拟机运行的整个程序。JavaAPI天生就和平台相关的。不同平台的JavaAPI和本地方法进行交互的方式可能不同,但是对Java应用程序的显示接口是完全一样的。这才保证了Java应用程序的平台无关性。2.Java虚拟机的优势体现和JavaAPI一样,JVM是平台相关的。如果Java程序需要访问本地资源的话,Java虚拟机是一定要调用本地方法的。也正是应为JVM的存在,才导致了Java平台无关性的优势。3.Javaclass文件的优势体现Java编译器并不能将Java编译成底层的二进制指令,而是编译成一种与底层平台无关的中间格式文件(.class)。通常情况下不同硬件平台或操作系统的二进制指令时不能通用的。而.class文件是可以运行在任何支持Java虚拟机的硬件和操作系统上的。另外,class文件设计紧凑,可以快速的在网络上传输。4.Java程序设计语言的优势体现Java在语言也体现出一定的平台无关性。比如所有的基本数据类型所占用的字节大小都是固定的。另外Java语言也是一种非常通用、安全的语言。与C++不同,Java对内存的自动管理要强的多,也更加安全。比如放弃指针,而使用对象引用。使用垃圾回收机制而不是让程序员自己手动回收。1.2.4J2SE编译运行的过程先编译后运行首先编译:虚拟机会根据java预言的规则进行语法分析,词法分析,语义分析等等,以及类变量常量的提取等等,然后依据class文件的格式把程序转化为字节码文件。这就是你用javac命令的结果。运行:要经过初始化的步骤,进入内存,然后在用到的时间就从main方法入口区执行程序!发环境及相关技术的介绍开发环境图1-1Java开发环境图操作系统:MicrosoftWindowsXP程序语言:Java2JDK下载、安装及配置:JDK是整个Java的核心,包括了Java运行环境(JavaRuntimeEnvirnment),一堆Java工具和Java基础的类库(rt.jar)。第一步:下载第二步:安装第三步:设置环境变量打开“我的电脑->属性->高级->环境变量->系统变量”,设置以下三个变量:CLASSPATH=.Path=<原Path>;<bin安装目录>如:我的为:请注意:CLASSPATH变量的值是“.”(不包括引号).Java虚拟机的ClassLoader会按照CLASSPATH设定的路径搜索class文件。请注意,ClassLoader不会在当前目录下搜索,习惯了Windows的用户可能会感到意外,Linux用户就非常清楚。为方便起见,我们将CLASSPATH设置为“.”就包括了当前目录。网络游戏开发概述很多人看来,网络游戏还是一种很新鲜时尚的玩意儿,所以谈起网络游戏时难免有种高深摸测的感觉。其实,网络游戏的整个制作过程十分简单。从某种角度而言,是一种传统的回归,同时也是新旧技术的相互融合。合适的开发工具或者好的引擎将会大大提高开发速度。最常用的开发工具有Eclipse,在设计工具上则更是和普通的C/S游戏制作软件没有大的区别。当然所有这些方法都要根据游戏的最终设定来决定。在制作网络游戏时,常常结合使用二维绘制来建立模型以及场景渲染。在设计过程中常常使用了MAYA、3DMAX、PHOTOSHOP、PAINRER等工具。大多数网络游戏提供多难度级别,使游戏者玩上几天甚至几个星期。每级游戏都可以建立在不同的迷宫中。当一个游戏者以自己的方式成功玩到某一级终点时,游戏继续进行到更高的一级,在那里游戏者要接受新的挑战。多级别非常重要,它可以让新的布景和迷宫出现并且使游戏看起来不让人厌烦。它们让玩家在游戏中以不同的速度完成游戏时得到不同的奖励,比如:特殊的能力,武器。此外还可以设置加强难度,让游戏者不得不消灭光所有的怪物才可以得到过关许可。也许展现一个三维场景并不难,但令人惊叹的效果和良好的娱乐性也许才是游戏的精髓所在。1.3绘图与混淆器提供低级绘制的Canvas类为了能有程序开发人员控制接口的外观和行为,需要使用大量的初级用户接口类,尤其在游戏程序中,几乎完全依赖的就是Canvas抽象类进行绘图。从程序开发的观点看,Canvas类可与高级Screen类交互,程序可在需要时在Canvas中掺入高级类的组件。Canvas提供了键盘事件、指点杆事件(如果设备支持),并定义了允许将键盘按键映射为游戏控制键的函数。键盘事件由键代码指定,但这样控制游戏会导致缺乏通用性,并不是每个设备的键盘布局都适合游戏的操作。应当将键代码转换为游戏键的代码,以便硬件开发商能定义他们自己的游戏键布局。本程序中,操纵用户炸弹人运行的按键都定义为游戏控制键,这样便能适应所有的机器。Graphics类Graphics类提供了简单的2D绘图功能。它具有24位深度色彩的绘制能力,以三原色分别各占一个字节表示其颜色。Component类中有一个方法publicvoidpaint(Graphicsg),我们可以在其子类中重写这个方法。当重写这个方法时,相应的Java运行环境将参数g实例化,对象g就可以在该组件的坐标内绘制图形,图像等。JPG格式JPG是静态图片,显示的颜色多,文件相对大。GIF是动态的动画,显示的颜色少,文件相对小。
JPEG=JPG是JointPhotographicExpertsGroup(联合图像专家组)的缩写,文件后辍名为".jpg"或".jpeg",是最常用的图像文件格式,由一个软件开发联合会组织制定,是一种有损压缩格式,能够将图像压缩在很小的储存空间,图像中重复或不重要的资料会被丢失,因此容易造成图像数据的损伤。
JPG格式的照片是压缩的照片,它的压缩率是可以调整的,数码相机照出来的压缩率小,因此文件体积比较大,你“另存为”的时候,画图软件使用了另外一种压缩率,因此压得文件小了一点。这就是图片文件变小的原理,奥秘就在压缩率。
压缩率与品质是相对应的,压缩得厉害,品质就下降。因此你另存为以后,图像质量必然改变。
图片的质量,在打印出来的时候有比较大的区别,在计算机显示器上显示,变化很不明显。因此高品质的大文件图片,比如你原来的1M多,只对打印有意义,用来上网或者自己在计算机上观赏,高品质就没有意义。有关绘图的一些技术在以往进行游戏绘图一般需要手动编程使用双缓冲。需要在paint()方法内所想要画的图形画在一张预先准备好的背景,等所有绘图操作都完成后再将背景的数据拷贝到实际的屏幕上。Image类提供了一个建立背景的静态方法createImage(intwidth,intheight),再利用getGraphics()方法取得属于这个背景的Graphics对象,所进行的绘图操作都会作用在背景上,等到全部的绘图操作完成后,再调用drawImage()方法将背景的数据复制到实际显示的屏幕上。这样的技术在绘制动画时特别有用。绘制动画时经常需要不断地更新画面,而更新画面的操作就是先将屏幕以fillRect()的方式清除,再将下一张图片画在屏幕上,然而反复的清除及重绘会造成屏幕的闪烁现象(flicker),因此使用双重缓冲的好处就是在背景进行这个清除及重绘的操作,再将完成的绘图拷贝到屏幕上,由于用户看不到清除的操作,因此就不会出现闪烁的现象了。混淆器(Obfuscator)的使用Java语言并没有完全编译成二进制可执行文件,编译出的.class文件是一种介于源程序和二进制之间的一中基于半解释的字节码,需要虚拟机来执行。它包括了所有的信息。然而这样会导致.class很容易被反编译为源代码,从而不能保护作者的知识成果。目前流行的如decode,JAD等反编译工具可以以很快的速度生成源文件。如果不加以施行有效的措施,将造成严重的后果。由此引入混淆器的概念。混淆器将代码中的所有变量、函数、类的名称变为简短的英文字母代号,如果缺乏相应的函数名指示和程序注释,即使被反编译,也将难以阅读。混淆器的作用不仅仅是保护代码,它也有精简编译后程序大小的作用。由于以上介绍的减少变量、函数的命名长度的关系,编译后也会从.class文件中减少这些冗余的信息。混淆后,体积大约能减少25%,这对当前费用较贵的无线网络传输是有一定意义的。为了能与各种IDE集成,就像Java2SDK一样,混淆器采用命令行参数的形式,以便可被其调用。目前流行的Obfuscator有RetroGuard等。第2章炸弹人大战游戏的需求分析2.1炸弹人大战游戏的任务概述这个炸弹人大战游戏的策划比较简单,游戏中玩家采用传统的游戏规则。服务器建立主机,然后客户机请求申请进入,当客户机输入主机的IP之后便可开始游戏,双方在中途能够暂停,能够互通信息,双方炸弹人加入超级武器后都会有多种不同功能,如加入INT图标时,敌方炸弹人全部死亡;加入五角星时,可以加快子弹的速度,并能将钢墙打破;加入炸弹人图标,则可以增加一条生命等等。如果成功过关,会显示你过关了,在游戏中还会出现敌人的炸弹人数量及我方坎坷的战绩,若游戏失败了,系统会问是否要继续游戏,若双方都同意继续游戏,则游戏重新开始,否则游戏结束。2.2本程序需解决的有关程序问题1.本程序是一项精度要求很高网络游戏,因为其代码利用率很高。一个实时运行的最终作品,因此,其逻辑设计应当相当严谨,需将所有可能发生的事件及意外情况考虑在设计中。2.己方炸弹人的运行可以通过键盘响应事件控制,但敌方则因为是自动运行,就需要有一定的自能性,同时,出现在屏幕上的敌人可能会有较多的数量,就需要每个敌人开辟一个线程以便能让其独立运行。Java的多线程能力为实现这样的游戏提供了可能。敌人炸弹人的运行算法也需要进行适当的设置,以免游戏过于简单,单调。3.对于双方炸弹人发出的子弹的控制也需要对其跟踪控制,子弹也需要处在独立的线程中。敌方子弹仅需要扫描用户炸弹人,而用户炸弹人需要在每一步扫描所有敌人炸弹人,这需要对所有的对象有一个较好的控制。另外子弹在运行过程中也需要实时扫描是否碰撞到了相关障碍物或屏幕边界,如此过多的线程同时在本来效率就不高的Jvm虚拟机上运行,也许会导致程序的缓慢。4.双方的炸弹人在前进时也需要考虑是否碰到相关物体或对方炸弹人,以免重叠运行,造成许多物理上不可能的情况,缺乏真实感,每一次刷新页面,每前进一步都需要将所有的周围环境都进行扫描。5.游戏的结束,开始,动态信息画面作为构成一个完美程序都是必不可少的重要部分,良好的用户界面更是吸引用户的硬指标,相关的美术构图也需要有一定的考虑。6.游戏的地图不可能全都通过绘图来解决,否则,不仅难于控制和处理过多的元素,也会因过多的大型图片而不能限制程序的大小,失去程序的原则和Java优势,同时,地图关卡不宜保存在有限的内存中,而最好采取外部文件的读入读出方法。7.用户运行游戏时需要有分数记录的可能。如果采用合理的记分标准,需要进行适当的设计。记分记录的存储方式也需要有较好的解决方案。8.Java是基于虚拟机的半解释型编译系统,其执行效率较C++等完全编译后的程序会低很多,程序如果不进行精简和优化,将可能导致运行的不流畅。除开发过程中对结构上的控制,变量的使用,算法的优化等优化外,还可以使用混淆器进行程序打包后的优化。2.3使用对象本游戏适用于任何游戏爱好者,考验玩家的思维能力和敏捷力。2.4游戏功能1.开始新游戏功能2.存储游戏功能3.读取游戏功能4.演示游戏功能2.5建议软硬件配置1.该软件是利用Java语言编程,所以运行该游戏必须安装JVM(Java虚拟机)。2.运行该游戏的最低硬件配置,如要求系统最低为64M内存,40G硬盘以上等。3.操作平台Windows95,WindowsMe,Windows98,Windows2000,WindowsXP均可。第3章总体设计3.1炸弹人大战游戏的总体功能游戏由服务器和客户机2部分组成,在服务器中,base类负责创建大本营,bomb类负责创建子弹打出后的效果,bullet类负责创建子弹,enemy类负责创建敌方炸弹人,drawingPanel类负责创建主机窗口视图,grass类负责创建草坪,level类负责创建各个不同的关,player类负责我方炸弹人的得分,位置等信息,powerUp类负责将子弹的能量加高,速度加快,river类负责创建河流,ServerControler创建对话,帮助,使用之类的信息,ServerModel类负责创建主机,ServerView类负责创建图标信息,Steelwall类负责创建钢墙,Ticker类负责创建时间信息,wall类负责创建普通的墙。而客户端的Actor类负责创建接口,bomb类负责创建子弹打出后的效果,bullet类负责创建子弹,ClientControler类负责创建对话,帮助,使用之类的信息,ClientModel类负责创建与主机的链接,ClientView类负责创建图标信息,drawingPanel负责创建客户端窗口视图,instructionHandler类完成各物体间的转换及游戏结束后是否继续,level类负责创建各个不同的关,normalObject类描绘了去墙以外的所有物体,Steelwall类负责创建钢墙,Ticker类负责创建时间信息,wall类负责创建普通的墙。玩家通过输入IP获得连接,能够实现敌方炸弹人和子弹的智能化运行,添加了草坪,河流,普通墙和钢墙,并给其赋予了自己特有的功能,同时游戏中还包含了记分功能,特殊武器的加入另外,此游戏中不同的是在游戏中添加了通话功能,在游戏中使用了套接字Socket来完成客户端与服务器端的连接。第4章算法设计和主要技术4.1炸弹人大战生成算法publicvoiddraw(Graphicsg){ g.setColor(Color.lightGray); if(direction==0||direction==1) g.fillRect(border.x+1,border.y+1,3,9); if(direction==2||direction==3) g.fillRect(border.x+1,border.y+1,9,3);}其流程如图4-1所示:图4-1子弹生成图在这里,定义了子弹的颜色为Color.lightGray,若子弹是水平发出的,则绘制子弹为矩形g.fillRect(border.x+1,border.y+1,9,3),若子弹是垂直发出的,则绘制子弹为g.fillRect(border.x+1,border.y+1,3,9)。敌人炸弹人产生的算法//定义敌人炸弹人共有属性interval=(int)(Math.random()*200); direction=(int)(Math.random()*4);//定义敌人炸弹人的特殊属性if(type==args1){//args1为敌人炸弹人名称 firePosibility=args2;//args2为炸弹人开火位置 speed=args3;//args3为炸弹人速度 textures=newImage[args4];}//args4为图片名字//绘制敌人炸弹人publicvoiddraw(Graphicsg){ if(flashing&&gameModel.gameFlow%10>4) g.drawImage(textures[textures.length-4+direction],xPos-size,yPos-size,null); else g.drawImage(textures[direction],xPos-size,yPos-size,null);}在这里,通过interval=(int)(Math.random()*200)设置了炸弹人出现的时间间隔,通过direction=(int)(Math.random()*4)获得炸弹人出现的随机方向,而在特殊属性中,通过firePosibility设置敌人炸弹人的火力,通过speed设置敌人炸弹人的速度,通过textures[i]=gameModel.textures[]获取敌人炸弹人的图标,让后通过方法publicvoiddraw(Graphicsg){}添加敌人炸弹人。爆炸效果产生算法publicvoiddraw(Graphicsg){ g.setColor(Color.red); g.fillOval(xPos-outer,yPos-outer,2*outer,2*outer); g.setColor(Color.orange); g.fillOval(xPos-middle,yPos-middle,2*middle,2*middle); g.setColor(Color.yellow); g.fillOval(xPos-inner,yPos-inner,2*inner,2*inner);}其爆炸效果流程如图4-2所示:图4-2爆炸效果图当子弹打出,爆炸时,通过g.setColor()方法设置爆炸时的颜色,通过g.fillOval()方法获得爆炸的图形及位子大小。publicvoiddraw(Graphicsg){ g.drawImage(base,xPos-12,yPos-12,null); }其流程如图4-3所示:图4-3大本营建立图使用publicvoiddraw(Graphicsg){}方法直接添加一副图片作为大本营。大本营是玩家的核心,一旦大本营被敌人攻破了,则玩家被判为输了,并结束游戏。//设置面板大小和创建面板图标publicvoidpaintComponent(Graphicsg){ GraphicsoffScreenGraphics; if(offScreenImage==null){ offScreenImage=createImage(640,550); } offScreenGraphics=offScreenImage.getGraphics(); myPaint(offScreenGraphics); g.drawImage(offScreenImage,0,0,this);}//向面板添加当前关数及剩余敌人数g.setColor(newColor(81,111,230)); g.drawString("第"+level.currentLevel+"关",527,39); g.drawString("敌人数="+level.enemyLeft,527,79);//输出胜利场景if(level.winningCount>敌人炸弹人数量){g.setColor(newColor(red,green,blue));g.drawString("过关了!",240,250);}其流程如图4-4所示:图4-4面板生成图通过publicvoidpaintComponent(Graphicsg){}方法创建了一个面板,通过g.drawString("第"+level.currentLevel+"关",527,39)设置了当前关数,及在面板中的位置,通过g.drawString("敌人数="+level.enemyLeft,527,79)方法显示剩余敌人数量及位置,通过g.drawString("过关了!",240,250);}向面板中输出胜利场景。其流程如图4-5所示:图4-5草坪生成图在算法中,通过publicvoiddraw(Graphicsg){}方法绘制了草坪。草坪中,游戏双方炸弹人可以自由通过。使用g.drawImage()方法直接添加一副图片作为河流地图。游戏中,不允许炸弹人在河流中行走,但子弹可以穿过河流,打到对方,这样的设置使游戏更加新颖,符合传统炸弹人大战游戏的规则。本算法中通过generalBorder=newRectangle(xPos-12,yPos-12,25,25)方法初始化了一个矩形,然后调用border[args1]=newRectangle(args2,args3,11,11)生成了普通墙。其中args1为border数组的索引arg2和arg3分别为矩形绘制的起点坐标x和y。其流程如图4-6所示:图4-6钢墙建立图本算法中通过generalBorder=newRectangle(xPos-12,yPos-12,25,25)方法初始化了一个矩形,然后调用border[args1]=newRectangle(args2,args3,11,11)生成了钢墙。与普通墙所不同的是:普通墙被子弹打中后,会相应的减少一部分,直到消失为止,而钢墙却不能被一般子弹所打破,只有当玩家吃到五角星图标时,子弹火力增强后才能将钢墙打破,而敌人却无法打破钢墙。其中args1为数组参数,args2和args3分别为x和y轴坐标。主机通过publicvoidcreateServer(){}方法创建主机,通过serverSocket=newServerSocket(4321)创建了一个端口,如果serverCreated=true,则建立成功,否则给出错误提示,而服务器则通过clientSocket=serverSocket.accept()建立连接,当通过方法InetAddressaddr=InetAddress.getByName(serverIP);clientSocket=newSocket(addr,4321)连接上主机之后,则载入游戏,否则则给出相应连接错误信息。4.2功能实现算法子弹通过掉用方法if(gameModel.actors[i].getType().equals(args))判断子弹和什么物体相碰,其中args表示各种物体的名字,若是碰到了敌人的炸弹人,则敌人的炸弹人消失,若是碰到了普通的墙,则普通墙被损坏,若是击中其他物体,则其他物体保持不变,若是打破了大本营,则游戏结束。炸弹人功能算法 炸弹人通过if(gameModel.actors[i].getType().equals(args)判断炸弹人碰到了什么图标,其中args表示各种物体的名字,若是INT图标,则判定敌方炸弹人全死亡,若是五角星,则玩家火力加强,若是钢墙图标,则大本营变钢墙,若是炸弹人图标玩家生命加一,若是时钟图标,则敌人停止不动。面板功能算法面板流程里主要通过mainPanel=newdrawingPanel()方法调用面板,通过sendMessage=newJButton(??)初始化按钮,按钮中包含帮助,暂停/继续,发送消息,建立主机,输入IP按钮,通过方法publicServerModel(ServerViewthisview)建立主机,通过算法publicvoidactionPerformed(ActionEvente){if(!model.gameStarted){model.addMessage("还没有和别的玩家联上,无法发送对话");return;}主机端玩家说 }else{model.addMessage("对话内容不能为空");}}来控制消息的互动。为help按钮上添加监听器publicvoidactionPerformed(ActionEvente)实现帮助消息的显示。 第5章炸弹人大战游戏的详细设计游戏由服务器和客户机2部分组成,其中服务器包含18个类,客户机包含13个类。在服务器中Actor类负责创建接口,base类负责创建大本营,bomb类负责创建子弹打出后的效果,bullet类负责创建子弹,enemy类负责创建敌方炸弹人,drawingPanel类负责创建主机窗口视图,feedbackHandler类负责创建暂停与继续游戏事件,grass类负责创建草坪,level类负责创建各个不同的关,player类负责我方炸弹人的得分,位置等信息,powerUp类负责将子弹的能量加高,速度加快,river类负责创建河流,ServerControler创建对话,帮助,使用之类的信息,ServerModel类负责创建主机,ServerView类负责创建图标信息,Steelwall类负责创建钢墙,Ticker类负责创建时间信息,wall类负责创建普通的墙。而客户端的Actor类负责创建接口,bomb类负责创建子弹打出后的效果,bullet类负责创建子弹,ClientControler类负责创建对话,帮助,使用之类的信息,ClientModel类负责创建与主机的链接,ClientView类负责创建图标信息,drawingPanel负责创建客户端窗口视图,instructionHandler类完成各物体间的转换及游戏结束后是否继续,level类负责创建各个不同的关,normalObject类描绘了去墙以外的所有物体,shield类创建了保护时的状态,Steelwall类负责创建钢墙,Ticker类负责创建时间信息,wall类负责创建普通的墙。5.1服务器的类ServerView类 ServerView类创建了一个窗口,在窗口中添加了六个按钮,一个文本框,一个面板。在这里,分别将按钮设置为建立主机按钮,暂停/继续按钮,帮助按钮,退出按钮,发送按钮,还有一个隐藏按钮,文本框用来输入主机的IP,帮助按钮则用来帮助用户了解游戏的使用,发送按钮则用来互通玩家的信息,另外,这些按钮和文本框全都被加载到了面板中,而面板又被添加到了窗口中。ServerModel类的实现其具体实施流程如图5-1所示:图5-1游戏建立及信息输出流程图子弹属性bullet类的实现 bullet类描绘了子弹的具体实现,及子弹打中各种不同物体时做出的不同反映bomb类的实现 该类主要描绘了子弹打中其他物体时所产生的效果,下面是轰炸类的一些参数和具体方法://设置轰炸后产生的图形是一个三种颜色的圆publicvoiddraw(Graphicsg){ g.setColor(Color.red); g.fillOval(xPos-outer,yPos-outer,2*outer,2*outer); g.setColor(Color.orange); g.fillOval(xPos-middle,yPos-middle,2*middle,2*middle); g.setColor(Color.yellow); g.fillOval(xPos-inner,yPos-inner,2*inner,2*inner); }//判断出现什么情况时,获得轰炸:if(size.equals("big")){ inner=6;middle=9;outer=14; jumpDistance=8; animationTime=6; }elseif(size.equals("small")){ inner=2;middle=4;outer=7; jumpDistance=4; animationTime=4; }其实现图如图5-2所示:图5-2子弹轰炸图drawingPanel类的实现 drawingPanel类初始化了一个面板,向该面板中添加了一个游戏产地,并在该面板中显示了当前的敌人炸弹人剩余量及关数,另外还绘制了或的胜利时的场景。 enemy类的实现 enemy类设置了敌人坎坷的共同属性,各自的特殊属性,敌人的炸弹人在一个随机的有限时间内保持着向一个方向行走,在有限的时间结束后,将改变一个新的方向。敌人炸弹人决定是否发射一颗子弹,这子弹的方向也是随机的,另外,此类描绘了子弹发射的方向和具体的位置,确定了子弹的速度,以及如何向该类中添加子弹,该类可以检查是否与地图的边缘相碰,若是,则获得一个新的方向,若与其他物体相碰,则相应的长生一些其他效果,另外,敌人炸弹人被子弹打中了也要做出一些相应的反应。游戏关数level类 Lever类定义了获得胜利的场景参数,在每次进入更高一关时,都增加了游戏的难度,并清理了当前关的所有东西,给出了如何加载各关的方法,图片,并在各关中给出了常人敌人炸弹人的方法,如果进入下一关时,则从设所有的一切。游戏者player类的实现Player类设置了玩家的位置和图片,当玩家按了“fire”键,并且条件是满足的,则创建了一颗子弹,并给出了子弹的速度,位置,能量,在游戏中可以通过方向键准确的控制玩家炸弹人的上,下,左,右的移动,并给出玩家炸弹人与地图边缘相撞,和其他别的物体相撞的反应。并在游戏中可以精确的确定游戏玩家的位置。在游戏中,可以给出玩家的信息,得分,当玩家被击中时,则将其移除,此时玩家生命数减少一条。5.2客户端的类bullet类的实现bullet类描绘了子弹的具体画法为publicvoiddraw(Graphicsg){ g.setColor(Color.lightGray); if(direction==0||direction==1) g.fillRect(xPos-1,yPos-4,3,9); if(direction==2||direction==3) g.fillRect(xPos-4,yPos-1,9,3); gameModel.removeActor(this); }通过方法publicStringgetType(){returnType;}获得子弹类的参数。其实现流程如图5-3所示:图5-3子弹绘制流程图客户端模型ClientModel类的实现ClientModel类实现了ActionListener监听器,通过如下方法连接主机publicvoidconnectServer(){ addMessage("正在连接主机"); try{ InetAddressaddr=InetAddress.getByName(serverIP); clientSocket=newSocket(addr,4321);out=newPrintWriter(clientSocket.getOutputStream(),true);in=newBufferedReader(newInputStreamReader(clientSocket.getInputStream()));}catch(Exceptione)addMessage("连接中出现错误,请确认1.输入的IP是否正确,2.主机端已存在");return;}当载入成功后,设置serverConnected=true。这样就连接上了主机。//当一些事情出错了,删掉创建的东西 try{out.close();in.close(); clientSocket.close(); //增加游戏中的一个实力物体publicvoidaddActor(Actoractor){ for(inti=0;i<drawingList.length;i++) if(drawingList[i]==null){ drawingList[i]=actor; break; } }//删除游戏中的一个实力物体publicvoidremoveActor(Actoractor){ for(inti=0;i<drawingList.length;i++) if(drawingList[i]==actor){ drawingList[i]=null; break; }其具体实现流程如图5-4所示:图5-4客户机模型流程图面板类drawingPanel类的实现drawingPanel类初始化了一个面板,向该面板中添加了一个游戏产地,并在该面板中显示了当前的敌人炸弹人剩余量及关数,另外还绘制了或的胜利时的场景。说明控制类instructionHandler类的实现instructionHandler类中实现的具体方法如下://如果是L开头则表示加载一副地图,L后面的数字即为地图的关数if(perInstruction.substring(0,1).equals("L")){level.loadLevel(gameModel,Integer.parseInt(perInstruction.substring(1,2))); return;}//如果是W开头则表示改变了普通的墙 if(gameModel.drawingList[k]!=null){if(gameModel.drawingList[k].getxPos()==xPos&&gameModel.drawingList[k].getyPos()==yPos){ walltempWall=newwall(xPos,yPos,4,gameModel); tempWall.shape=shape; gameModel.drawingList[k]=tempWall; } } }如果是以S开头则表示钢墙发生了变化,具体实现方法和普通墙的改变方法一样。//如果以b开头,则表示大本营被毁if(perInstruction.substring(0,1).equals("b")){gameModel.drawingList[4]=newnormalObject(260,498,gameModel,"base",1);}//如果以t开头,则显示子弹if(perInstruction.substring(0,1).equals("t")){gameModel.addActor(newbullet(xPos,yPos,gameModel,direction))}//如果以o开头,则显示大本营if(perInstruction.substring(0,1).equals("o")){gameModel.addActor(newbomb(xPos,yPos,size,gameModel));}//如果以i开头,则显示炸弹人隐身if(perInstruction.substring(0,1).equals("i")){gameModel.addActor(newshield(xPos,yPos,gameModel));}//如果以a开头,则显示GAMEOVER!想再玩一次吗(y/n)?if(perInstruction.substring(0,1).equals("a")){ if(!gameModel.gameOver){ gameModel.addMessage("GAMEOVER!想再玩一次吗(y/n)?"); gameModel.gameOver=true; } }//如果以x开头,则显示玩家暂停或继续游戏if(perInstruction.substring(0,1).equals("x")){ inttemp=Integer.parseInt(perInstruction.substring(1,2)); if(temp==0){ if(gameModel.gamePaused){ gameModel.addMessage("主机端玩家取消了暂停"); gameModel.gamePaused=false;} }else{if(!gameModel.gamePaused){ gameModel.addMessage("主机端玩家暂停了游戏"); gameModel.gamePaused=true; } }其具体实现流程如图5-5所示:图5-5handleInstruction类流程图5.3服务器类结构图图5-6炸弹人大战游戏服务器端类结构图5.4客户端类结构图图5-7炸弹人大战游戏客户端类结构图5.5炸弹人大战游戏的场景结构流程游戏启动时,ServerModel类负责创建主机,等待客户机的参与,接着客户端ClientModel类负责创建与主机的链接,链接上之后,闪屏,drawingPanel类负责创建窗口视图,接着ServerView类负责创建主机图标信息,而ClientView类负责创建客户端图标信息,主机使用grass类负责创建草坪,river类创建河流,然后分别用Steelwall类、Ticker类、wall类创建各自的钢墙,时间信息,普通的墙,主机用ServerControler创建对话,而客户机用ClientControler创建对话,base类负责创建大本营。第6章游戏测试6.1测试方法测试,通常有两种方式:单元测试和组装测试。对本系统着重单元测试。单元测试中通常使用白盒测试法,也就是根据程序的内部处理逻辑来设计测试用例。白盒测试法主要的方法有:语句覆盖,条件覆盖,判定覆盖,判定-条件覆盖,条件组合覆盖,路径覆盖,本系统根据白盒测试法来设计测试用例。6.2部分测试用例6.2.1系统启动测试表6-1启动测试测试用例1描述测试游戏成功链接测试方法双击游戏的打包文件期望结果启动成功,看到系统主界面测试结果(正确或错误)正确测试人Date:6.2.2子弹发射测试表6-2子弹发射测试测试用例2描述测试子弹能否发射,及响应反映测试方法点击S键,子弹发射键期望结果成功发射子弹并打中不同物体产生相应效果测试结果(正确或错误)正确测试人Date:6.2.3玩家移动测试表6-3玩家移动测试测试用例3描述测试玩家移动的情况测试方法点击方向键移动,看移动是否成功期望结果炸弹人可以移动测试结果(正确或错误)正确测试人Date:6.2.4信息发送测试表6-4信息发送测试测试用例4描述测试信息发送的接收情况测试方法输入信息,按Enter键发送,看移动是否成功期望结果另一玩家收到信息测试结果(正确或错误)正确测试人Date:6.2.5游戏暂停和继续的测试表6-5游戏暂停测试测试用例5描述测试游戏暂停的情况测试方法点击非游戏键,看游戏是否能暂停期望结果游戏暂停测试结果(正确或错误)正确测试人Date:表6-6游戏暂停后继续测试测试用例6描述测试游戏
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 北师大版四年级上册数学第三单元 乘法 测试卷带下载答案
- 物业员工工作总结范文10篇
- 认真承诺我发誓
- 语文味激发学生学习兴趣的关键
- 语文学习心得与策略分享
- 货车司机聘用合同案例
- 购销合同书写规范及示例
- 购销合同范本格式写作规范
- 跟随大卫科波菲尔的英语脚步
- 运费结算合同协议编写指南
- 化工原理模拟试题
- 设备安装调试方案
- 刑事案件模拟法庭剧本完整版五篇
- 家政保姆职业规划书
- 我国乡村特色文化旅游产业发展中的地方政府作用探析
- bim技术在大桥项目中应用同济建筑设计
- 张宇30讲电子版pdf版
- 勇敢的心电影英文分析
- 办公室提升改造施工方案
- 《运动医学课件-足底筋膜炎》
- 机器学习与大数据分析在制造业产品创新中的应用
评论
0/150
提交评论