基于J2SE的网络版坦克大战游戏设计 毕业设计论文.doc

上传人:小小飞 文档编号:3920354 上传时间:2019-10-10 格式:DOC 页数:32 大小:1.20MB
返回 下载 相关 举报
基于J2SE的网络版坦克大战游戏设计 毕业设计论文.doc_第1页
第1页 / 共32页
基于J2SE的网络版坦克大战游戏设计 毕业设计论文.doc_第2页
第2页 / 共32页
基于J2SE的网络版坦克大战游戏设计 毕业设计论文.doc_第3页
第3页 / 共32页
基于J2SE的网络版坦克大战游戏设计 毕业设计论文.doc_第4页
第4页 / 共32页
基于J2SE的网络版坦克大战游戏设计 毕业设计论文.doc_第5页
第5页 / 共32页
点击查看更多>>
资源描述

《基于J2SE的网络版坦克大战游戏设计 毕业设计论文.doc》由会员分享,可在线阅读,更多相关《基于J2SE的网络版坦克大战游戏设计 毕业设计论文.doc(32页珍藏版)》请在三一文库上搜索。

1、云南工商学院云南工商学院 学生毕业作业(设计)学生毕业作业(设计) 基于 J2SE 的网络版坦克大战游戏设计 设计小组 二级学院 软件学院 专 业 软件技术 年 级 2009 级 班 级 2 班 学 号 09010101193 姓 名 指导教师 职 称 讲师 2011 年 11 月 2 日 I 摘要摘要 摘要摘要 :J2SE (Java 2 Standard Edition)就是Java2的标准版,主要用于桌面应用软件的编程, 是伴随着计算机技术的飞速发展而诞生的一项新的开发技术。随着个人电脑的日益普及、 Java功能在个人电脑上的实现,Java应用程序产生的单机增值服务逐渐体现出其影响力,对

2、 丰富人们的生活内容、愉悦身心、开发智力等起着不可忽视的作用。该论文通过总结和分析 JAVA游戏的开发流程和代码框架的设计,开发了一款基于J2SE架构的游戏坦克大战。 本设计采用面向对象的设计模式,对游戏中的所有物体赋予对象的概念和属性。运行程序后 允许用户选择执行选项菜单。在开始游戏后,启动服务器和客户端,对背景的所有物体进行 绘图。在主程序运行的线程中,画面刷新将以一定的频率采用双缓冲技术对屏幕重绘,实时 反映整个游戏的进行状态。用户控制的坦克运行在主线程中,随屏幕刷新的频率而移动。坦 克将在游戏开始时进行初始化,然后将坦克绘制在地图的上层。本设计主要实现的功能是让 坦克能向八个方向移动,

3、并且打出炮弹,子弹击中敌人坦克,子弹和敌人坦克同时消失,产 生爆炸,CPU坦克能智能的移动并且打出炮弹。能够支持网络对战和单机对战两种模式。 Java良好的跨平台特性在软件的开发中显示出了巨大的威力, “一次编写,随处运行” , java系统可以运行在不同的操作系统和硬件上。随着linux的持续增长以及MacOSX完全支持 java技术,跨平台的特性变得越来越有分量。 由于免费、跨平台、java语言本身技术先进,在高校中,java已经成为许多学科研究、课 程和计算的首选语言,用java做上机作业,一般都是鼓励的。据我所知,北大、清华许多院 系的研究生入学考试都可以用java语言答题。实际上,用

4、java来完成这些工作,大多数情况 下要比用C或其他语言简洁得多,你可以把注意力集中在算法等核心部分,从而获得更高分 数。 关键词 面向对象 坦克大战 游戏 J2SE Socket II 目录目录 第 1 章 前言.1 1.1 游戏设计的需求分析1 1.1.1 国内外电子网络游戏的现状1 1.1.2 本系统的现实意义.1 1.1.3 本系统和其他开发游戏区别1 1.2 开发技术概述.2 1.2.1 JAVA、C#语言、C/C+主流编程语言比较.2 1.3 本章小结3 第 2 章 相关技术理论.4 2.1 系统运行环境.4 2.1.1 系统运行的软件环境.4 2.1.2 系统运行的硬件环境.4

