计算机软件专业论文24523.doc

上传人:哈尼dd 文档编号:3968115 上传时间:2019-10-11 格式:DOC 页数:26 大小:870.02KB
返回 下载 相关 举报
计算机软件专业论文24523.doc_第1页
第1页 / 共26页
计算机软件专业论文24523.doc_第2页
第2页 / 共26页
计算机软件专业论文24523.doc_第3页
第3页 / 共26页
计算机软件专业论文24523.doc_第4页
第4页 / 共26页
计算机软件专业论文24523.doc_第5页
第5页 / 共26页
点击查看更多>>
资源描述

《计算机软件专业论文24523.doc》由会员分享,可在线阅读,更多相关《计算机软件专业论文24523.doc(26页珍藏版)》请在三一文库上搜索。

1、毕 业 论 文 题题 目目: : 坦克大战游戏设计与实现 班 级: 09 级计软一班 学 号: 姓 名: 张宏亮 指导教师: 黄勇 完 成 时 间: 2011 年 12 月 3 日 基于基于 Java 的网络版坦克大战游戏设计的网络版坦克大战游戏设计 摘摘 要要:本设计采用面向对象的设计模式,对游戏中的所有物体赋予对象的概念和属 性。运行程序后允许用户选择执行选项菜单。在开始游戏后,启动服务器和客户端,对背 景的所有物体进行绘图。在主程序运行的线程中,画面刷新将以一定的频率采用双缓冲技 术对屏幕重绘,实时反映整个游戏的进行状态。用户控制的坦克运行在主线程中,随屏幕 刷新的频率而移动。坦克将在游

2、戏开始时进行初始化,然后将坦克绘制在地图的上层。本 设计主要实现的功能是让坦克移动并能够智能的打出炮弹,躲避子弹,炸毁对方坦克。能 够支持网络对战和单机对战两种模式。 关关键键词词:面向对象;坦克大战;网络游戏;Java;Socket 类 中中图图分分类类号号:TP311.1 Java-based Web version of Battle City Game Design 【A Ab bs st tr ra ac ct t】The design of object-oriented design patterns, all the objects on in the game to give

3、 the concept of objects and attributes. After running the program allows the user to select the implementation of the Options menu. At the beginning of the game, start the server and client, all objects on the background graphics. Thread running in the main program, the screen refresh frequency will

4、 be some double buffer technology to redraw the screen in real time to reflect the state of the game. User-controlled tanks to run in the main thread, with the screen refresh frequency of the movement. Tank will start to initialize the game, and then draw the map of the upper tank. Designed to achie

5、ve the main function is to allow tanks to move and be able to play smart bombs, dodge bullets, to blow up other tanks. To support online play and single play against two modes. K Ke ey y w wo or rd ds s: : Object-oriented; Battle City; online games; Java; Socket class I 目录目录 摘要. 第 1 章 前言1 1.1 游戏设计的需

6、求分析.1 1.1.1 国内外电子网络游戏的现状.1 1.1.2 本系统的现实意义.1 1.1.3 本系统和其他开发游戏区别.2 1.2 开发技术概述.2 1.2.1 JAVA、C 语言、C+三种主流编程技术比较 .2 1.3 本章小结.2 第 2 章 相关技术理论3 2.1 系统运行环境.3 2.1.1 系统运行的软件环境3 2.1.2 系统运行的硬件环境3 2.2 相关理论.3 2.2.1 关于 ECLIPSE的介绍 3 2.2.2 J2SE 框架 3 2.2.3 联机通信机制.4 2.2.4 JAVA图形编程5 2.3 本章小结.5 第 3 章 系统设计6 3.1 系统可行性分析6 3.

7、1.1 技术可行性6 3.1.2 经济可行性6 3.1.3 操作可行性6 3.2 系统需求分析6 3.2.1 在人机对战模式下实现的功能6 3.2.2 在网络对战模式下实现的功能6 3.3 系统功能设计.7 3.3.1 坦克大战总体功能设计.7 II 3.3.2 TANKCLIENT类基本功能分析 7 3.3.3 TANK类基本功能分析8 3.3.4 MISSILE类基本功能分析 .9 3.3.5 EXPLODE类基本功能分析 .9 3.3.6 服务器类基本功能分析.10 3.3.7 信息传送类基本功能分析.10 3.4 本章小结10 第 4 章 系统实现.11 4.1 游戏主窗体实现11 4

