




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、JAVA课程设计之坦克大战 课程设计任务书攀枝花学院 学生课程设计(论文)题 目: 基于JAVA的坦克大战 学 生 姓 名: 杨 兴 贵 学 号: 200910801085 所在院 (系): 计算机学院 专 业: 计算机科学与技术 班 级: 2009级计本(2)班 指 导 教 师: 罗 学 刚 职称: 2011年 5 月 26 日攀枝花学院教务攀枝花学院本科学生课程设计任务书题目基于Java的坦克大战1、课程设计的目的通过本课程设计使学生能够较全面的掌握面向对象程序设计的有关概念和开发方法,以便能较全面地理解、掌握和综合运用所学的知识,提高自身的编程能力。2、课程设计的内容和要求(包括原始数据
2、、技术要求、工作要求等)利用java socket实现局域网内的UDP信息传输,实现简单的Java坦克大战项目。3、主要参考文献1蔡昭权. 利用Socket实现多线程通信程序J. 2004,(06)2仲宇, 顾国昌 , 张汝波. 应用TCP/IP网关实现数据远程传输J. 3 姜志强编著. Java语言程序设计 M.北京:电子工业出版社,20074 侯俊杰编著. Java语言应用开发基础 M.5 孙更新编著. Java毕业设计指南与项目实践 M. 北京:科技出版社,2007.4、课程设计工作进度计划序号时间(天)内容安排备注11分析设计准备周一22编程调试阶段周二至周三31编写课程设计报告周四4
3、1考核周五总计5(天)指导教师(签字)日期年 月 日教研室意见:年 月 日学生(签字): 接受任务时间: 年 月 日注:任务书由指导教师填课程设计(论文)指导教师成绩评定表题目名称基于Java的坦克大战评分项目分值得分评价内涵工作表现20%01学习态度6遵守各项纪律,工作刻苦努力,具有良好的科学工作态度。02科学实践、调研7通过实验、试验、查阅文献、深入生产实践等渠道获取与课程设计有关的材料。03课题工作量7按期圆满完成规定的任务,工作量饱满。能力水平35%04综合运用知识的能力10能运用所学知识和技能去发现与解决实际问题,能正确处理实验数据,能对课题进行理论分析,得出有价值的结论。05应用文
4、献的能力5能独立查阅相关文献和从事其他调研;能提出并较好地论述课题的实施方案;有收集、加工各种信息及获取新知识的能力。06设计(实验)能力,方案的设计能力5能正确设计实验方案,独立进行装置安装、调试、操作等实验工作,数据正确、可靠;研究思路清晰、完整。07计算及计算机应用能力5具有较强的数据运算与处理能力;能运用计算机进行资料搜集、加工、处理和辅助设计等。08对计算或实验结果的分析能力(综合分析能力、技术经济分析能力)10具有较强的数据收集、分析、处理、综合的能力。成果质量45%09插图(或图纸)质量、篇幅、设计(论文)规范化程度5符合本专业相关规范或规定要求;规范化符合本文件第五条要求。10
5、设计说明书(论文)质量30综述简练完整,有见解;立论正确,论述充分,结论严谨合理;实验正确,分析处理科学。11创新10对前人工作有改进或突破,或有独特见解。成绩指导教师评语指导教师签名: 年月日摘 要系统拥有可视化的登录界面,配有游戏帮助文档,程序的编写涵盖J2SE基础知识,包括典型的封装、继承、多态的实现,同时结合了socket网络编程、GUI图形用户界面的相关知识。项目集成了单机个人、网络对战两个版本。单机版实现精彩的人机对战,电脑间隔性产生敌方坦克,玩家通过血块持续攻击。游戏进行了后门设计,玩家可以轻松穿越墙体攻击敌方坦克。网络版游戏中作为服务器的主机需提前启动坦克服务器,服务器主线程将
6、接收的客户端的数据包转发到其他客户端,实现客户端游戏界面的实时更新。开始游戏后,主线程调用窗体对象的Paint方法进行绘图,画面采用双缓冲技术进行刷新。坦克将在游戏开始时进行初始化,并随屏幕刷新的频率而移动。关键字 坦克大战,C/S网络体系,JAVA,Socket编程,GUIJAVA课程设计之坦克大战 目 录目 录摘 要1 可行性研究11.1 可行性分析11.1.1 系统可行性11.1.2 技术可行性11.1.3 经济可行性11.1.4 操作可行性11.2 网络游戏的发展11.3 系统的现实意义11.4 系统特点11.5 Java、C语言、C+主流技术比较11.6 本章小结12 系统需求分析1
7、2.1 系统运行环境12.1.1 系统运行的软件环境12.1.2 系统运行的硬件环境12.2 相关理论12.2.1 关于Eclipse的介绍12.2.2 J2SE框架12.3 系统功能需求12.3.1 主界面人性化功能12.3.2 人机对战模式功能12.3.3 网络对战模式功能12.3.4 联机通信机制12.3.5 Java图形编程12.4 本章小结13 系统概要设计13.1系统功能设计13.1.1 坦克大战总体功能设计13.1.2 TankClient类基本功能分析13.1.3 Tank类基本功能分析13.1.4 Missile类基本功能分析13.1.5 Explode类基本功能分析13.1
8、.6 服务器类基本功能分析13.1.7 信息传送类基本功能分析13.2 本章小结14 系统详细设计14.1 游戏主窗体实现14.2 单机游戏的实现14.3 联机功能实现14.4 网络模式主要代码14.5 本章小结15 结论15.1 课程设计总结15.2 本程序需解决的有关技术问题15.3 展望1参 考 文 献1JAVA课程设计之坦克大战 可行性研究1 可行性研究1.1 可行性分析1.1.1 系统可行性人类进入21世纪,全球一体化,互联网就起到重要的作用,而且随着互联网的不断发展,信息技术逐渐发展壮大,将成为网络经济的核心。其中计算机、网络通信的发展最为迅速。在现今电子信息高速发展的时代,网络游
9、戏已经深入到人们的日常生活中,成为老少皆宜的娱乐方式。1.1.2 技术可行性Java语言自Sun公司于1995年5月正式发布以来,经历了出生、成长、成熟壮大的几个阶段,逐渐发展成为IT领域里的主流计算模式,使用Java开发工具方便,容易实现。Java对开发网络产品有它自己独特的优势,网络游戏也是其开发产物之一。本系统开发过程是利用Java编程语言和eclipse集成开发环境配合使用来实现的,它是基于TCP/UDP协议和Socket编程技术,建立以C/S为结构模式的娱乐性游戏平台。1.1.3 经济可行性本设计的开发是基于JDK5.0和eclipse3.2的,因为它们都是免费而且开源的软件,所以实
10、现本设计的成本就有所降低。随着计算机、网络通讯和信息技术的迅猛发展以及人类精神生活品质的提高,国际、国内的各种各样的大型综合游戏网站如雨后春笋般的发展起来。一款好的游戏带来的经济效益可以说是不可估量的,比如现在网上最流行的魔兽世界、征途等大型网络版游戏。本游戏既可单机运行,也可以是联机版多人同时在线对战。1.1.4 操作可行性本设计是一个网络版的游戏平台,只是模拟了现在社会上的一些网络游戏的部分功能,所以操作简易,玩家不需要了解内部流程,只是和一般其他的网络游戏一样的操作即可开始游戏。相对于开发者而言,整个系统形成主要由JDK5.0虚拟环境和eclipse3.2共同完成,无需更多复杂的工具和服
11、务器支持。1.2 网络游戏的发展在今天,借助于数字、电子、网络、创意、编剧、美工、音乐等等“先进”的道具,网络游戏对于人们现实生活的虚拟达到了一个全新的境界,并且则在这新的境界上还原了游戏的本源-人与人的互动。网络游戏满足了现代社会必须的沟通需求,无疑它应该是适合所有人的。在军事模拟对抗演习中,大型游戏机既可以模拟作战现场的地形、军力部署、天气等情况,还可以进行多兵种战术技能对抗训练;在国防训练方面,大型游戏机可以模拟坦克操纵、导弹发射、飞机驾驶、舰艇巡航等多种训练任务;在医疗培训方面,大型游戏机拥有的全息三维立体投影技术,可以逼真地展示人体的各部分构造和器官等。1.3 系统的现实意义游戏本身
12、是一种娱乐方式,能带给人们无尽的乐趣,而且游戏行业的发展还将会带动众多周边产业,如五金、塑料、机械、电子、 显像管,高端机型甚至使用了40英寸以上的大屏幕背投、液晶显示器等,这些显像设备不但要依赖国内众多显像管生产企业提供支持,更要针对游戏的内容进行深入开发和优化,以适应游戏内容的飞速发展和变化,大大突破了传统家电类显像设备的限制,对国内显像管制造企业的发展、创新具有极大的推动作用,大型游戏机的外部框体制造涉及工业设计、模具加工、五金加工、塑料成形、特殊印刷等工艺流程,由此带动了一大批相关的零部件生产制造企业,而这些企业均为生产密集型企业,大幅度增加了劳动就业的需求。1.4 系统特点本系统的坦
13、克大战是基于Java语言设计开发的,具有高超的人工智能,精美的图形处理,支持单机运行和网络对战的坦克射击游戏。比之前网络上实现的游戏更加方便,快捷,智能。游戏基本玩法较简单,游戏可一人电脑作战,每次电脑方有坦克10辆,游戏以消灭全部敌方坦克过关为目的。在这过程中,坦克有机会得到血块来添加生命值,从而变得更加强大,也能利用各种有利地形来阻击敌人。游戏进行了后门程序设计可以轻松穿越墙体攻击敌方坦克。还有给玩家坦克设置超级炮弹,当电脑方坦克数量过多时,玩家坦克可以发射超级炮弹打击敌方。主要新增的功能简单罗列如下:(1)屏幕左上方显示游戏状态,当玩家方坦克数全为零时则游戏结束;(2)一般坦克只可在空地
14、中或草丛中行走,不可通过墙面等障碍物;(3)游戏中打坏敌方坦克后,可能会在随机位置随机出现血块奖励,坦克经过该位置可获得相应加生命值奖励;(4)玩家坦克的游戏资格和电脑坦克不同。1.5 Java、C语言、C+主流技术比较Java 语言是一种跨平台,适合于分布式计算环境的面向对象编程语言。JAVA现在主要用在WEB开发,手机游戏及一些平台游戏的开发,因为它具有很好的跨平台性,在手机等各种电子产品上应用非常广泛。C语言是一种面向过程编程,这就使得Java具有重用的特性,在开发速度上比C语言更快,但是在运行速度上却是C更快,因为C属于底层语言,它比JAVA更加亲近机器,所以在许多系统开发上一般是用C
15、语言。 C+多用于游戏引擎、反病毒、硬件驱动以及一些对运行效率要求比较高的应用程序,比如数据库管理系统。 C+语言在提供强大的功能的同时也提高了程序含BUG的可能性。 C+为了照顾大量的C语言使用者,而兼容了C,使得自身仅仅成为了带类的C语言,多多少少影响了其面向对象的彻底性。1.6 本章小结本章主要介绍了网络游戏在国内外发展的现状,现如今,网络游戏市场的重新定位是最迫切需要解决的问题。本系统主要的现实意义,与其他游戏的区别和完善的一些功能。本文用Java语言、C语言、C+三种主流编程技术比较,阐述了使用Java语言编程的原因。32JAVA课程设计之坦克大战 系统需求分析2 系统需求分析2.1
16、 系统运行环境2.1.1 系统运行的软件环境(1)网络服务器操作系统:Windows XP或以上系统;(2)开发工具:eclipse3.2或以上;(3)运行环境:J2SDK 1.6以上;(4)编程语言:Java语言;2.1.2 系统运行的硬件环境(1)CPU:Intel或者兼容微处理器,奔腾166MHz及其以上;(2)内存:最低32MB,可以运行图形界面的Java Application;最低48MB,可以运行Java Applet;内存不足,将会导致系统(尤其是服务器)的性能大幅下降;(3)硬盘:242 MB到80 GB及其以上;(4)图形显示卡:无要求;(5)网卡:普通网卡,3Com Of
17、ficeConnect 10/100兆位网卡;2.2 相关理论2.2.1 关于Eclipse的介绍Eclipse是一个主要针对Java项目开发所设计的(综合性集成开发环境-Integrated Development Emironment,IDE),最早是由Object Technologics International这家公司开发,该公司于1996年被IBM并购后,将Eclipse改为Open Source software。它最大的特点是:采用了插件的结构,通过下载安装不同的插件,就可以实现不同类型的程序开发。利用eclipse开发项目,是可以提高项目的开发效率,因为它不但可以像传统的一
18、些编辑器一样编写代码,而且还有自动找错/纠错功能、Debug调试和代码自动生成等一些重要的功能,这使项目开发的效率得到了提升。Eclipse可以作为其他开发工具的平台。工作区被存储在磁盘上,并且对其他人是可见的。Eclipse3.2的大多数新特性都是Eclipse用户需求的直接结果。2.2.2 J2SE框架Java主要分三大类:第一是服务器端,这里就有了J2EE企业版;第二是桌面PC,这一类用的是J2SE标准版;第三就是掌上电脑、移动设备,用的都是J2ME。但是,大部分非企业级软件还是在J2SE上开发的比较多。首先,这是因为很多的应用软件都是在J2SE上开发的;其次,J2SE是和J2EE兼容的
19、,企业版是在标准版上的扩充,在J2SE的版本上开发的软件,拿到企业的平台上是一样可以运行的;再次,一般开发还是在J2SE的环境上,只是说J2ME提供微型版的一个环境。在J2SE上虚拟出一个环境,开发出来的应用软件是可以拿到微型版上运行的。跨平台:J2SE是一个具有综合性能的平台,能使一个完整的、可缩放的高性能应用配置在任何种类的平台上。J2SE特点:支持Web服务: J2SE对SSL、LDAP等业界标准技术也给予支持,因此保证了在不同平台、系统和环境间的互操作能力。J2SE支持XML技术和一整套安全服务,因此为基于各类标准的可互操作应用与服务的创建奠定了重要基础。有了J2SE与Java Web
20、 Services Developer Pack的结合,开发商就能创建、测试和配置Web服务了。完整性:J2SE还是一个完整的开发环境。开发商可基于这一环境创建功能丰富的交互式应用。这些应用可以配置在任何平台上。J2SE具有新的GUI控制功能、快速的Java 2DT图形功能、支持国际化与本地化扩展和新的配置选项,并对Windows XP提供扩展支持。总之,J2SE是多种不同风格软件的开发基础,包括客户端Java小程序和应用程序,以及独立的服务器应用程序等。J2SE版还是J2ME的基础,是J2EE执行程序的推动力。2.3 系统功能需求2.3.1 主界面人性化功能(1)具有游戏欢迎界面(2)游戏帮
21、助文档(3)实现游戏单机/网络的便捷选择(4)具有服务器设置选项2.3.2 人机对战模式功能(1)能够发射子弹打击敌人(2)敌人能够移动(3)能够模拟爆炸(4)能够产生障碍(5)能够增长生命(6)能够使用超级子弹2.3.3 网络对战模式功能(1)添加网络功能(2)能够自主分组并选择角色(3)能够实现本机服务器设置2.3.4 联机通信机制网络编程,简单地理解就是两台计算机相互通信。其基本模型就是C/S模型,也就是通信双方中的一方必须提供一个固定的位置,而另一方只需要知道这个固定的位置,并且建立两者之间的联系,然后完成数据交换。这里提供固定位置的一方通常称为服务器,而建立联系的一方称为客户端。So
22、cket(中文意思为插座),基于客户机/服务器的Soctet通信模式如图2.1所示:创建Socket类的对象指定服务器端公认的Socket地址和端口在Socket上监听客户端的链接请求接收客户端的请求信息解释并处理请求信息向服务器发出请求向服务器端发送链接请求创建Socket类对象客户端将处理结果返回给客户端接收服务结果服务请求服务响应服务器端图2.1 基于客户机/服务器的Soctet通信模式图当客户程序需要与服务器程序通讯的时候,客户程序在客户机创建一个Socket对象,Socket类有几个构造函数。两个常用的构造函数是 Socket(InetAddress addr, int port)
23、和 Socket(String host, int port),两个构造函数都创建了一个基于Socket的连接服务器端流套接字的流套接字。两个函数都通过参数port获得服务器的端口号。假设已经建立连接了,网络API将在客户端基于Socket的流套接字中捆绑客户程序的IP地址和任意一个端口号,否则两个函数都会抛出一个IOException对象。如果创建了一个Socket对象,那么它可能通过调用Socket的 getInputStream()方法从服务程序获得输入流读传送来的信息,也可能通过调用Socket的 getOutputStream()方法获得输出流来发送消息。在读写活动完成之后,客户程序
24、调用close()方法关闭流和流套接字。2.3.5 Java图形编程Java中的Graphics类是用于绘图和显示格式化文本的工具类。在Java程序中绘图必须在一个窗口(容器)中进行,绘图窗体经常被设计为一个组件容器。一般首先在一个面板中进行绘制,然后再将这个面板添加到显示窗口中去。Graphics类是在Java.awt包中申明,显示格式化文本和绘图时通过调用Graphics类的draw()方法实现的,例如drawString(String),drawLine()等。绘图采用的坐标系是原点在左上角,纵轴向下以像素为单位的坐标系。2.4 本章小结在本章节中首先介绍了该系统的运行环境,值的注意的是
25、软件环境的配置,因为整个系统都是在虚拟环境下运行的,所以虚拟环境对于整个设计的调试和运行至关重要;其次对开发工具Eclipse3.2的简单介绍,利用eclipse开发项目,是可以提高项目的开发效率。还有是对一些技术理论,J2SE框架,Java语言,系统运行所支持的操作系统,联机通信机制及Java图形编程等理论做了简单的介绍,为本系统后期实现图形化界面和网络通信做了理论支持。JAVA课程设计之坦克大战 系统概要设计3 系统概要设计3.1系统功能设计3.1.1 坦克大战总体功能设计初 始 化游戏模式对 战对 战随机产生敌方坦克玩家坦克判断胜负玩家一玩家二玩家一玩家二敌方坦克我方坦克判断胜负结 束选
26、择角色,填写信息坦克大战游戏主要实现玩家参加游戏的整个流程,用户登陆游戏客户端选择游戏模式,可分为单机模式和网络对战模式,选择单机模式可以直接进入游戏状态;选择网络对战模式,在启动服务器后,玩家需要选择自己的角色,用户名和ID等玩家相关资料,成功后使用其账号进行登录游戏(只有成功登录的玩家才能参与网络对战游戏功能);登陆玩家就可以通过控制键盘操作,加入对战游戏。整个网络版坦克大战游戏流程图如图3.1所示:图3.1 网络坦克大战游戏流程3.1.2 TankClient类基本功能分析TankClient类是整个系统的核心部分,它承担整个系统的所有可实现功能的调度工作。 是整个游戏运行的场所。Tan
27、kClient类设计流程图如图3.2所示:开始初始化坦克对战双方玩家坦克由键盘控制移动发射炮弹碰撞检测(坦克和子弹)不处理同角色坦克产生爆炸不同角 色坦克判断胜负结束图3.2 TankClient类设计流程TankClient类是主类,通过调用其他类中封装的方法来使整个系统运行起来,下面显示TankClient与各个类之间的关系如图3.3所示:TankClient类(主类)Tank类(我方)Tank类(敌方)New参数1New参数2调用Missile类打中调用Explode类产程爆炸判断胜负键盘控制移动键盘控制移动打击图3.3 游戏系统类关联图3.1.3 Tank类基本功能分析Tank(坦克)
28、类中,封装了一些变量属性,包括坦克自己的大小(WIDTH,HRIGHT),运动速度(SPRRD_X:在x轴方向的速度;SPEED_Y:在Y轴方向的速度)、生命值控制(life)、坦克编号(id)、坦克名(name)、方向控制(dir)、生死控制(live)、好坏控制(good)的变量等。Tank类中没有main函数,不是主类,它当中只封装一些变量属性和静态方法,被TankClient类调用来实现坦克的一系列动作。Tank类中的主要方法罗列如下:(1)getRect()方法public Rectangle getRect() return new Rectangle(x, y, this.WID
29、TH, this.HEIGHT);Rectangle类是碰撞检测的辅助类,通过得到子弹的x,y坐标和宽高度,检测两个矩形是否碰撞(相交);(2)draw()方法:负责将所有的活动在屏幕上画出来;(3)move()方法:主要负责控制坦克的移动,包括8个方向(左,左上,上,右上,右,右下,下,左下)的控制以及给坦克一个移动的速度;(4)keyPressed()方法:设定使用键盘的“”“”“”“”键控制坦克移动;(5)keyReleased()方法:处理按键抬起事件,抬起“CTRL”键时,发射炮弹并加入新炮弹,能够逐一发射每一发炮弹、抬起“A”键可以发射超级炮弹等功能;(6)locationDire
30、ction()方法:定义了炮筒方向,可以向八个方向发射炮弹;(7)fire()方法:处理发送子弹的方法;(8)bumpWithWall()方法:主要负责处理坦克撞墙事件;(9)bumpWithTank()方法:主要到负责处理坦克和坦克相撞事件;3.1.4 Missile类基本功能分析Misslile(子弹)类和Tank类一样,只封装一些变量属性和静态方法,主要变量包括:子弹自己的大小(WIDTH,HRIGHT),运动速度(SPRRD_X:在x轴方向的速度;SPEED_Y:在Y轴方向的速度)、子弹标示(ID)、所属坦克的id号(TankId用于网络版)等。Misslie类持有一个TankClie
31、nt类(大管家)的引用tc,TankClient类要执行发射炮弹操作时调用Missile类中的方法。Misslie类中的主要方法如下:draw()方法:负责画出子弹的所有活动;move()方法:先判断方向再移动,并给它一定的移动速度;getRect()方法:负责取得子弹的外切方形,为碰撞检测做准备;hitTan()方法:检测子弹是否撞到坦克,若撞到返回true,否则返回false;hitTanks()方法:检测是否撞到一系列坦克中的一个;hitWall()方法:检测子弹和墙是否相撞。3.1.5 Explode类基本功能分析Explode(爆炸)类也是一个只封装自己的变量和方法的外部包装类,没有
32、main方法,供TankClient主类需要时调用它的draw()方法,当子弹击中坦克时需要产生爆炸。使用11张图片重叠现实爆炸效果如3.4图所示:图3.4 爆炸图3.1.6 服务器类基本功能分析TankServer类TankClient 1类类TankClient 2类类New参数1New参数2调用Missile类调用Explode类产程爆炸判断胜负Tank类(我方)Tank类(敌方)打中打击TankServer(服务器)类主要负责在网络对战游戏时维护各个在线玩家的基本信息,并动态的维护玩家列表。联机模式下类关系图如图3.5所示:3.5 联机模式类关联图3.1.7 信息传送类基本功能分析信息
33、传送类就是用来封装客户端和服务器端的交互信息。将网络中传递的众多信息封装成可序列化的类,将会使程序有很好的可扩展性。3.2 本章小结本章首先对整个游戏设计进行了可行性分析,其次对游戏要达到怎么样的需求,要实现哪些功能做以及实现这些功能设计到的类,最后再详细的介绍了系统要实现这些功能所涉及到的各个类之间的关系JAVA课程设计之坦克大战 系统详细设计4 系统详细设计4.1 游戏主窗体实现TankClient类负责画出游戏主窗体,它是整个游戏运行和所有活动的场所。登陆主窗口后,主界面上包括单机个人、网络对战、小小帮助、启动服务器选项 ,根据用户意愿选择游戏类型,“帮助”下拉菜单条中有游戏说明和游戏操
34、作,方便用户了解游戏规则。除此之外,本设计优点是TankClient类还封装了一个update()方法,使用双缓冲消除闪烁现象。因为刷新重画频率太快,paint()方法还没有完成,会造成逐条显示,影响系统的运行,所以解决办法是创建一个虚拟屏幕,在屏幕的后面,在要画的将所有的东西画在虚拟屏幕上,也就是内存上,画完之后一次性将虚拟屏幕上的内容贴到屏幕上,这样就消除了闪烁现象,用户的眼睛便感觉不到闪烁了。 TankClient类是整个系统的“大管家”,当要执行某动作时,“大管家”只需要调用各个类中封装好的方法,让被调用的类自己去执行它自己的方法,这更体现了面向对象的思想。游戏主窗体界面如图4.1所示
35、:图4.1 游戏主窗口预览效果图游戏帮助文档设计:图4.2 游戏帮助文档4.2 单机游戏的实现游戏运行主界面,在下拉菜单中选择单机游戏进入单人模式,通过键盘控制坦克运动,相互对战,当被打中时产生一个爆炸,屏幕左上方显示游戏信息:子弹数目(出界就死亡)、爆炸数目、敌方坦克数目、玩家坦克生命值。其效果图如图4.2所示:玩家坦克,上方红色小方框为生命值,当被击中一次时生命值减20墙血块:用于添加生命值图4.3 单机游戏模式主界面图实现虚拟屏幕消除闪烁的关键代码如下:public void update(Graphics g) /利用双缓冲消除闪烁的效果if(offScreenImage = null
36、) offScreenImage = this.createImage(GAME_WIDTH, GAME_HEIGHT);Graphics gOffScreen = offScreenImage.getGraphics();Color c = gOffScreen.getColor();gOffScreen.setColor(Color.BLACK);gOffScreen.fillRect(0, 0, GAME_WIDTH, GAME_HEIGHT);gOffScreen.setColor(c);paint(gOffScreen);g.drawImage(offScreenImage,0,0,
37、null);坦克图片技术:private static Toolkit tk = Toolkit.getDefaultToolkit();private static Image tankImages = null;private static Map<String, Image> imgs = new HashMap<String, Image>();/定义HashMap,又来盛装坦克的游戏用图,8个方向static tankImages = new Image tk.getImage(Tank.class.getClassLoader().getResource(&
38、quot;images/tankL.gif"),/指定坦克游戏用图的文件目录tk.getImage(Tank.class.getClassLoader().getResource("images/tankLU.gif"),/本项目中坦克图片存放于项目文件之下的images包中tk.getImage(Tank.class.getClassLoader().getResource("images/tankU.gif"),tk.getImage(Tank.class.getClassLoader().getResource("images/
39、tankRU.gif"),tk.getImage(Tank.class.getClassLoader().getResource("images/tankR.gif"),tk.getImage(Tank.class.getClassLoader().getResource("images/tankRD.gif"),tk.getImage(Tank.class.getClassLoader().getResource("images/tankD.gif"),tk.getImage(Tank.class.getClassLoad
40、er().getResource("images/tankLD.gif");imgs.put("L", tankImages0);imgs.put("LU", tankImages1);imgs.put("U", tankImages2);imgs.put("RU", tankImages3);imgs.put("R", tankImages4);imgs.put("RD", tankImages5);imgs.put("D", tan
41、kImages6);imgs.put("LD", tankImages7);玩家可以使用超级炮弹,可同时向八个方向发射炮弹,效果如图4.3所示:超级子弹,A控制,8个方向图4.4 发射超级炮弹坦克图片调用:switch(ptDir) /游戏进行时,根据方向调用相应的坦克图片case L:g.drawImage(imgs.get("L"), x, y, null);break;case LU:g.drawImage(imgs.get("LU"), x, y, null);break;case U:g.drawImage(imgs.get
42、("U"), x, y, null);break;case RU:g.drawImage(imgs.get("RU"), x, y, null);break;case R:g.drawImage(imgs.get("R"), x, y, null);break;case RD:g.drawImage(imgs.get("RD"), x, y, null);break;case D:g.drawImage(imgs.get("D"), x, y, null);break;case LD:g.dra
43、wImage(imgs.get("LD"), x, y, null);break;move();4.3 联机功能实现在本系统的实现过程中,在支持网络对战的服务器类的定义中需要使用ServerSocket类来响应多个客户端连接请求,server服务器上需要两大协议,一个是TCP,用来接收客户端;另一个是UDP,用来转发游戏的数据。Server类系统模型图如图4.5所示:serverTCPListenerUDPListener接收客户端连接转发游戏数据图4.5 Server类系统简单模型图网络游戏模式下,游戏主要在客户端运行,启动客户端时玩家首先要填写信息之后才能加入到游戏中去
44、,先启动服务器,红色小方块表示确定服务器已连接。如图4.6所示:图4.6 服务器主机想启动服务图4.7 服务器启动成功进入网络模式,输入信息:IP、Port,若是客户端玩家,需要填入主机IP,和Port;主机服务器只需填写UDP Port。游戏主界面图如图4.7所示:图4.8 网络版游戏玩家信息栏图4.9 多个玩家连入填写好玩家信息,登陆后游戏主界面,进入游戏后,通过玩家坦克上方的ID号(单双数)和颜色(蓝红)来区分敌友。游戏界面左上角显示游戏的基本信息,战坦克数等,如图4.8所示:图4.10 登陆网络模式主界面图中模拟多个客户端进行游戏时各客户端的实时运行情况,如图4.9所示:图4.11 网
45、络版游戏对战实时显示图由于由一台电脑模拟多个客户端,所以只能操作当前窗口新建的坦克!网络版运行时,若是实验室电脑,会出现下面情况:由于部分电脑的端口已经被使用,所用可用地址会很少,造成程序不能编译运行,如图:图4.12 端口地址资源过少4.4 网络模式主要代码网络模式设计主要代码如下:TankServer(服务器)类代码片段如下:import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.IOException;import .DatagramPacket;import .DatagramSocke
46、t;import .InetSocketAddress;import .ServerSocket;import .Socket;import .SocketException;import java.util.ArrayList;import java.util.List;/* * 坦克游戏的服务器 * author mashibing * */public class TankServer private static int ID = 100;/* * TCP的监听端口 */public static final int TCP_PORT = 8888; /TCP的监听端口/* * UDP
47、的监听端口 */public static final int UDP_PORT = 6666; /UDP的监听端口List<Client> clients = new ArrayList<Client>();/* * 启动服务器 * */public void start() new Thread(new UDPThread().start();ServerSocket ss = null;try ss = new ServerSocket(TCP_PORT); catch (IOException e) e.printStackTrace();while (true
48、) /链接TCPSocket s = null;try s = ss.accept();DataInputStream dis= new DataInputStream(s.getInputStream();String IP = s.getInetAddress().getHostAddress();int udpPort = dis.readInt();Client c = new Client(IP, udpPort);clients.add(c);DataOutputStream dos=new DataOutputStream(s.getOutputStream();dos.writ
49、eInt(ID+);/ s.close();System.out.println("A Client Connect! Addr- "+ s.getInetAddress() + ":" + s.getPort()+ "-UDP Port:" + udpPort); catch (IOException e) e.printStackTrace(); finally if (s != null) try s.close();s = null; catch (IOException e) e.printStackTrace();publ
50、ic static void main(String args) new TankServer().start();private class Client String IP;int udpPort;public Client(String IP, int udpPort) this.IP = IP;this.udpPort = udpPort;private class UDPThread implements Runnable /建立一个UDP的接受和转发线程byte buf = new byte1024;public void run() DatagramSocket ds = nul
51、l;try ds = new DatagramSocket(UDP_PORT); catch (SocketException e) e.printStackTrace();System.out.println("UDP thread started at port :" + UDP_PORT);while (ds != null) DatagramPacket dp = new DatagramPacket(buf, buf.length);try ds.receive(dp); /接受数据包for (int i = 0; i < clients.size(); i
52、+) /分别转发给其他客户端Client c = clients.get(i);dp.setSocketAddress(new InetSocketAddress(c.IP,c.udpPort); /得到将要转发的客户端的IP地址和端口ds.send(dp);System.out.println("a packet received!"); catch (IOException e) e.printStackTrace();4.5 本章小结本章主要介绍了该系统的实现和运行,分别叙述了在单机模式和网络对战模式下游戏的运行和调试过程。在单机模式下,玩家的游戏发射火力要比电脑随机产生的坦克能力稍强一些,当分数值达到一定时,玩家可以发射超级炮弹。网络模式下,注意一定要先启动服务器,只有启动服务器后,各个玩家才能加入游戏。到此为止,本设计基本完成预期效果。JAVA课程设计之坦克大战 结 论5 结论5.1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 生态环境合作合同履约金
- 2025合同范本创业公司股权分配协议模板
- 2025设备租赁合同争议答辩
- 2025企业间的贷款协议范本:借款合同示例
- 沧州2025年沧州市市直事业单位招聘(统一招聘)笔试历年参考题库附带答案详解
- 浙江国企招聘2025宁波大通开发有限公司招聘6人笔试参考题库附带答案详解析集合
- 2025至2031年中国春秋古剑行业投资前景及策略咨询研究报告
- 2025至2031年中国数字式温度表行业投资前景及策略咨询研究报告
- 娱乐行业社交媒体运营企业制定与实施新质生产力项目商业计划书
- 气球造型艺术工作室企业制定与实施新质生产力项目商业计划书
- 2025届浙江省杭州市建兰中学八年级英语第二学期期末综合测试试题含答案
- 广东省惠州市惠阳区2023-2024学年一年级下学期语文期末随堂练习试卷(含答案)
- 2025年度会计人员继续教育会计法律法规答题活动测试100题答案
- 24秋国家开放大学《社会教育及管理》形考任务1-3参考答案
- 2024年河北省高考地理试卷(含答案逐题解析)
- 2024年江西省高考化学试卷(真题+答案)
- TCCES 6003-2021 预制混凝土构件用金属预埋吊件
- 高三物理高考常考知识点选择题归纳
- 我国房屋安全管理的现状与对策
- 所有股票技术指标一览
- 农机事故处理文书
评论
0/150
提交评论