5、2.2 相关理论4 2.2.1 关于 ECLIPSE的介绍.4 2.2.2 J2SE 框架.5 2.2.3 联机通信机制.6 2.2.4 JAVA图形编程.6 2.3 本章小结7 第 3 章 系统设计8 3.1 系统可行性分析8 3.1.1 技术可行性.8 3.1.2 经济可行性.8 3.1.3 操作可行性.8 3.2 系统需求分析.8 3.2.1 在人机对战模式下实现的功能8 3.2.2 在网络对战模式下实现的功能8 3.3 系统功能设计.9 3.3.1 坦克大战总体功能设计.9 3.3.2 GAMEWINDOW类基本功能分析.10 3.3.3 TANKCLIENT类基本功能分析11 3.3

6、.4 BALL类基本功能分析.11 3.3.5 EXPLODE类基本功能分析11 3.3.6 服务器类基本功能分析12 3.3.7 信息传送类基本功能分析12 III 3.4 本章小结12 第 4 章 系统实现13 4.1 游戏主窗体实现13 4.2 单机游戏的实现14 4.3 联机功能实现.16 4.4 本章小结18 第 5 章 总结与展望19 5.1 总结19 5.2 设计中的不足之处.19 5.3 展望19 致 谢20 参考文献21 附录 1.22 IV 1 第 1 章 前言 1.1 游戏设计的需求分析 1.1.1 国内外电子网络游戏的现状 游戏本身就是一种娱乐方式。自有人类文明的时候,

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

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

9、能培训成本的优势。 1.1.2 本系统的现实意义 坦克大战 (Battle City)是 1985 年日本南梦宫 Namco 游戏公司在任天堂 FC(FamilyComputer)平台 上,推出的一款多方位平面射击游戏。游戏以坦克战斗及保卫基地为主题。大部分 80 后的青年人曾经都 玩过这款 FC 平台上的经典游戏,FC 平台上的坦克大战只能两个人协同作战。本系统运用 Java 这个跨平 台的编程语言,在 PC 上重新实现这一款经典游戏,探究曾经这一款经典游戏的大概设计与实现,并且加 入坦克八个方向的行走,多人的局域网对战模式,使游戏的玩法更丰富。 1.1.3 本系统和其他开发游戏区别 本系统

10、的坦克大战是基于 Java 语言设计开发的,具有高超的人工智能,精美的图形处理,支持单机运 行和网络对战的坦克射击游戏。比之前网络上实现的游戏更加方便,快捷,智能。游戏基本玩法较简单, 游戏可一人电脑作战,每次电脑方有坦克 10 辆,游 2 戏以消灭全部敌方坦克过关为目的。在这过程中,坦克有机会得到血块来添加生命值,从而变得更加强大, 也能利用各种有利地形来阻击敌人。游戏设置了墙面,电脑方坦克不能穿越墙面射击玩家坦克,而玩家坦 克可随意穿越墙面打击电脑方坦克,这一游戏特权。还有给玩家坦克设置超级炮弹,当电脑方坦克数量过 多时,玩家坦克可以发射超级炮弹打击敌方。主要新增的功能简单罗列如下: 1、

11、屏幕左上方显示游戏状态,当玩家方坦克数全为零时则游戏结束; 2、一般坦克只可在空地中或草丛中行走,不可通过墙面等障碍物; 3、游戏中打坏敌方坦克后,可能会在随机位置随机出现血块奖励,坦克经过该位置可获得相应加生命 值奖励; 4、玩家坦克的游戏资格和电脑坦克不同。 1.2 开发技术概述 1.2.1 Java、C#语言、C/C+主流编程语言比较 a)简单地说,它们不是同一种语言,语法有差别,编程时具体用到的类库或者函数库也不一样。 虽然它们不是同一种语言,不过它们却也有所联系。广泛地说,C 可以看作其他三种语言的源语 言,因为其他三种语言几乎都是从 C 而来的,无论从数据类型还是控制语句看,其他三