8、.2 单机游戏的实现12 4.3 联机功能实现14 4.4 本章小结17 第 5 章 总结与展望.18 5.1 总结18 5.2 设计中的不足之处18 5.3 展望18 致 谢19 1 第第 1 1 章章 前言前言 人类进入 21 世纪,全球一体化,互联网就起到重要的作用,而且随着互联网的不断发 展,信息技术逐渐发展壮大,将成为网络经济的核心。其中计算机、网络通信的发展最为迅 速。在现今电子信息高速发展的时代,网络游戏已经深入到人们的日常生活中,成为老少皆 宜的娱乐方式。 1.11.1 游戏设计的需求分析游戏设计的需求分析 1.1.11.1.1 国内外电子网络游戏的现状国内外电子网络游戏的现状

9、 游戏本身就是一种娱乐方式。自有人类文明的时候,就有了游戏,可以说游戏就是人们 生活娱乐的一部分。在今天,借助于数字、电子、网络、创意、编剧、美工、音乐等等 “先进”的道具,网络游戏对于人们现实生活的虚拟达到了一个全新的境界,并且则在这新 的境界上还原了游戏的本源-人与人的互动。网络游戏满足了现代社会必须的沟通需求,无 疑它应该是适合所有人的。 国内网络游戏市场,已经坐拥了 1000 万用户且仍不断增长的游戏玩家市场,百余款游 戏也着实热闹,但也体现出国内玩家的相对固定和游戏种类的相对单一,虽说运营商的推广 手法也各具特点,可本质上的大同小异使得竞争空前惨烈,而由此诱发的种种问题更是招致 了社

10、会与媒体的不满,阻碍了游戏产业的发展。网络游戏市场的重新定位是最迫切需要解决 的问题。大型游戏机除了在大众休闲娱乐方面,还在军事、国防、医疗等方面有良好的发展 前景。广州大型游戏机所采用的尖端计算机图形图像技术、多样化的软件程序设计、成熟的 机械和电子技术,被充分运用在军事、国防及医疗等方面。例如,在军事模拟对抗演习中, 大型游戏机既可以模拟作战现场的地形、军力部署、天气等情况,还可以进行多兵种战术技 能对抗训练;在国防训练方面,大型游戏机可以模拟坦克操纵、导弹发射、飞机驾驶、舰艇 巡航等多种训练任务;在医疗培训方面,大型游戏机拥有的全息三维立体投影技术,可以逼 真地展示人体的各部分构造和器官

11、,以上这些方面的应用,都显示出大型游戏机在降低行业 技能培训成本的优势。 1.1.21.1.2 本系统的现实意义本系统的现实意义 游戏本身是一种娱乐方式,能带给人们无尽的乐趣,而且游戏行业的发展还将会带动众 多周边产业,如五金、塑料、机械、电子、 显像管,高端机型甚至使用了 40 英寸以上的大 屏幕背投、液晶显示器等,这些显像设备不但要依赖国内众多显像管生产企业提供支持,更 要针对游戏的内容进行深入开发和优化,以适应游戏内容的飞速发展和变化,大大突破了传 统家电类显像设备的限制,对国内显像管制造企业的发展、创新具有极大的推动作用,大型 游戏机的外部框体制造涉及工业设计、模具加工、五金加工、塑料

12、成形、特殊印刷等工艺流 程,由此带动了一大批相关的零部件生产制造企业,而这些企业均为生产密集型企业,大幅 2 度增加了劳动就业的需求。 1.1.31.1.3 本系统和其他开发游戏区别本系统和其他开发游戏区别 本系统的坦克大战是基于 Java 语言设计开发的,具有高超的人工智能,精美的图形处 理,支持单机运行和网络对战的坦克射击游戏。比之前网络上实现的游戏更加方便,快捷, 智能。游戏基本玩法较简单,游戏可一人电脑作战,每次电脑方有坦克 10 辆,游戏以消灭 全部敌方坦克过关为目的。在这过程中,坦克有机会得到血块来添加生命值,从而变得更加 强大,也能利用各种有利地形来阻击敌人。游戏设置了墙面,电脑