12、种语言都 有从 C 得来的迹象。 b)其中 C则一般看作是对 C 语言的扩展。因为 C 语言没有面向对象的语法结构,而当时业界又 迫切需要面向对象的编程特性,所以贝尔实验室的开发者就为 C 添加了面向对象的结构。现在 C已经不只是 C 的扩展了,它已经完全可以被看作一种新的编程语言。虽然 C 的特性以及库 函数仍然被 C支持,不过 C拥有自己的独立的类库体系,功能相当强大。 Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的 Java 程序设计语言和 Java 平台(即 JavaSE, JavaEE, Ja

13、vaME)的总称。Java 技 术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人 PC、数据中心、游戏控制 台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。在全球云计算 和移动互联网的产业环境下,Java 更具备了显著优势和广阔前景。 虽然它的底层(运行时库)是用 C 语言开发的,可是并不依赖于 C。因为 Java 的运行是在运行时 库的支持下进行的,所以运行效率比起可以更接近底层的 CC来说效率会有所影响,不过 Java 的类库采用很好的设计理念设计,非常好用,也非常实用,已经成为业界的一种标准开发语 言。它的跨平台的特性尤其让很多开发者欢迎,你只需要开

14、发一次就能在所有安装了 Java 运行时 库的系统上运行。Java 发展了十几年了,可以应用领域非常之广泛,Web 开发有 JSP,J2EE,桌 面领域现在有 JavaFX。 3 C是微软开发的一种编程语言,语法类似 Java,几乎就是从 Java 的翻版。运行原理和 Java 也类 似,也是通过运行时库的支持运行。不过支持的平台还很有限。JAVA 几乎被所有平台支持,而 C目前只被 Windows 和 Linux 支持,Windows 下的支持当然是由微软自己开发的,而 Linux 下 的支持则有 MONO 支持。实际上,MONO 也是把 C应用转化为 JAVA 应用而已,所以本质上, C仍

15、然只是被微软自己的操作系统支持。应用平台受到限制,是它最大的缺点。 CC的优点在于与底层比较接近,可以控制的粒度更加精细,是开发系统级应用的最佳选择。 关于缺点,我想正是源于其优点,因为它们能控制的编程元素粒度精细,所以编程比较困难,烦 琐,容易出错。 c)Java 和 C都比较高级,可以看作高级语言的高级语言,优点是开发容易,但运行效率不如更为 底层的 CC。 具体选择使用的时候,可以根据实际的项目需要选择。运行效率要求高的,底层控制要求高的用 CC,否则可以选择 Java 或 C;跨平台的要求高的可以用 Java。 关于跨平台,CC也是很好的语言,因为所有平台都支持,不同的是,不同平台支持

16、的实现 不同,类库不同,要编写跨平台的程序,需要选择跨平台的类库,如标准类库,如果标准类库的 支持不够也只需要附加编写一个跨平台的支持类库。 1.3 本章小结 本章主要介绍了网络游戏在国内外发展的现状。本系统主要的现实意义,与其之前版本的区别和扩展 的一些功能。对 Java、C#、C/C+几种主流编程语言比较,阐述了使用 Java 语言编程的原因。 4 第 2 章 相关技术理论 2.1 系统运行环境 2.1.1 系统运行的软件环境 (1)网络服务器操作系统:Windows XP; (2)开发工具:eclipse3.6.2; (3)运行环境:J2SDK 1.6; (4)编程语言:Java 语言;

17、 2.1.2 系统运行的硬件环境 (1)CPU:Intel 或者兼容微处理器,奔腾 166MHz 及其以上; (2)内存:最低 32MB,可以运行图形界面的 Java Application;最低 48MB,可以运行 Java Applet; 内存不足,将会导致系统(尤其是服务器)的性能大幅下降; (3)硬盘:242 MB 到 80 GB 及其以上; (4)图形显示卡:无要求; (5)网卡:普通网卡,3Com OfficeConnect 10/100 兆位网卡; 2.2 相关理论 2.2.1 关于 Eclipse 的介绍 Eclipse 是著名的跨平台的自由集成开发环境(IDE)。最初主要用来