13、方坦克不能穿越墙面射击 玩家坦克,而玩家坦克可随意穿越墙面打击电脑方坦克,这一游戏特权。还有给玩家坦克设 置超级炮弹,当电脑方坦克数量过多时,玩家坦克可以发射超级炮弹打击敌方。主要新增的 功能简单罗列如下: 1、屏幕左上方显示游戏状态,当玩家方坦克数全为零时则游戏结束; 2、一般坦克只可在空地中或草丛中行走,不可通过墙面等障碍物; 3、游戏中打坏敌方坦克后,可能会在随机位置随机出现血块奖励,坦克经过该位置可 获得相应加生命值奖励; 4、玩家坦克的游戏资格和电脑坦克不同。 1.21.2 开发技术概述开发技术概述 1.2.11.2.1 JavaJava、C C 语言、语言、C+C+三种主流编程技术

14、比较三种主流编程技术比较 Java 语言是一种跨平台,适合于分布式计算环境的面向对象编程语言。JAVA 现在主要 用在 WEB 开发,手机游戏及一些平台游戏的开发,因为它具有很好的跨平台性,在手机等各 种电子产品上应用非常广泛。 C 语言是一种面向过程编程,这就使得 Java 具有重用的特性,在开发速度上比 C 语言更 快,但是在运行速度上却是 C 更快,因为 C 属于底层语言,它比 JAVA 更加亲近机器,所以在 许多系统开发上一般是用 C 语言,比如我们常用的 XP 系统、LINUX 系统,都是 C 语言开发 的。跨平台的服务器端的嵌入式脚本语言。 C+多用于游戏引擎、反病毒、硬件驱动以及

15、一些对运行效率要求比较高的应用程序, 比如数据库管理系统。 C+语言在提供强大的功能的同时也提高了程序含 BUG 的可能性。 C+为了照顾大量的 C 语言使用者,而兼容了 C,使得自身仅仅成为了带类的 C 语言,多多少 少影响了其面向对象的彻底性。 1.31.3 本章小结本章小结 本章主要介绍了网络游戏在国内外发展的现状,现如今,网络游戏市场的重新定位是最 迫切需要解决的问题。本系统主要的现实意义,与其他游戏的区别和完善的一些功能。本文 用 Java 语言、C 语言、C+三种主流编程技术比较,阐述了使用 Java 语言编程的原因。 3 第第 2 2 章章 相关技术理论相关技术理论 2.12.1

16、 系统运行环境系统运行环境 2.1.12.1.1 系统运行的软件环境系统运行的软件环境 (1)网络服务器操作系统:Windows XP; (2)开发工具:eclipse3.2; (3)运行环境:J2SDK 1.5; (4)编程语言:Java 语言; 2.1.22.1.2 系统运行的硬件环境系统运行的硬件环境 (1)CPU:Intel 或者兼容微处理器,奔腾 166MHz 及其以上; (2)内存:最低 32MB,可以运行图形界面的 Java Application;最低 48MB,可以运 行 Java Applet;内存不足,将会导致系统(尤其是服务器)的性能大幅下降; (3)硬盘:242 MB

17、 到 80 GB 及其以上; (4)图形显示卡:无要求; (5)网卡:普通网卡,3Com OfficeConnect 10/100 兆位网卡; 2.22.2 相关理论相关理论 2.2.12.2.1 关于关于 EclipseEclipse 的介绍的介绍 Eclipse 是一个主要针对 Java 项目开发所设计的【综合性集成开发环境-Integrated Development Emironment,IDE】 ,最早是由 Object Technologics International 这家公司 开发,该公司于 1996 年被 IBM 并购后,将 Eclipse 改为 Open Source s

18、oftware。它最大 的特点是:采用了插件的结构,通过下载安装不同的插件,就可以实现不同类型的程序开 发。利用 eclipse 开发项目,是可以提高项目的开发效率,因为它不但可以像传统的一些 编辑器一样编写代码,而且还有自动找错/纠错功能、Debug 调试和代码自动生成等一些重 要的功能,这使项目开发的效率得到了提升。Eclipse 可以作为其他开发工具的平台。工 作区被存储在磁盘上,并且对其他人是可见的。Eclipse3.2 的大多数新特性都是 Eclipse 用户需求的直接结果。 2.2.22.2.2 J2SEJ2SE 框架框架 J2SE 软件是快速开发、部署关键任务和企业应用程序的首选

19、解决方案。J2SE 是基于 Java 跨平台技术和强有力的安全模块而开发的,其最新的特征和功能极大地提高了 Java 语 言的伸缩性、灵活性、适用性,以及可靠性。J2SE 特点:良好的计算性能和缩放能力。 J2SE 提升了 Java 计算的性能与缩放能力,代表了 Java 技术的大跨步进展。通过 J2SE 框架 更简易的步骤、花费更少的时间,采用 Java 技术开发与配置要求更高的应用了。J2SE 在 Java 客户机应用方面得到了重大性能提升。基于 Swing 的 Java 小程序和应用程序在图形用 户界面(GUI)的响应速度上也大有提高。跨平台:J2SE 是一个具有综合性能的平台,能使 4

20、 一个完整的、可缩放的高性能应用配置在任何种类的平台上。支持 Web 服务: J2SE 对 SSL、LDAP 等业界标准技术也给予支持,因此保证了在不同平台、系统和环境间的互操作 能力。J2SE 支持 XML 技术和一整套安全服务,因此为基于各类标准的可互操作应用与服务 的创建奠定了重要基础。有了 J2SE 与 Java Web Services Developer Pack 的结合,开发商就能 创建、测试和配置 Web 服务了。完整性:J2SE 还是一个完整的开发环境。开发商可基于 这一环境创建功能丰富的交互式应用。这些应用可以配置在任何平台上。J2SE 具有新的 GUI 控制功能、快速的

21、Java 2DT 图形功能、支持国际化与本地化扩展和新的配置选项,并 对 Windows XP 提供扩展支持。总之,J2SE 是多种不同风格软件的开发基础,包括客户端 Java 小程序和应用程序,以及独立的服务器应用程序等。J2SE 版还是 J2ME 的基础,是 J2EE 执行程序的推动力。 Java 之所以能够发展得很快,是因为互联网的发展非常快。从计算的结构来看,Java 主要分三大类:第一是服务器端,这里就有了 J2EE 企业版;第二是桌面 PC,这一类用的是 J2SE 标准版;第三就是掌上电脑、移动设备,用的都是 J2ME。但是,大部分非企业级软件还 是在 J2SE 上开发的比较多。首

22、先,这是因为很多的应用软件都是在 J2SE 上开发的;其次, J2SE 是和 J2EE 兼容的,企业版是在标准版上的扩充,在 J2SE 的版本上开发的软件,拿到 企业的平台上是一样可以运行的;再次,一般开发还是在 J2SE 的环境上,只是说 J2ME 提供 微型版的一个环境。在 J2SE 上虚拟出一个环境,开发出来的应用软件是可以拿到微型版上 运行的。 2.2.32.2.3 联机通信机制联机通信机制 网络编程,简单地理解就是两台计算机相互通信。其基本模型就是客户机/服务器模型, 也就是通信双方中的一方必须提供一个固定的位置,而另一方只需要知道这个固定的位置, 并且建立两者之间的联系,然后完成数

23、据交换。这里提供固定位置的一方通常称为服务器, 而建立联系的一方称为客户端。Socket(中文意思为插座) ,基于客户机/服务器的 Soctet 通信模式如图 2.1 所示: 5 创建 Socket 类的对象 指定服务器端公认的 Socket 地址和端 口 在 Socket 上监听客户端的链接请求 接收客户端的请求信息 解释并处理请求信息 向服务器发出请求 向服务器端发送链接请求 创建 Socket 类对象 客户端 将处理结果返回给客户端接收服务结果 服务请求 服务响应 服务器端 图 2.1 基于客户机/服务器的 Soctet 通信模式图 当客户程序需要与服务器程序通讯的时候,客户程序在客户机

24、创建一个 socket 对象, Socket 类有几个构造函数。两个常用的构造函数是 Socket(InetAddress addr, int port) 和 Socket(String host, int port),两个构造函数都创建了一个基于 Socket 的连接服务 器端流套接字的流套接字。两个函数都通过参数 port 获得服务器的端口号。假设已经建立 连接了,网络 API 将在客户端基于 Socket 的流套接字中捆绑客户程序的 IP 地址和任意一个 端口号,否则两个函数都会抛出一个 IOException 对象。如果创建了一个 Socket 对象,那 么它可能通过调用 Socket