18、 Java 语言开发,目前亦有人通过插 件使其作为 C+、Python、PHP 等其他语言的开发工具。 Eclipse 的本身只是一个框架平台,但是众多插件的支持,使得 Eclipse 拥有较佳的灵活性。许多软件开发 商以 Eclipse 为框架开发自己的 IDE。 Eclipse 最初是由 IBM 公司开发的替代商业软件 Visual Age for Java 的下一代 IDE 开发环境,2001 年 11 月 贡献给开源社区,现在它由非营利软件供应商联盟 Eclipse 基金会(Eclipse Foundation)管理。 2003 年, Eclipse 3.0 选择 OSGi 服务平台规

19、范为运行时架构。 2007 年 6 月,稳定版 3.3 发布;2008 年 6 月发布 代号为 Ganymede 的 3.4 版;2009 年 6 月发布代号为 Galileo 的 3.5 版;2010 年 6 月发布代号为 Helios 的 3.6 版 Eclipse 的基础是富客户机平台(Rich Client Platform,即 RCP)。RCP 包括下列组件: 核心平台(启动 Eclipse,运行插件) OSGi(标准集束框架) SWT(可移植构件工具包) 5 JFace(文件缓冲,文本处理,文本编辑器) Eclipse 工作台(即 Workbench,包含视图(views) 、编辑

20、器(editors) 、视角(perspectives) 、和 向导(wizards) ) Eclipse 采用的技术是 IBM 公司开发的(SWT),这是一种基于 Java 的窗口组件,类似 Java 本身提供的 AWT 和 Swing 窗口组件;不过 IBM 声称 SWT 比其他 Java 窗口组件更有效率。Eclipse 的用户界面还使用了 GUI 中间层 JFace,从而简化了基于 SWT 的应用程序的构建。 Eclipse 的插件机制是轻型软件组件化架构。在富客户机平台上,Eclipse 使用插件来提供所有的附加功能, 例如支持 Java 以外的其他语言。已有的分离的插件已经能够支持

21、 C/C+(CDT)、 PHP、Perl、Ruby,Python、telnet 和数据库开发。插件架构能够支持将任意的扩展加入到现有环境中, 例如配置管理,而决不仅仅限于支持各种编程语言。 Eclipse 的设计思想是:一切皆插件。Eclipse 核心很小,其它所有功能都以插件的形式附加于 Eclipse 核心 之上。Eclipse 基本内核包括:图形 API(SWT/Jface),Java 开发环境插件(JDT),插件开发环境 (PDE)等。 2.2.2 J2SE 框架 Java2 平台包括:标准版(J2SE)、企业版(J2EE)和微缩版(J2ME)三个版本。J2SE,J2ME 和 J2EE

22、, 这也就是 SunONE(Open NetEnvironment)体系。J2SE 就是 Java2 的标准版,主要用于桌面应用软件的编程; J2ME 主要应用于嵌入式系统开发,如手机和 PDA 的编程;J2EE 是 Java2 的企业版,主要用于分布式的网 络程序的开发,如电子商务网站和 ERP 系统。 Standard Edition(标准版) J2SE 包含那些构成 Java 语言核心的类。比如:数据库连接、接口定义、输 入/输出、网络编程 Enterprise Edition(企业版) J2EE 包含 J2SE 中的类,并且还包含用于开发企业级应用的类。比如: EJB、servlet、

23、JSP、XML、事务控制 Micro Edition(微缩版) J2ME 包含 J2SE 中一部分类,用于消费类电子产品的软件开发。比如:呼机、 智能卡、手机、PDA、机顶盒 简单讲就是: J2SE: Java 2 Standard edition (Java 2 标准版) J2EE: Java 2 enterprise edition( Java 2 企业版) J2ME: Java 2 micro edition (Java 2 微缩版) 他们的范围是:J2SE 包含于 J2EE 中,J2ME 包含了 J2SE 的核心类,但新添加了一些专有类 应用场合,API 的覆盖范围各不相同。 笼统的讲

24、,可以这样理解:J2SE 是基础;压缩一点,再增加一些 CLDC 等方面的特性就是 J2ME;扩 充一点,再增加一些 EJB 等企业应用方面的特性就是 J2EE。 补充一点 J2EE 更恰当的说,应该是 JAVA2 企业开发的技术规范,不仅仅是比标准版多了一些类。 J2EE 又包括许多组件,如 Jsp, Servlet, JavaBean, EJB, JDBC, JavaMail 等。 6 J2SE 商业版本,标准版本 (Java2 Standard Edition) 定位在客户端,主要用于桌面应用软件的编程。 J2SE 包含那些构成 Java 语言核心的类。 比如:数据库连接、接口定义、输入

25、/输出、网络编程 J2SE 是 J2EE 的基础,他大量的 JDK 代码库是每个要学习 J2EE 的编程人员必须掌握的。 从 JDK 5.0 开始,不再叫 J2SE,改名为 Java SE 了,因为那个 2 已经失去了其应该有的意义。 2.2.3 联机通信机制 网络编程,简单地理解就是两台计算机相互通信。其基本模型就是客户机/服务器模型,也就是通信双 方中的一方必须提供一个固定的位置,而另一方只需要知道这个固定的位置,并且建立两者之间的联系, 然后完成数据交换。这里提供固定位置的一方通常称为服务器,而建立联系的一方称为客户端。 Socket(中文意思为插座) ,基于客户机/服务器的 Socke

26、t 通信模式如图 2.1 所示: 创建 Socket 类的对象 指定服务器端公认的 Socket 地址和端 口 在 Socket 上监听客户端的链接请求 接收客户端的请求信息 解释并处理请求信息 向服务器发出请求 向服务器端发送链接请求 创建 Socket 类对象 客户端 将处理结果返回给客户端接收服务结果 服务请求 服务响应 服务器端 图 2.1 基于客户机/服务器的 Soctet 通信模式图 当客户程序需要与服务器程序通讯的时候,客户程序在客户机创建一个 socket 对象,Socket 类有几个 构造函数。两个常用的构造函数是 Socket(InetAddress addr, int p

27、ort) 和 Socket(String host, int port),两个构 造函数都创建了一个基于 Socket 的连接服务器端流套接字的流套接字。两个函数都通过参数 port 获得服 务器的端口号。假设已经建立连接了,网络 API 将在客户端基于 Socket 的流套接字中捆绑客户程序的 IP 地址和任意一个端口号,否则两个函数都会抛出一个 IOException 对象。如果创建了一个 Socket 对象,那 么它可能通过调用 Socket 的 getInputStream()方法从服务程序获得输入流读传送来的信息,也可能通过调 用 Socket 的 getOutputStream()

28、方法获得输出流来发送消息。在读写活动完成之后,客户程序调用 close() 方法关闭流和流套接字。 2.2.4 Java 图形编程 Java 中的 Graphics 类是用于绘图和显示格式化 7 文本的工具类。在 Java 程序中绘图必须在一个窗口(容器)中进行,绘图窗体经常被设计为一个组件容器。 一般首先在一个面板中进行绘制,然后再将这个面板添加到显示窗口中去。 Graphics 类是在 Java.awt 包中申明,显示格式化文本和绘图时通过调用 Graphics 类的 draw()方法实 现的,例如 drawString(String),drawLine()等。绘图采用的坐标系是原点在左上

29、角,纵轴向下以像素为单位 的坐标系。 2.3 本章小结 在本章节中首先介绍了该系统的运行环境,值的注意的是软件环境的配置,因为整个系统都是在虚拟 环境下运行的,所以虚拟环境对于整个设计的调试和运行至关重要;其次对开发工具 Eclipse3.6.2 的简单 介绍,利用 eclipse 开发项目,是可以提高项目的开发效率。还有是对一些技术理论,J2SE 框架,Java 语言, 系统运行所支持的操作系统,联机通信机制及 Java 图形编程等理论做了简单的介绍,为本系统后期实现图 形化界面和网络通信做了理论支持。 第 3 章 系统设计 8 3.1 系统可行性分析 3.1.1 技术可行性 Java语言自

30、Sun公司于1995年5月正式发布以来,经历了出生、成长、成熟壮大的几个阶段,逐渐发展 成为IT领域里的主流计算模式,使用Java开发工具方便,容易实现。Java对开发网络产品有它自己独特的 优势,网络游戏也是其开发产物之一。本系统开发过程是利用Java编程语言和eclipse集成开发环境配合使 用来实现的,它是基于TCP/UDP协议和Socket编程技术,建立以C/S为结构模式的娱乐性游戏平台。 3.1.2 经济可行性 本设计的开发是基于JDK1.6和eclipse3.6的,因为它们都是免费而且开源的软件,所以实现本设计的 成本就有所降低。随着计算机、网络通讯和信息技术的迅猛发展以及人类精神