25、 的 getInputStream()方法从服务程序获得输入流读传送来的信息, 也可能通过调用 Socket 的 getOutputStream()方法获得输出流来发送消息。在读写活动完 成之后,客户程序调用 close()方法关闭流和流套接字。 2.2.42.2.4 JavaJava 图形编程图形编程 Java 中的 Graphics 类是用于绘图和显示格式化文本的工具类。在 Java 程序中绘图必 须在一个窗口(容器)中进行,绘图窗体经常被设计为一个组件容器。一般首先在一个面板 中进行绘制,然后再将这个面板添加到显示窗口中去。 Graphics 类是在 Java.awt 包中申明,显示格式

26、化文本和绘图时通过调用 Graphics 类 的 draw()方法实现的,例如 drawString(String),drawLine()等。绘图采用的坐标系是原 点在左上角,纵轴向下以像素为单位的坐标系。 2.32.3 本章小结本章小结 在本章节中首先介绍了该系统的运行环境,值的注意的是软件环境的配置,因为整个系 统都是在虚拟环境下运行的,所以虚拟环境对于整个设计的调试和运行至关重要;其次对开 发工具 Eclipse3.2 的简单介绍,利用 eclipse 开发项目,是可以提高项目的开发效率。还 有是对一些技术理论,J2SE 框架,Java 语言,系统运行所支持的操作系统,联机通信机制 6

27、及 Java 图形编程等理论做了简单的介绍,为本系统后期实现图形化界面和网络通信做了理 论支持。 第第 3 3 章章 系统设计系统设计 3.13.1 系统可行性分析系统可行性分析 3.1.13.1.1 技术可行性技术可行性 Java语言自Sun公司于1995年5月正式发布以来,经历了出生、成长、成熟壮大的几个 阶段,逐渐发展成为IT领域里的主流计算模式,使用Java开发工具方便,容易实现。Java 对开发网络产品有它自己独特的优势,网络游戏也是其开发产物之一。本系统开发过程是 利用Java编程语言和eclipse集成开发环境配合使用来实现的,它是基于TCP/UDP协议和 Socket编程技术,

28、建立以C/S为结构模式的娱乐性游戏平台。 3.1.23.1.2 经济可行性经济可行性 本设计的开发是基于JDK5.0和eclipse3.2的,因为它们都是免费而且开源的软件,所 以实现本设计的成本就有所降低。随着计算机、网络通讯和信息技术的迅猛发展以及人类 精神生活品质的提高,国际、国内的各种各样的大型综合游戏网站如雨后春笋般的发展起 来。一款好的游戏带来的经济效益可以说是不可估量的,比如现在网上最流行的魔兽世界、 征途等大型网络版游戏。本游戏既可单机运行,也可以是联机版多人同时在线对战。 3.1.33.1.3 操作可行性操作可行性 本设计是一个网络版的游戏平台,只是模拟了现在社会上的一些网络

29、游戏的部分功能, 所以操作简易,玩家不需要了解内部流程,只是和一般其他的网络游戏一样的操作即可开 始游戏。相对于开发者而言,整个系统形成主要由JDK5.0虚拟环境和eclipse3.2共同完成, 无需更多复杂的工具和服务器支持。 3.23.2 系统需求分析系统需求分析 3.2.13.2.1 在人机对战模式下实现的功能在人机对战模式下实现的功能 7 1) 能够发射子弹打击敌人 2)敌人能够移动 3)能够模拟爆炸 4)能够产生障碍 5)能够增长生命 3.2.23.2.2 在网络对战模式下实现的功能在网络对战模式下实现的功能 在人机对战模式中实现功能基础上,增加以下功能实现网络对战功能: 1)添加网