31、生活品质的提高,国际、 国内的各种各样的大型综合游戏网站如雨后春笋般的发展起来。一款好的游戏带来的经济效益可以说是 不可估量的,比如现在网上最流行的魔兽世界、征途等大型网络版游戏。本游戏既可单机运行,也可以 是联机版多人同时在线对战。 3.1.3 操作可行性 本设计是一个网络版的游戏平台,只是模拟了现在社会上的一些网络游戏的部分功能,所以操作简 易,玩家不需要了解内部流程,只是和一般其他的网络游戏一样的操作即可开始游戏。相对于开发者而 言,整个系统形成主要由JDK5.0虚拟环境和eclipse3.2共同完成,无需更多复杂的工具和服务器支持。 3.2 系统需求分析 3.2.1 在人机对战模式下实

32、现的功能 在单机模式下实现以下基本功能: 1) 坦克可以 8 个方向的行走,Z 键打出子弹,S 键超级炮弹,A 键添加电脑坦克,F2 复活。 2) 智能的敌方坦克,随机移动,随机打出子弹。 3) 加入四面墙,子弹和敌方坦克不能穿墙。 4) 敌方坦克之间不重叠。 5) 子弹与坦克的碰撞检测。 6) 加入主战坦克的血条显示,每颗炮弹减 10 点血,总共 100 点血,电脑坦克一颗子弹就死亡。 7) 使用配置文件可以配置敌方坦克出现的数量。 8) 菜单栏选项,可以选择单机模式或网络模式,可以查看帮助信息,关于信息。 9) 加入坦克、子弹、墙的图片,使界面看上去更美观。 3.2.2 在网络对战模式下实

33、现的功能 在人机对战模式中实现功能基础上,增加以下功能实现网络对战功能: 1)创建一个游戏的服务器端程序,负责分配客户端ID号和转发每一个客户端的信息到其它客户端, 使用TCP协议接收客户端的连接,使用UDP协议传送坦克的各类数据 2)客户端需要配置服务器的IP地址,服务器TCP端口,服务器UDP端口,本机的UDP端口 9 3)客户端使用TCP连接服务器,服务器分配唯一的ID号给客户端 4)使用UDP协议向服务器发送本机坦克数据 5)启动服务器之后,客户端坦克加入到服务器中,分红方和蓝方势力互相对战 3.3 系统功能设计 3.3.1 坦克大战总体功能设计 坦克大战游戏主要实现玩家参加游戏的整个

34、流程,用户登陆游戏客户端选择游戏模式,可分为单机 模式和网络对战模式,选择单机模式可以直接进入游戏状态;选择网络对战模式,在启动服务器后,玩 家需要设置网络参数,服务器的IP地址、服务器TCP端口、服务器UDP端口、本机的UDP端口,本机的 UDP端口不能与其它客户端相同,成功后服务器会分配指定的ID号给客户端(只有成功连接上服务器的 玩家才能参与网络对战游戏功能) ;连接上的玩家就可以通过控制键盘操作,加入对战游戏。整个网络版 坦克大战游戏流程图如图3.1所示: 初 始 化 游戏模式 对 战 网络 A 键产生敌方坦克玩家坦克 玩 家 一 玩 家 二 玩 家 一 玩 家 二 红方坦克蓝方坦克

35、结 束 填写网络配置信息 左上角显示坦克 血量、击毁坦克 的数量、ID 号 显示本机坦克死亡次数 F2 满血原地复活 。 。 。 。 。 。 被击毁 击毁被击毁 F2 满血原地复活 服务器分配 势力 图 3.1 网络坦克大战游戏流程 10 3.3.2 GameWindow 类基本功能分析 GameWindow 类是整个系统的核心部分,它承担整个系统的所有可实现功能的调度工作。 是整个游 戏运行的场所。GameWindow 类设计流程图如图 3.2 所示: 开始 初始化坦克 对战双方玩家坦克由键盘控制移动 发射炮弹 碰撞检测(坦克和子弹)不处理 同角色坦克 产生爆炸 不同角 色坦克 判断胜负 结