30、络功能,使两台或者多台不同计算机的玩家通过一定的网络连接,加入到游 戏中; 2)能够自主分组并选择角色,填写自己的游戏信息,各个玩家之间实现网络对战功能, 并且同是一方的坦克不能相互攻击; 3.33.3 系统功能系统功能设计设计 3.3.13.3.1 坦克大战总体功能设计坦克大战总体功能设计 坦克大战游戏主要实现玩家参加游戏的整个流程,用户登陆游戏客户端选择游戏模式, 可分为单机模式和网络对战模式,选择单机模式可以直接进入游戏状态;选择网络对战模 式,在启动服务器后,玩家需要选择自己的角色,用户名和ID等玩家相关资料,成功后使 用其账号进行登录游戏(只有成功登录的玩家才能参与网络对战游戏功能)

31、 ;登陆玩家就可 以通过控制键盘操作,加入对战游戏。整个网络版坦克大战游戏流程图如图3.1所示: 8 初 始 化 游戏模式 对 战 对 战 随机产生敌方坦克玩家坦克 判断胜负玩 家 一 玩 家 二 玩 家 一 玩 家 二 敌方坦克我方坦克 判断胜负 结 束 选择角色,填写信 息 图 3.1 网络坦克大战游戏流程 3.3.23.3.2 TankClientTankClient 类基本功能分析类基本功能分析 TankClient 类是整个系统的核心部分,它承担整个系统的所有可实现功能的调度工作。 是整个游戏运行的场所。TankClient 类设计流程图如图 3.2 所示: 9 开始 初始化坦克 对

32、战双方玩家坦克由键盘控制移动 发射炮弹 碰撞检测(坦克和子弹)不处理 同角色坦克 产生爆炸 不同角 色坦克 判断胜负 结束 图 3.2 TankClient 类设计流程 TankClient 类是主类,通过调用其他类中封装的方法来使整个系统运行起来,下面显 示 TankClient 与各个类之间的关系如图 3.3 所示: TankClient 类(主类) Tank 类(我方)Tank 类(敌方) New 参数 1New 参数 2 调用 Missile 类 打中 调用 Explode 类产程爆炸 判断胜负 键盘 控制 移动 键盘 控制 移动打击 图 3.3 游戏系统类关联图 3.3.33.3.3

33、 TankTank 类基本功能分析类基本功能分析 Tank(坦克)类中,封装了一些变量属性,包括坦克自己的大小(WIDTH,HRIGHT) ,运 10 动速度(SPRRD_X:在 x 轴方向的速度;SPEED_Y:在 Y 轴方向的速度)、生命值控制(life) 、 坦克编号(id) 、坦克名(name)、方向控制(dir)、生死控制(live)、好坏控制(good)的变 量等。Tank 类中没有 main 函数,不是主类,它当中只封装一些变量属性和静态方法,被 TankClient 类调用来实现坦克的一系列动作。Tank 类中的主要方法罗列如下: (1)getRect()方法 public R

34、ectangle getRect() return new Rectangle(x, y, this.WIDTH, this.HEIGHT); Rectangle 类是碰撞检测的辅助类,通过得到子弹的 x,y 坐标和宽高度,检测两个矩 形是否碰撞(相交) ; (2)draw()方法:负责将所有的活动在屏幕上画出来; (3)move()方法:主要负责控制坦克的移动,包括 8 个方向(左,左上,上,右上, 右,右下,下,左下)的控制以及给坦克一个移动的速度; (4)keyPressed()方法:设定使用键盘的“” “” “” “”键控制坦克移动; (5)keyReleased()方法:处理按键抬起

35、事件,抬起“CTRL”键时,发射炮弹并加入 新炮弹,能够逐一发射每一发炮弹、抬起“A”键可以发射超级炮弹等功能; (6)locationDirection()方法:定义了炮筒方向,可以向八个方向发射炮弹; (7)fire()方法:处理发送子弹的方法; (8)bumpWithWall()方法:主要负责处理坦克撞墙事件; (9)bumpWithTank()方法:主要到负责处理坦克和坦克相撞事件; 3.3.43.3.4 MissileMissile 类基本功能分析类基本功能分析 Misslile(子弹)类和 Tank 类一样,只封装一些变量属性和静态方法,主要变量包括: 子弹自己的大小(WIDTH,

36、HRIGHT) ,运动速度(SPRRD_X:在 x 轴方向的速度;SPEED_Y:在 Y 轴方向的速度)、子弹标示(ID) 、所属坦克的 id 号(TankId 用于网络版)等。Misslie 类 持有一个 TankClient 类(大管家)的引用 tc,TankClient 类要执行发射炮弹操作时调用 Missile 类中的方法。Misslie 类中的主要方法如下: (1)draw()方法:负责画出子弹的所有活动; (2)move()方法:先判断方向再移动,并给它一定的移动速度; (3)getRect()方法:负责取得子弹的外切方形,为碰撞检测做准备; (4)hitTan()方法:检测子弹是

37、否撞到坦克,若撞到返回 true,否则返回 false; (5)hitTanks()方法:检测是否撞到一系列坦克中的一个; (6)hitWall()方法:检测子弹和墙是否相撞。 3.3.53.3.5 ExplodeExplode 类基本功能分析类基本功能分析 11 Explode(爆炸)类也是一个只封装自己的变量和方法的外部包装类,没有 main 方法, 供 TankClient 主类需要时调用它的 draw()方法,当子弹击中坦克时需要产生爆炸。使 用 11 张图片重叠现实爆炸效果如 3.4 图所示: 图 3.4 爆炸图 3.3.63.3.6 服务器类基本功能分析服务器类基本功能分析 Tan

38、kServer(服务器)类主要负责在网络对战游戏时维护各个在线玩家的基本信息, 并动态的维护玩家列表。联机模式下类关系图如图 3.5 所示: TankServer 类 TankClient 1 类类 TankClient 2 类类 New 参数 1New 参数 2 调用 Missile 类 调用 Explode 类产程爆炸 判断胜负 Tank 类(我方)Tank 类(敌方) 打中 打击 3.5 联机模式类关联图 3.3.73.3.7 信息传送类基本功能分析信息传送类基本功能分析 信息传送类就是用来封装客户端和服务器端的交互信息。将网络中传递的众多信息封 装成可序列化的类,将会使程序有很好的可扩

39、展性。 3.43.4 本章小结本章小结 本章首先对整个游戏设计进行了可行性分析,其次对游戏要达到怎么样的需求,要实 现哪些功能做以及实现这些功能设计到的类,最后再详细的介绍了系统要实现这些功能所 涉及到的各个类之间的关系。 12 第第 4 4 章章 系统实现系统实现 4.14.1 游戏主窗体实现游戏主窗体实现 TankClient 类负责画出游戏主窗体,它是整个游戏运行和所有活动的场所。登陆主窗 口后,主界面上包括两个下拉菜单条, “游戏”和“帮助” ,玩家点击“游戏”菜单条下可 以选择游戏模式;“帮助”下拉菜单条中有游戏说明和游戏操作,方便用户了解游戏规则。 为了游戏不至于太单调,还配置了背

40、景音乐。除此之外,本设计优点是 TankClient 类还封 装了一个 update()方法,使用双缓冲消除闪烁现象。因为刷新重画频率太快,paint() 方法还没有完成,会造成逐条显示,影响系统的运行,所以解决办法是创建一个虚拟屏幕, 在屏幕的后面,在要画的将所有的东西画在虚拟屏幕上,也就是内存上,画完之后一次性 将虚拟屏幕上的内容贴到屏幕上,这样就消除了闪烁现象,用户的眼睛便感觉不到闪烁了。 TankClient 类是整个系统的“大管家” ,当要执行某动作时, “大管家”只需要调用各个类 中封装好的方法,让被调用的类自己去执行它自己的方法,这更体现了面向对象的思想。 游戏主窗体界面如图 4

41、.1 所示: 图 4.1 游戏主窗口预览效果图 实现虚拟屏幕消除闪烁的关键代码如下: public void update(Graphics g) /利用双缓冲消除闪烁的效果 if(offScreenImage = null) offScreenImage = this.createImage(GAME_WIDTH, GAME_HEIGHT); 13 Graphics gOffScreen = offScreenImage.getGraphics(); Color c = gOffScreen.getColor(); gOffScreen.setColor(Color.BLACK); gOff

42、Screen.fillRect(0, 0, GAME_WIDTH, GAME_HEIGHT); gOffScreen.setColor(c); paint(gOffScreen); g.drawImage(offScreenImage,0,0,null); 4.24.2 单机游戏的实现单机游戏的实现 游戏运行主界面,在下拉菜单中选择单机游戏进入单人模式,通过键盘控制坦克运动, 相互对战,当被打中时产生一个爆炸,屏幕左上方显示游戏信息:子弹数目(出界就死亡) 、 爆炸数目、敌方坦克数目、玩家坦克生命值(当玩家坦克被击中 4 次时,游戏结束) 、玩家 得分。其效果图如图 4.2 所示: 图 4.2