36、束 图 3.2 GameWindow 类设计流程 GameWindow 类是主类,通过调用其他类中封装的方法来使整个系统运行起来,下面显示 GameWindow 与其它各类之间的关系如图 3.3 所示: TankClient 类(主类) TankClient 类 (我方) CPUTank 类 (敌方) New 参数 1New 参数 2 调用 Ball 类 打中 调用 Explode 类产程爆炸 判断胜负 键盘 控制 移动 智能 移动 打击 图 3.3 游戏系统类关联图 11 3.3.3 TankClient 类基本功能分析 TankClient(坦克)类中,封装了一些变量属性,包括坦克自己的大

37、小(WIDTH,HRIGHT) ,运动速度 (SPRRD_X:在 x 轴方向的速度;SPEED_Y:在 Y 轴方向的速度)、生命值控制(life) 、坦克编号(ID) 、坦 克名(name)、方向控制(dir)、生死控制(live)、好坏控制(good)的变量等。TankClient 类中没有 main 函 数,不是主类,它当中只封装一些变量属性和静态方法,被 TankClient 类调用来实现坦克的一系列动作。 TankClient 类中的主要方法罗列如下: (1)public Rectangle getRectange() return new Rectangle(TankClientX,

38、 TankClientY, images0.getWIDth(null), images0.getWIDth(null); Rectangle 类是碰撞检测的辅助类,通过得到坦克和子弹的矩形,检测两个矩形是否碰撞(相交) ; (2)draw()方法:负责将自己坦克所有的活动在屏幕上画出来; (3)move()方法:主要负责控制坦克的移动,包括 8 个方向(左,左上,上,右上,右,右下, 下,左下)的控制及坦克对于边界的处理 (4)keyPreesed()方法:设定使用键盘的“” “” “” “” “A” “S”F2”键控制坦克移动及发 炮,并且网络对战中向服务器发送消息等操作; (5)keyR

39、eleased ()方法:处理按键抬起事件,抬起“Z”键时,发射炮弹并加入新炮弹,能够逐一 发射每一发炮弹、抬起“S”键可以发射超级炮弹等功能,并向服务器发送消息; (6)locateDireaction()方法:判断坦克及炮筒方向,并且换方向时候向服务器发送一条消息 (7)fire() 方法:处理发送子弹的方法,并向服务器发送添加一颗子弹的消息; (8)collIDesWithWall()方法:主要负责处理坦克撞墙事件; 3.3.4 Ball 类基本功能分析 Ball(子弹)类和 Tank 类一样,只封装一些变量属性和静态方法,主要变量包括:子弹自己的大小 (WIDTH,HRIGHT) ,运

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

41、返回 true,否则返回 false; (5)hitTanks()方法:检测是否撞到一系列坦克中的一个; (6)hitWall()方法:检测子弹和墙是否相撞。 3.3.5 Explode 类基本功能分析 Explode(爆炸)类也是一个只封装自己的变量和方法的外部包装类,没有 main 方法,供 TankClient 主 类需要时调用它的 draw()方法,当子弹击中坦克时需要产生爆炸。使用 11 张图片重叠现实爆炸效果如 12 3.4 图所示: 图 3.4 爆炸图 3.3.6 服务器类基本功能分析 TankServer(服务器)类主要负责在网络对战游戏时维护各个在线玩家的基本信息,并动态的维

42、护玩 家列表。联机模式下类关系图如图 3.5 所示: TankServer类 GameWindow 1 类类 GameWindow 2 类类 New 参数 1New 参数 2 调用 Ball 类 调用 Explode 类产程爆炸 判断胜负 TankClient 类 (我方) TankClient 类 (敌方) 打中 打击 3.5 联机模式类关联图 3.3.7 信息传送类基本功能分析 信息传送类就是用来封装客户端和服务器端的交互信息。将网络中传递的众多信息封装成可序列化 的类,将会使程序有很好的可扩展性。 3.4 本章小结 本章首先对整个游戏设计进行了可行性分析,其次对游戏要达到怎么样的需求,要

43、实现哪些功能做 以及实现这些功能设计到的类,最后再详细的介绍了系统要实现这些功能所涉及到的各个类之间的关系。 13 第 4 章 系统实现 4.1 游戏主窗体实现 GameWindow 类负责画出游戏主窗体,它是整个游戏运行和所有活动的场所。登陆主窗口后,主界 面上包括两个下拉菜单条, “游戏”和“帮助” ,玩家点击“游戏”菜单条下可以选择游戏模式;“帮助” 下拉菜单条中有游戏说明和游戏操作,方便用户了解游戏规则。为了游戏不至于太单调,还配置了背景 音乐。除此之外,本设计优点是 GameWindow 类还封装了一个 update()方法,使用双缓冲消除闪烁现象。 因为刷新重画频率太快,paint

44、()方法还没有完成,会造成逐条显示,影响系统的运行,所以解决办法 是创建一个虚拟屏幕,在屏幕的后面,在要画的将所有的东西画在虚拟屏幕上,也就是内存上,画完之 后一次性将虚拟屏幕上的内容贴到屏幕上,这样就消除了闪烁现象,用户的眼睛便感觉不到闪烁了。 GameWindow 类是整个系统的“大管家” ,当要执行某动作时, “大管家”只需要调用各个类中封装好的 方法,让被调用的类自己去执行它自己的方法,这更体现了面向对象的思想。游戏主窗体界面如图 4.1 所示: 图 4.1 游戏主窗口预览效果图 实现虚拟屏幕消除闪烁的关键代码如下: public voID update(Graphics g) if(

45、null=img) img = this.createImage(gameWIDth,gameHeight); 14 Graphics imgGraphics = img.getGraphics(); Color c=g.getColor(); imgGraphics.setColor(Color.black); imgGraphics.fillRect(0, menuHeight, gameWIDth, gameHeight); g.setColor(c); paint(imgGraphics); g.drawImage(img,0,0,null); 4.2 单机游戏的实现 游戏运行主界面,

46、在下拉菜单中选择单机游戏进入单机模式,通过键盘控制坦克运动,相互对战, 当被打中时产生一个爆炸,屏幕左上方显示游戏信息:子弹数目(出界就死亡) 、爆炸数目、CPU 坦克数 目(网络模式下不显示) 、玩家坦克生命值、您击毁的坦克数量、当前 ID(单机模式下不显示) 。其效果 图如图 4.2 所示: 图 4.2 单机游戏模式主界面图 CPU 敌人坦克智能移动、开炮的关键代码如下: public static Random random = new Random();/随机数 static private int step = random.nextInt(12)+3;/坦克移动的步数 /设定移动的

47、方向,移动步数,开炮概率 private voID locateDirection() if(step=0) 玩家坦克,上方红色 小方框为生命值,当 被击中一次时生命值 减 10 墙 15 int randomNumber = random.nextInt(directions.length); direction = directionsrandomNumber; gunbarrelLocateDirection(); step= random.nextInt(12)+3;/随机产生移动的步数,最少为3 if(step=3)/随机开炮 GameWindow.getBalls().add(fi

48、re(); step-; 当玩家在单机模式下按 A 键可以使用超级炮弹,可同时向八个方向发射炮弹,效果如图 4.3 所示: 图 4.3 发射超级炮弹 超级炮弹的关键代码如下: private Direction directions = Direction.values();/ 得到方向数组 / 八个方向开炮 private voID superFire() if (!isLive() /如果坦克是死亡的 return; if (GameWindow.getNc() != null) /如果网络模式已经打开 return; int x = this.TankClientX + this.CLI

49、ENTTANKWIDTH / 2;/ 子弹出现的X坐标 int y = this.TankClientY + this.CLIENTTANKHEIGHT / 2;/ 子弹出现的y坐标 for (int i = 0; i clients = new ArrayList();/ 保存客户端连接信息的列表 public voID start() new Thread(new UDPThread().start();/ 启一个线程监听接收到的UDP数据 ServerSocket ss = null;/ 服务器TCPsocket类 try ss = new ServerSocket(TCP_PORT);/ 服务器占用的端口号 catch (Exception e) while (true) So

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

当前位置:首页 > 其他


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