43、 单机游戏模式主界面图 玩家坦克,上方红色 小方框为生命值,当 被击中一次时生命值 减 20 血块:用于添加生命 值 墙 14 当玩家分数达到 60 分时可以使用超级炮弹,可同时向八个方向发射炮弹,效果如图 4.3 所示: 图 4.3 发射超级炮弹 当玩家被炮弹击中达到 4 次,而又没有及时吃到增长生命的血块时,提示游戏结束, 可以选择重新开始或退出该模式,效果如图 4.4 所示: 图 4.4 玩家死亡时游戏界面 15 4.34.3 联机功能实现联机功能实现 在本系统的实现过程中,在支持网络对战的服务器类的定义中需要使用 ServerSocket 类来响应多个客户端连接请求,server 服务

44、器上需要两大协议,一个是 TCP,用来接收客 户端;另一个是 UDP,用来转发游戏的数据。Server 类系统模型图如图 4.5 所示: server TCP Listener UDP Listener 接收客户端连接转发游戏数据 图 4.5 Server 类系统简单模型图 网络游戏模式下,游戏主要在客户端运行,启动客户端时玩家首先要填写信息之后才 能加入到游戏中去,先启动服务器,红色小方块表示确定服务器已连接。如图 4.6 所示: 图 4.6 启动服务器 进入网络模式,输入信息:IP、Port、选择自己的角色【P(警)B(匪) 】 ,是玩家加 入游戏的必填栏。游戏主界面图如图 4.7 所示:

45、 图 4.7 网络版游戏玩家信息栏 填写好玩家信息,登陆后游戏主界面,进入游戏后,通过玩家坦克上方的 ID 号(单双 数)和颜色(蓝红)来区分敌友。游戏界面左上角显示游戏的基本信息,包括玩家姓名, 对战坦克数等,如图 4.8 所示: 16 图 4.8 登陆网络模式主界面 多个玩家加入后,开始对战,在此模式中没有吃血块,添加生命值这一功能,所以一 旦中弹就死亡被淘汰出局,各个玩家游戏界面上都能显示实时动态,效果如图 4.9 所示: 图 4.9 网络版游戏对战实时显示图 17 网络模式设计主要代码如下: TankServer(服务器)类代码片段如下: public class TankServer

46、 public static final int TCP_PORT = 8888; /TCP 的监听端口 public static final int UDP_PORT = 6666; /UDP 的监听端口 public static int ID = 100; List clients = new ArrayList(); public void strat() /启动服务器 new Thread(new UDPThread().start(); ServerSocket ss = null; Socket s = null; try ss = new ServerSocket(TCP_P

47、ORT); catch (IOException e) e.printStackTrace(); while(true) /链接 TCP try s = ss.accept(); DataInputStream dis = new DataInputStream(s.getInputStream(); int udpPort = dis.readInt(); String IP = s.getInetAddress().getHostAddress(); Client c = new Client(IP,udpPort); DataOutputStream dos = new DataOutp

48、utStream(s.getOutputStream(); dos.writeInt(ID+); clients.add(c); System.out.println(“A Client Connected!Addr_“+IP+“:“+s.getPort()+“_UDPPort:“+udpPort); catch(IOException e) e.printStackTrace(); private class UDPThread implements Runnable /建立一个 UDP 的接受和转发 线程 18 byte buf = new byte1024; public void ru

49、n() DatagramSocket ds = null; try ds = new DatagramSocket(UDP_PORT); System.out.println(“UDPThread started at PORT:“+UDP_PORT); while(ds != null) DatagramPacket dp = new DatagramPacket(buf,buf.length); ds.receive(dp); /接受数据包 for(int i=0;iclients.size();i+) /分别转发给其他客户端 Client c = clients.get(i); dp.setSocketAddress(new InetSocketAddress(c.IP, c.udpPort);/得到将要转发 的客户端的 IP 地址和端口ds.send(dp

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

当前位置:首页 > 其他


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