首页 毕业设计(论文)-基于Java的五人制足球游戏攻防策略的研究与实现

毕业设计(论文)-基于Java的五人制足球游戏攻防策略的研究与实现

举报
开通vip

毕业设计(论文)-基于Java的五人制足球游戏攻防策略的研究与实现毕业设计(论文)-基于Java的五人制足球游戏攻防策略的研究与实现 淮 海 工 学 院 毕业设计(论文)说明书 题 目: 基于JAVA的五人制足球游戏攻防策略 的研究与实现 作 者: 学 号: 系 (院): 专业班级: 计算机科学与技术专业023班 指导者: 评阅者: 2006 年 6 月 连 云 港 毕业设计,论文,中文摘要 基于Java的五人制足球游戏攻防策略的研究与实现 摘 要:本设计是一款基于Java的五人制足球游戏及对其的研究与开发。本课题是一款模拟经营和实时对战混合的足球游戏。它的...

毕业设计(论文)-基于Java的五人制足球游戏攻防策略的研究与实现
毕业 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 论文 政研论文下载论文大学下载论文大学下载关于长拳的论文浙大论文封面下载 )-基于Java的五人制足球游戏攻防策略的研究与实现 淮 海 工 学 院 毕业设计(论文)说明书 题 目: 基于JAVA的五人制足球游戏攻防策略 的研究与实现 作 者: 学 号: 系 (院): 专业班级: 计算机科学与技术专业023班 指导者: 评阅者: 2006 年 6 月 连 云 港 毕业设计,论文,中文摘要 基于Java的五人制足球游戏攻防策略的研究与实现 摘 要:本设计是一款基于Java的五人制足球游戏及对其的研究与开发。本课题是一款模拟经营和实时对战混合的足球游戏。它的大体设计内容有:游戏引擎的设计,游戏的客户端的设计,游戏的服务端设计,游戏的数据库的设计。游戏引擎是游戏的灵魂,它是控制所有游戏功能的主程序,从计算碰撞、物理系统和物体的相对位置,到接受玩家的输入,以及按正确的音量正确的输出声音等等,整个游戏的引擎可分为如下几个部分:系统、控制台、支持系统和渲染系统。 本文从游戏的背景研究和发展现状开始,详细描述了整个游戏的制作过程。系统设计中划分出了游戏大致的功能模块,包括:图象系统、声音系统、渲染系统、物理系统和人工智能系统。详细设计阶段,将功能模块进行了更深层次的划分,并给出了详细的实现代码,最后对整个设计给出了最终的实现程序。 游戏的亮点在于它加入了仿真系统的设计。游戏中的模式是按照现实的实际情况作为参考,设计了重力和碰撞模块等等其他方面的内容。另一重要方面在于游戏的智能设计,让球员具有学习和信息采集等能力。但是,游戏中仍然存在许多缺点,很多功能都不是很完善。在这一方面的设计仍需要多多加强。 关键词:线程;人工智能;图形系统;物理系统等。 毕业设计,论文,外文摘要 Research and Development of the Football Game by Five Players based on Java Abstract: This design is a football game by five players based on java, and also, the research and the development of the game. This topic is business and real-time combat simulation section of the football game mixed. Its broad design elements: the game engine design, client-game design, game-design services, games database design. Game engine is the soul of the game, which is the main procedures to control all game functions, from the calculation of the collision, physics system and the relative position of objects to accept player input, and by the correct volume exported correct voice, and so on, the entire game engine can be divided into the following components: systems, control and support systems and reduce system. This text starts with the background of the game and the present develop of the game, it describes the particular process of the whole game. In the system design, it divide the module of the function, include: graphic system, sound system, reduce system and artificial intelligence system. In the particular design, divide the module of the function to the demarcation of the deeper level of structure. And give realizes detailed code, finally, give the finished process. The design of the true system is the best design of the game. The mode in the game consults according to the realistic actual circumstance conduct and actions, designed the gravity mold piece and hit mold piece and any others. Another important aspect is the intelligence design of the game is let the players having the ability of studying and collecting information. But, the game still have a lot of weakness, some function is not very perfect. So, the game still need more design. Keywords: Threads; Artificial intelligence; Graphics system; Physics system. 目 录 1 引言 ..................................................................... 1 1(1 课题的研究背景与意义 ............................................. 1 1.1.1 课题的研究背景 ................................................ 1 1.1.2 课题的研究意义 ................................................ 2 1.1.3 课题研究的现状和发展趋势 ....................................... 2 1(2 Java语言的特点及其与游戏的结合 ................................... 3 1.2.1 Java语言的特点 ............................................... 3 1.2.2 Java与网络的结合 ............................................. 4 1(3 关于足球仿真系统 .................................................. 5 1.3.1 引言 ........................................................... 5 1.3.2 多智能体系统 ................................................... 5 1.3.3 机器人足球系统的典型结构 ....................................... 6 1.3.4 结论 ........................................................... 7 1(4 可行性分析 ....................................................... 7 1.4.1 经济可行性 .................................................... 7 1.4.2 技术可行性 .................................................... 8 1.4.3 操作可行性 .................................................... 9 1.4.4 社会可行性 .................................................... 9 1(5 本章节小结 ...................................................... 10 2 需求分析 ................................................................ 11 2(1 系统初步分析 .................................................... 11 2.1.1 用户需求分析 ................................................. 11 2.1.2 系统的功能需求分析 ........................................... 11 2.1.3 系统的可靠性和可用性需求分析 .................................. 13 本系统所要实现的功能 .......................................... 13 2.1.4 2(2 数据流分析 ...................................................... 14 2(3 数据字典 ........................................................ 15 2.4 本章节小结 ......................................................... 15 3 总体设计 ................................................................ 16 3(1 系统开发 ......................................................... 16 3.1.1 系统开发的原则 ............................................... 16 3.1.2 系统设计阶段 ................................................. 16 3.1.3 结构设计阶段 ................................................. 18 3.2 攻防策略的研究 ..................................................... 19 3.2.1 进攻策略研究 .................................................. 19 3.2.2防守策略研究 .................................................. 22 3.3本章节小结 .......................................................... 22 4.详细设计 ................................................................. 23 4.1 图形系统的设计 ..................................................... 23 4.1.1球员和球的图象显示 ............................................ 23 4.1.2 球场图象显示 .................................................. 24 4.2 声音系统的设计 ..................................................... 25 4.2.1 球场的音效输出 ................................................ 25 4.3 渲染系统的设计 ..................................................... 26 4.3.1球场图象裁减变化 .............................................. 26 4.3.2球员动画显示 .................................................. 27 4.4 物理系统的设计 ..................................................... 37 4.4.1 重力系统 ...................................................... 37 4.4.2 碰撞系统 ...................................................... 38 4.5 人工智能系统的设计 ................................................. 39 4.5.1 球员数据库信息采集 ............................................ 39 4.5.2球员学习系统 .................................................. 40 4.5.3环境变量 ...................................................... 44 4.6游戏有待提高之处 .................................................... 44 4.7 本章节小结 ......................................................... 45 5 游戏的设计环境和Java游戏系统特点 ........................................ 46 5.1游戏的开发环境和运行环境 ............................................ 46 5(2 Java游戏系统的特点及本作游戏的特点 ................................ 46 5.2.1 选择Java游戏系统的原因 ...................................... 46 5.2.2 本作游戏的特点介绍 ........................................... 47 5.3 本章节小结 ......................................................... 48 6 用户使用手册 ............................................................. 49 6.1系统功能及用户简介 .................................................. 49 6.1.1系统功能 ...................................................... 49 6.1.2 系统运行环境简介 .............................................. 49 6.2 系统运行与操作指南 ................................................. 49 结 论 ..................................................................... 50 致 谢 ..................................................................... 51 参 考 文 献 ................................................................ 52 淮海工学院二??六届毕业设计,论文, 第1页 共52页 1 引言 游戏,如今俨然已经成为人们生活中不可或缺的元素。游戏可以简单地理解为调节人们生活节奏和缓解人们生活压力的一种手段。现在理解的游戏基本意义都是娱乐性质较浓,要有特定的行为模式,遵循一定规则以达到游戏者目的的行动。游戏的最初目的就是让游戏者(玩家)在游戏中得到放松。游戏一直存在于人类活动中,如今定义的游戏从早期的猜谜游戏,发展到如今的单机RPG游戏,网络游戏等,已经升华为更高级别意义上的娱乐活动,对人们的感官刺激也越发强烈,得到的乐趣也更多。 足球,是当今世界最受瞩目的运动。从出现现在实际意义上的游戏开始,运动类的游戏一直是比较受到广大游戏者的瞩目的。其中的佼佼者便是足球类的游戏,这也是得益于足球运动的流行。伴随着人类足球的越来越受人喜欢,足球游戏的发展也已经越来越受到人们的关注。对于足球游戏的研究,也从层面上的图形完善到达高层次的人工智能研究,涉及到的领域也延伸到机器人的足球游戏研究。 对于一个好的足球游戏而言,重要的是如何让其更贴近于真正的足球运动,让游戏者真正能在游戏中体验到足球运动的乐趣。对于设计者而言,就是要在游戏中设计更多的变量元素以及更多变的算法,使游戏更具真实感。本作中,考虑教多的就是这点,让游戏更能真实地表现出来。 1(1 课题的研究背景与意义 1.1.1 课题的研究背景 世界上最早诞生的游戏类型就是球类游戏,而最早的足球游戏可能要上溯到上个世纪的70年代。由于硬件条件的限制,那时的游戏画面,线条简单,声音单调,在由几个简单线条构成的所谓的球场上,根本看不到球员,只是几根竖条在做着前后左右的机械运动,一个白点,足球,就在这些堆砌的框框中飘来荡去。 当任天堂横空出世的那个年代,足球游戏也确确实实迈出了自己战战兢兢和呀呀学语的第一步。举一个很简单的例子,当时在红白机上有一款五人制足球游戏,名字就叫《足球》,球员一律都是看不清眉眼高低的大头娃娃,足球做得和腿一般高,球员到了场上就不分你我的来回奔跑,且跑动都是千篇一律,丝毫没有战术可言,球速、球员跑动以及足球运动的轨迹都是那么的莫名其妙。在当时那个任天堂一统天下的时代,由于8位机的机能所致,在表现平面的动作、射击类或是构图简单的RPG、SLG类型的游戏会稍稍占优,而在表现大场面并需要表现高智能AI上面,则会显得捉襟见肘,在那个游戏机方兴未艾的时候,我们没有见到一款可以让玩家留有印象的足球游戏,在那个随便一款创意新颖即可以大卖特卖的年代里,这不能不说是一种遗憾。而造成这种情况还有一个更深层次的原因,即当时日本足球的水平位居亚洲中下游,全民上下对足球的认知和理解远不如今,因此对这种现象,我们也就可想而知了。由于在那个时候,电脑对国人来讲,仍然属于一种奢侈品,因此,我们在电脑上所见到的足球游戏就更是凤毛麟角。足球游戏此时并未形成 淮海工学院二??六届毕业设计,论文, 第2页 共52页 体系,犹如散兵游勇。 说来也巧,每当四年一届的世界杯举行的时候,电视游戏主机就会在机能上发生一次质的飞跃。每一次机能的提升,都会给各种游戏类型带来一次从画面到声音的巨大变革,而电视游戏的发展和电脑硬件的发展是紧密结合在一起的,也可称得上是相辅相成和相得益彰。这一时期的时间跨度应该是从94年至98年前后这一段时期,随着硬件性能的提升,已经使3D化已经成为可能,足球游戏在这一时期,也有了突飞猛进的改观。在那个多媒体盛行的年代里,足球游戏依托于硬件的进步,自身也取得了不俗的成绩,在那个群雄并举的时代,造就了像EA、Konami这样的“足球专家”,但与此同时,也有许多游戏厂商退出了足球游戏的制作。虽然这一时期的足球游戏在品质上和趣味性上有了巨大改观,但不能否认,游戏中仍然存在着致命的硬伤,在合理性上也有着一种难以逾越的瓶颈,即在真实性和游戏性的平衡掌握上,就如EA、Konami这样的大牌足球游戏制作公司都在鱼和熊掌间徘徊,其它的游戏公司发行的足球游戏就更可想而知了。与此同时,玩家也不再仅仅满足于精美的画面、浮华的CG和动听的音效,他们真正要求的是一种好玩刺激但又不失真实性的足球游戏的出现,足球的黄金时代就要到来了。 1.1.2 课题的研究意义 当今世界,足球受到越来越多人的喜爱,每四年一次的足球世界杯,几乎成为了全球人民共同的盛会。一个国家的足球水平甚至代表了一个国家的名望。当越来越多人投入到这个足球盛会的时候,也有一部分人在热爱足球的基础上投入到另一个疯狂的事业中,那就是机器人踢足球,要完成的工作是要让自己研究的机器人也能在球场上自如地带球,过人,传球,甚至漂亮绝顶的射门。这就是本课题需要完成的任务,虽然不能真正实现如此多让人心驰神往的功能,但是这样的研究将是未来几年里在机器人研究领域最尖端的研究。 1.1.3 课题研究的现状和发展趋势 机器人足球比赛是一个多智能体系统的典型问题。涉及到的人工智能问题主要有听觉与视觉、状态机、概率机、攻击与避让模式和进化。游戏中的人工智能实际上就是使生成的Bot具有一定的行为,行为的感觉很重要。设计游戏的人工智能时,要自上而下设计。先考虑Bot要什么样子,然后再实现这个样子。很多人喜欢自上而下设计人工智能,先设计复杂的模式与基础结构。例如,也许不同Bot要有不同搜索模式,象游戏者一样在迷宫中散步,但在三维世界中,游戏者可能以为Bot是随机出现的,要来攻击的。因此要考虑游戏者看到的AI生成应该是什么样子,然后在进行设计。 我们的意图是通过提供引人瞩目但又非常困难的挑战,将机器人足球比赛作为促进人工智能和机器人学研究的工具。促进研究的有效途径是制定一个长期目标,而不拘泥与某一特定应用。当这个目标完成时,将产生巨大的社会影响,这就可以称之为重大挑战计划。建造一个会踢足球的机器人本身并不能产生巨大的社会和经济影响,但是这种成功的确会被认为是这个领域的重大成果。我们把这种计划称为划时代的计划。RoboCup既是一个标准问题,也是一个划时代的计划。 现在的游戏制作业已抬起头了,人们的生活要比过去丰富、自由,于是许多人开始寻 淮海工学院二??六届毕业设计,论文, 第3页 共52页 找自己的价值,游戏圈也是如此----有的人从玩游戏的过程中找到了,有的人从做游戏的过程中找到了。网络游戏对程序的跨平台性和安全性有很高的要求,所以Java是最佳的实现语言。 1(2 Java语言的特点及其与游戏的结合 1.2.1 Java语言的特点 Java能够取得如此的成功,是因为它在设计时的目标就定位在要解决当今程序员们所面临的众多问题。Java的基本目标之一就是要提高生产率。生产率来源于许多方面,但是Java希望在语言方面相对于它的前辈有明显的提高,从而为程序员提供更大的便利。 1.系统易于表达、易于理解 被设计用来适应问题的“类”,在表达问题的能力上显得更强。这意味着当你编写代码时,你是在用问题空间的术语,而不是计算机——也就是解空间——的术语,来描述解决 方案 气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载 。可以用更高层的概念来处理问题,并且只用一行代码就可以做更多的事。 易于表达所带来的另一个好处就是易于维护,维护在程序生命周期中所占的成本比例极大。如果程序易于理解,那么他必定易于维护。同时,这也降低了创建和维护文档的费用。 2.类库的巨大影响力 创建程序最快捷的方式就是使用已经编写好的代码:类库。Java的主要目标之一就是要使类库更易于使用。这是通过将类库转型为新的数据类型来实现的,因此,引入类库意味着在语言中添加了新的数据类型。因为Java编译器会照管类库的使用方式——确保正确地初始化和回收垃圾,并保证其他方法被正确地调用,因此,你只需专注于你想让类库做些什么,而不必关心应如何去做。 3.错误处理 在C语言中,错误处理一直是一个声名狼籍的问题,而且经常被忽视——经常只能靠上帝保佑了。如果你在构建一个大型的、复杂的程序,那么没有什么比在程序某处暗藏了一个错误,而你却没有任何能够暗示它在何处的线索更糟糕的事情了。Java异常处理便是一种能够确保错误必须被 报告 软件系统测试报告下载sgs报告如何下载关于路面塌陷情况报告535n,sgs报告怎么下载竣工报告下载 ,而且对此必须有所响应的机制。 4.大型程序设计 许多传统语言在程序大小和复杂度方面都有内置的限制。例如,BASIC可能对某类问题的解决能力非常强,可以快速地创建解决方案,但是如果程序长度超过数页,或者超出该语言正常的题域之外,它就会像“在非常粘稠的液体中游泳”。它没有明确的界线来表示何时你所使用的语言会导致最终的失败,即使有这样的界线,你也会忽视它。你总不能说:“我的BASIC程序太大了,我不得不用C来重写它~”相反,你会试着将几行代码硬塞进去,以便在程序中增加新功能。因此,不知不觉中,你就付出了额外的开销。 Java具备编写大型程序的能力——也就是说,它消除了小型程序和大型程序之间的复杂度界线。在编写“hello,world”风格的小应用程序时,你当然不必使用OOP,但是当你需要用到时,这些功能随手可得。而且,对小型程序和大型程序,编译器都会一视同仁地、积极地找出因bug而产生的错误。 淮海工学院二??六届毕业设计,论文, 第4页 共52页 1.2.2 Java与网络的结合 Java不仅是一种功能强大的、安全的、跨平台的、国际化的编程语言,而且它还在不断地被扩展,以提供更多的 语言功能和类库,能够优雅地处理在传统编程语言中很难解决的问题,例如线程、数据库访问、网络编程和分部式计算。Java是通过applet以及使用Java Web Start来进行客户端编程的。 Applet是只在Web浏览中器运行的小程序,它是作为网页的一部分而自动下载的。当applet被激活时,它便开始执行一个程序,这正是它优雅之处:它提供一种分发软件的方法,一旦用户需要客户端软件时,就自动从服务器把客户端软件分发给用户。用户获取最新版本的客户端软件时不会产生错误,而且也不需要很麻烦的重新安装过程。Java的这种设计方式,使得程序员只需创建单一的程序,而只要一台计算机有浏览器,且浏览器具有内置的Java解释器,那么这个程序就可以自动在这台计算机上运行。由于Java是一种成熟的编程语言,所以在提出对服务器的请求之前和之后,可以在客户端尽可能多地多做些事情。例如,不必跨网络地发送一张请求表单来检查自己是否填写了错误的日期或其他参数,客户端计算机就可以快速地标出错误数据,而不用等待服务器作出标记并给你传回图片。这不仅立即就获得了高速度和快速的响应能力,而且也降低了网络流量和服务器负载,从而不会使整个Internet的速度都慢下来。 Java applet胜过脚本语言程序的优势之一就是,它是以被编译过的形式存在的,因此其源代码对客户端来说是不可见的。另一方面,虽然反编译Java applet并不需要花费多少力气,但是隐藏你的代码通常并不是一个重要的话题。有另外两个因素很重要。如果编译过的applet很大的话,那么就需要额外的时间去下载它。脚本语言程序只是被作为Web页面的一部分文本而集成到了Web页面中。这对Web网站的响应能力来说很重要。另一个因素是非常重要的“学习曲线”问题。如果你是一个Visual BASIC程序员,那么转而学习VBScript可能是最快的解决方案,而且由于它或许能够解决大多数典型的客户/服务器问题,所以你可能很难对学习Java报以公正的态度。如果你已经对脚本语言很有经验了,那么你在考虑使用Java之前,应该先看看JavaScript是否满足你的要求,这样对你会很有好处,因为它们能够更方便地满足你的要求,而且使你更具生产力。 Java引起人们的注意很大程度上始于applet。Java确实是一种通用的编程语言,至少在理论上可以解决各种其他语言能够解决的问题。正像前面指出的那样,可能存在其他更有效的方式去解决客户/服务器问题。当你离开applet的竞技场时,你便步入了通用应用系统的世界,这里的系统都是独立运行的,不需要浏览器,就像其他普通程序一样。在这里,Java的威力不仅在于它的可移植性,还包括它的可编程性。Java已经具备了许多功能,让你创建健壮的程序,而花费的时间比使用Java之前的任何编程语言都更少。 不过,这是好坏参半的事。为Java带来的改进,所付出的代价是降低了执行速度。像任何语言一样,Java也具有不适合解决某类问题的天生的限制。然而,Java是快速进化的语言,而且每当发布一个新版本时,它都会因为能够解决更多的问题而变得越来越具有吸引力。 淮海工学院二??六届毕业设计,论文, 第5页 共52页 1(3 关于足球仿真系统 1.3.1 引言 机器人足球赛是近几年在国际上迅速开展起来的高技术对抗活动,虽然历史不长,但由于它集高新技术、娱乐比赛于一体,所以引起了人们的广泛关注和极大兴趣。机器人足球是人工智能与机器人领域极富挑战性的高技术密集项目,同时又是人工智能技术的一个理想突破点。机器人踢足球,看似游戏,其实展示了一个国家信息和自动化技术的综合实力。足球机器人系统的相关技术在许多领域也有着广泛的应用前景。因此目前许多国家都参与了机器人足球有关技术领域的研究并推动了这项活动及人工智能技术的发展。在机器人足球这一领域,目前美国、英国、加拿大等西方国家及日本、韩国等发达国家的技术水平普遍较高,我国与这些国家相比具有一定的差距。为了加速这方面技术的发展,缩小与世界先进国家的差距,国内许多大学院校也开展了机器人足球技术的研究,例如清华大学、中国科技大学、北京理工大学等院校的研究团队就取得了不错的成绩,并于1999 年在哈尔滨工业大学举行了第一届机器人足球锦标赛。机器人足球为了能完成实际的比赛任务,需要结合多种技术,包括:多智能体的设计、自主机器人的设计、多智能体的合作与协调、决策调度、实时推理、机器人学和传感器融合技术等。从历届的比赛情况看,要想取得较好的成绩,参赛队伍必须面对三个方面的研究挑战:智能体模型的建立、多智能体学习及团队协作。所有这三方面的工作都是立足于多智能体的交互。关于学习方面的挑战包括个体和团队的在线与离线的学习。 1.3.2 多智能体系统 智能体在人工智能领域有多种定义方法,但没有一种被广泛接受。Russell 和Norvig 定义智能体是一个可以通过传感器感知环境并通过执行器的行动影响环境的实体。所以,一个自主智能体可以自由地与环境交互并且高效地使用其传感器和执行器而达到特定的目标。Stone定义一个智能体是位于环境中的具有感知、目标、理性、行为和区域知识的实体,它的行动或从感知到行动的映射称为行为,其行为使得它能够与真实的世界进行交互。当一组智能体具有共同的目标时就形成团队,团队成员通过采用一致的理性处理过程而协调它们的行为,并且通过通讯等手段来直接影响其它成员的感知输入。分布式人工智能(DAI)是人工智能的一个分支,DAI 致力于在一个互不相关的多实体环境中学习行动和知识的协调所必须的技术与技能。DAI 的一个子系统就是多智能体系统(MAS)。MAS 提供了建立包括多个智能体及多个互不相关的智能体行为机制的协调的一个复杂系统的准则。目前提出了几种不同的方法来区分多智能体系统和分布式人工智能系统。例如,Deker 提出从智能体的间隔距离,智能体知识的不同,分布控制方法及通讯的可能性等四个方面来加以区分;而Parunak 则从应用的角度对此进行了区分。Stone 和Veloso 认为智能体最重要的属性是异质的程度和可通讯的程度,所以他们据此以同质不通讯智能体、异质不通讯智能体、同质通讯智能体、异质通讯智能体来概括多智能体系统及其相关问题。关于多智能体学习,Weiβ是这样描述的:智能体的学习是因为其它智能体的存在而成为必要。另一方面,机器学习提供了通过经验使得智能体产生从个体表现的有效性到团队协作的成 淮海工学院二??六届毕业设计,论文, 第6页 共52页 功性,直至最终取得最佳目标的鲁棒性机制。所以,机器学习(ML)与MAS 结合是有趣而必要的。一件非常有意义的事情是足球机器人可以直接被用来评价不同的多智能体技术,特别是有关多智能体的学习和相互协调。 1.3.3 机器人足球系统的典型结构 智能体(Agent)结构不同,决策方式也不同。机器人球队的结构差异很大,目前在研究领域流行的几种Agent 结构都可使用。如使用BDI 模型,使用反应式结构,但使用最多的是基于层结构的混合结构模型。 1.基于BDI 模型的慎思结构 在一个动态不确定的环境中,如足球机器人比赛,建立一个统一、稳定的环境模型是必要的。通过一个稳定的环境模型,偶然的错误信息能够被更正,不精确的信息能够重新进行估算,而且能够通过推理获得错过的信息。为了能够实现最终的目标,每个Agent 需要在其内部维护一个稳定的环境模型,含有一个稳定的信念。有多支球队使用BDI 模型,其中最著名的为AT Humboldt Team,曾获得1998 年比赛的亚军,ATHumboldt Team 的结构特点是按照BDI 模型的结构建立全队的规划过程。信念就是环境的模型,愿望就是从固定目标库中选择的目标,意图则表现为两个阶段的规划过程。 2.反应结构 从传感器进入数据的同时传给多个行为模块,如果某些模块的条件被满足,则这些行为就会被输出,但究竟哪一个被执行,或全部执行,需要裁决模块来判决。一般常用的算 法有动态优先级算法和混合算法。需要根据具体应用环境而定。 3.层结构 层结构一般可以分为两层或三层:通讯层、控制层和决策层。Sohota发展了一个决策技术,称之为reactive deliberation,它在多个事先定义好的行为之间进行选择。建立了层学习模式,首先学习低级技术,然后按照层的顺序,越来越高的层技术和行为被加入。 Stone采用以前的技术优势介绍并实现了分层学习,分层学习是机器学习的一种方法,它定义一系列建立一个对复杂系统分层次学习方案的准则,这些准则包括:直接从输入到输出的学习难以实现、可以给出从底层到高层的任务分解、机器学习探索训练数据或在不同层次产生适应性学习、一层的学习输出提供给另一层。断球使得智能体学到底层的控球能力,传球评估使智能体运用它以及学到的截球技术去训练一个多智能体行为,传球行为是智能体利用学到的传球评估去学习一个团队行为。一个分层任务分解后,分层学习使每一层次的学习都影响到其较高层次的学习。此系统与Sohota 系统的最大差别在于Stone 没有使用事先定义好的行为,所以,系统适合整队比赛,而Sohota 的技术主要用在一对一的情况。但Stone 的层学习有一个重要的问题,由于学习的过程是从低级到高级逐步进行,每步学习都是在低一层的基础上进行的,因此当某一层学习产生误差时,误差会通过层之间进行传递,使整个系统出现决策失误。南加州大学的ISIS 队使用了精确的队模型,称之为STEAM,由于环境状态空间特别巨大,精确的模型会影响系统的鲁棒性,荷兰阿姆斯特丹大学的Jan Lubbers &Rogier R. Spaans将Stone 的层结构进行简化,建立推理层和执行层的双层结构。同时采用面向对象技术中的Priority /Confidence模型进行决策算 淮海工学院二??六届毕业设计,论文, 第7页 共52页 法的设计,取得了较好的成绩。 1.3.4 结论 由于机器人足球内在的复杂性,具体到一个队伍,建立智能体的世界模型(包括模型表示、感知对象、估计状态、对状态进行合理的评价、设计机器人智能体系统结构等问题)的方法,协调、学习和训练基本动作( 包括带球、传球、射门、断球等)、在比赛中学习和使用各种技能(包括合作、战术、对抗等技能)以及对对手模型的估计等方法均千变万化,因此要构建一个在各方面都先进的参赛队伍,必须对以上各方面的内容进行认真细致的设计和研究。 1(4 可行性分析 可行性研究的目的,就是用最小的代价在尽可能短的时间内确定问题是否能够解决。可行性研究的目的不是解决问题,而是确定问题是否值得去解决。必须分析几种主要的可能解法的利弊,从而判定原定的系统规模和目标是否实现,系统完成后所能带来的效益是否大到值得投资开发这个系统的程度。因此,可行性研究实质上是要进行一次大大压缩简化了的系统分析和设计的过程,也就是在较高层次上较抽象的方式进行的系统分析和设计过程。可行性研究最根本的任务是对以后的行动方针提出建议。如果问题没有可行的解,分析员应该建议停止这项开发工程,以避免时间、资源、人力和金钱的浪费;如果问题值得解,分析员应该推荐一个较好的解决方案,并且为工程制定一个初步的计划。本系统的可行性分析包括经济可行性、技术可行性、操作可行性以及社会可行性。 1.4.1 经济可行性 本课题研究的内容是涉及网络的游戏对战。当今形势下,网络游戏俨然已经成为年轻人最时兴的消费方式之一,加之本课题研究是的年轻人最热衷的足球游戏,相信研究成功带来的经济效益必定是巨大的。可以看一下游戏业带来的巨大经济利润: “世界上投资最少,甚至每天睡觉都可以有成千上万收入的行业有哪种,网络游戏便可以。”网易掌门人丁磊的这句话越来越被人们当成了“名言”。 每一个技术的出现,都可能催生一个巨大的产业。在互联网技术成熟发展并实现将现实生活和虚拟世界完美结合的世界大背景下,在网络基础设施正逐渐由窄带向宽带过渡的中国,一个巨大的数字娱乐媒体产业应运而生,这个产业就是体验经济和网络经济的新宠——网络游戏业。正如《娱乐经济》一书作者沃尔夫所言,“娱乐已经成为未来30年严肃的大生意,娱乐经济时代已经到来,未来多数产业成功的关键,在于能否成功结合娱乐,其中电子电脑游戏产业则是未来娱乐经济的先锋代表” 。从2000年开始,这个“先锋代表”在中国更始刮起了一股旋风——让人不容忽视的旋风。在2000年的时候,IT行业进人寒冬,真正能够在这凄迷、残酷的环境中迅速成长,进而大把收钱的非网络游戏莫属。据资料统计,2002年网络游戏的市场规模已经达到10多亿元; 2003年中国的网络游戏更是“火”了一把,网络游戏产值约20亿元人民币;统计预测2004年将达到42亿元 。 网络游戏市场在国内迅速膨胀,成为一个充满诱惑的市场。 此外,本作研究的基础是建立于二维动画的足球游戏,不需要耗费巨大资金,力争可 淮海工学院二??六届毕业设计,论文, 第8页 共52页 以实现一些三维场面:例如球的变化等。这在经济上是完全可行的。 1.4.2 技术可行性 现在流行的游戏似乎都是用C或C++来开发的。在java平台上几乎没有很大型及可玩的流行游戏。由于java是个新生语言,他的许多特性还有待大家的发掘,但是我们不能否认Java在游戏编程方面的强大性。 Applets是一种Web浏览器上的小程序,由于applet对系统而言绝对安全,所以它做的事比application有限,但是对于客户端的程序,applets仍然是个很强大的工具。为了浏览和运行方便,我们就以applet为开发对象。开发Applets程序,我们得继承Applet类,并覆写必要的函数,下面几个函数控制了Web页面上的applet生成与执行。 函数作用 Init() 这个函数会被自动调用,执行applet的初始化动作—包括组件在版面上的分配,你一定得覆写它; Start() 每当浏览器显示applet内容时,都会调用它,让applet开启其正规工作,调用init()之后也会调用这个函数; Stop() 每当浏览器不显示内容时,都会调用它。让applet关闭某些耗资源的工作,调用destroy()之后也会调用这个函数; Destroy() 浏览器将applet自网页移除之际,便会调用它,以执行“applet不再被使用”应该做的最后释放资源等动作; Paint() 让你在Applet界面上进行相应的绘画动作,每次刷新时都会重画。 线程: 由于applet.java应用程序的执行都和线程有关。我们来大概了解一下线程的概念。 线程也称为轻型进程。每个线程只能在单个进程的作用域内活动、协作和数据交换,并且在计算资源方面非常廉价。线程需要操作系统的支持,因此不是所有的机器都提供线程。Java 编程语言,作为相当新的一种语言,已将线程支持与语言本身合为一体,这样就对线程提供了强健的支持。Thread 类是一个具体的类,即不是抽象类,该类封装了线程的行为。要创建一个线程,程序员必须创建一个从 Thread 类导出的新类。程序员必须覆盖Thread 的 run() 函数来完成有用的工作。用户并不直接调用此函数;而是必须调用Thread 的 start()函数,该函数再调用run()。但是使用Thread类实现线程,增加了程序的类层次,所以一般程序员都由另一个java线程接口Runnable接口来实现,Runnable接口只有一个函数run(),此函数必须由实现了此接口的类实现。 线程中有几个重要的方法是我们得了解: Thread.start(): 启动一个线程; Thread.stop(): 停止一个线程; Thread.sleep(time in milliseconds): 暂停线程在一个等待时间内。 使用多媒体声音 多媒体功能在游戏中是必不少的一部分,优美的音乐,漂亮的界面往往是一个成功游戏必需具备的条件。在开始之前我们先了解一下主要的小型声音文件类型: 淮海工学院二??六届毕业设计,论文, 第9页 共52页 AU - (扩展名为AU或SND)适用于短的声音文件,为Solaris和下一代机器的通用文件格式,也是JAVA平台的标准的音频格式。AU类型文件使用的三种典型音频格式为: 8位μ-law类型, 8位线性类型,以及16位线性类型。 WAV - (扩展名为WAV)由 Microsoft和IBM共同开发,对WAV的支持已经被加进Windows 95并且被延伸到Windows 98. WAV文件能存储各种格式包括μ-law,a-law和 PCM 数据。他们几乎能被所有支持声音的Windows应用程序播放。 AIFF - (扩展名为AIF或IEF)音频互换文件格式是为Macintosh计算机和Silicon Graphics (SGI)计算机所共用的标准音频文件格式。AIFF和 AIFF-C几乎是相同的,除了后者支持例如μ-law和 IMA ADPCM类型的压缩。 MIDI - (扩展名为MID)乐器数字接口MIDI是为音乐制造业所认可的标准,主要用于控制诸如合成器和声卡之类的设备。 在JDK1.0上,java只支持*.au格式的声音文件,但是java2的API以及声音包提供了很强大的对声音技术的支持。而此部分为了让大家快速掌握游戏编程的基本知识,我们仅使用了AudioClip接口类来实现播放"*.wav"。如果大家有兴趣可参考sun java网站的声音sapmle,上面提供了完备的实例和教程说明。使用AudioClip接口比较简单,我们只要实例对象,加载声音文件后,再在任何地方播放即可。恢复和播放声音最简单的方法是通过Applet类的play()方法。 图片处理技术 图片的处理和声音的处理在一样简单。设置图片变量,得到图形,最后绘制图形。开始绘制前,我们先要声明图形变量,用来存放图形文件。 以上是对本作的技术支持,加之其他涉及到游戏的类和方法。通过四年的学习和查阅资料,在技术上已经实现了可行性。 1.4.3 操作可行性 本作的表现形式是游戏者以观众的方式监视比赛的进程,游戏中游戏者可以根据场上的变化进行球员的调整等,手动操作的过程十分简便,不需要特别的其他的操作。游戏的内容涉及球员的部分不需要游戏者进行特别的操作,球员可根据场上的变化自行调整进攻及防守的策略,游戏者也可以通过更换球员的方法来调整进攻和防守策略,当然,这些操作都是在游戏中设定好的。游戏系统包括的游戏引擎,图形渲染,物理碰撞测试和声音系统等都已经包含在程序中,都是不可变的程序。游戏者(玩家)只需要在设定的规则下操作游戏,玩法相当地简单,这在操作上是可行的。 1.4.4 社会可行性 一个好的游戏应该具有以下特征: 易于学习: 既然游戏面向的是普通消费者而不是计算机专家,那么他们不可能深入的学习游戏技巧。消费者不会花几个小时去研究一个价值不高的手动操作的游戏。保持游戏的简单是最基本的要求。 可中断性: 多任务处理也是游戏的基本特征。 基于订阅:游戏的盈利成功取决于他们巨大的使用量。一开始开发和设计每个游戏都 淮海工学院二??六届毕业设计,论文, 第10页 共52页 是昂贵的。如果一个游戏开发者要赢利的话,重要的是:同一个游戏引擎,多个标题,基本的故事情节类似。基于订阅的游戏是不断产生收入的最好方法。 不管一个游戏设计得多好,只要玩家找到了它的根本模式或者玩完丰富的社会交互: 了所有的游戏路径很快就会厌烦这个游戏。对于一个基于订阅的游戏,重要的是与别的玩家合作以增强所玩游戏的智力和随机性。在今天纷繁复杂的多玩家游戏中具有丰富社会交互的游戏证明是成功的。 技术优点:巨额的技术研发费用都花在提高设备和网络的可用性和可靠性上面。因此,游戏设备硬件和网络协议与桌面/控制台世界有着非常大的差别。好的游戏应该利用那些更新的设备特征和网络基础设备的优点。 基于以上几点的描述,加之四年的学习经验和阅读资料,在社会性上相信也是可行的。 1(5 本章节小结 本章节主要通过对现在足球游戏的发展背景、发展历史,发展状况和发展趋势以及对机器人足球的仿真系统的介绍,分析出进行足球游戏研究的经济、技术、操作和社会可行性。 淮海工学院二??六届毕业设计,论文, 第11页 共52页 2 需求分析 所谓系统分析,就是指在整个系统开发工程中,解决“做什么”的问题,把要解决哪些问题,满足用户哪些具体的信息需求调查分析清楚,从逻辑上或是说从信息处理的功能需求上提出系统的方案,即逻辑模型,为下一阶段进行物理方案设计,解决怎么办提供依据。 2(1 系统初步分析 2.1.1 用户需求分析 随着Internet的发展,进入信息时代后快速获得网络共享资源成为很简单的事情,人们对互联网也有了很大的依赖性。网络的普及化使得原本单人的游戏已经不能适应人们的需要,广大的游戏者迫切需要能够和身在异地的朋友一起享受游戏的乐趣。在这种环境下,网络游戏应运而生,越来越多的游戏者投身到网络游戏中。这样带来的问题自然成为越来越多的游戏研究者将研究方向转为网络游戏的研究。 据目前的网络游戏的调研来看,以运动休闲为主的运动类游戏正在受到越来越多玩家的支持和爱戴。但是此类网络游戏中,足球类的网络游戏仍然是一个空白页,但是它却是一个迫切需要填补的空白页。在单机游戏的霸者——足球运动游戏,若能在网络上出现高要求多人互动的游戏,它将是一项极为伟大的发展。这也正是现在许多玩家迫切要求的。 2.1.2 系统的功能需求分析 系统功能的需求指定系统必须提供的服务。通过需求分析应该划分出系统必须完成的所有功能。本作的功能模块主要包括游戏的引擎设计,游戏的图象动画,游戏的物理系统,游戏的声音和渲染系统,以及需要设计的人工智能模块。 1.游戏的引擎设计的需求分析: 鉴定一个游戏的好坏,从内部设计的原因上说来,是从游戏的引擎设计体现出来的。一个游戏的引擎设计,直接关系到游戏设计的其他方面,诸如游戏的图形系统、声音系统及设计的物理模块等等各个方面。就如一台电脑需要CPU一样,游戏的引擎也是直接牵制着整个游戏的设计。它的主要作用就是处理游戏中的事件,运行游戏中的图象,输出声音及画面,调整游戏的节奏,响应玩家的游戏监听事件等等。所以,游戏的引擎设计是必要的功能模块,而且游戏的引擎设计必须做好,以使得游戏更具有可玩性。游戏程序是一项精度要求很高的程序系统,因为其代码利用率很高。一个实时运行的最终作品,每秒都会运行成千上万行程序,绘图事件等都会以极高的频率在后台等待响应,若有丝毫的差别都将很容易导致程序在运行不久后可能出现严重错误,甚至死循环。因此,其逻辑设计应当相当严谨,需将所有可能发生的事件及意外情况考虑在设计中。 2.游戏图形动画设计的需求分析: 作为一个游戏吸引玩家的重要方面,游戏的图形动画的设计是非常必要的。本作将采用模拟动画的方式将球场、球员、足球展现在玩家眼前。设计出丰富的球场环境,多样的球员图象更能吸引玩家。游戏中为了美观,适用性强,可能需要采用外部文件引入的图片 淮海工学院二??六届毕业设计,论文, 第12页 共52页 贴图,有关贴图,在MIDP2.0中提供了用于增强游戏功能的game包,使得解决静态或动态、画面背景、屏幕刷新的双缓冲等都有较好的解决方案。 3.游戏的物理系统设计的需求分析: 游戏中的情况是要符合实际情况,才能让玩家产生共鸣。所以游戏系统设计需求的另一个方面就是物理系统的设计。例如:在游戏中,球员的相互碰撞,球员踢球时的碰撞,球的重力测试等。这其中包括的就是球在被踢时产生的速度,受到重力时的下落,球在被传球过程中的弧线或者说传球的路线等等,这些都是物理系统所要考虑到的内容。 4.游戏的声音系统设计的需求分析: 游戏处了吸引人的图象之外,必备的条件还包括声音。一个游戏的音效也是吸引玩家的重要方面。游戏中会设计一个声音输出系统。 5.游戏渲染系统设计的需求分析: 渲染是引擎最重要的功能之一,当3D模型制作完毕之后,美工会按照不同的面把材质贴图赋予模型,这相当于为骨骼蒙上皮肤,最后再通过渲染引擎把模型、动画、光影、特效等所有效果实时计算出来并展示在屏幕上。渲染引擎在引擎的所有部件当中是最复杂的,它的强大与否直接决定着最终的输出质量。引擎还有一个重要的职责就是负责玩家与电脑之间的沟通,处理来自键盘、鼠标、摇杆和其它外设的信号。如果游戏支持联网特性的话,网络代码也会被集成在引擎中,用于管理客户端与服务器之间的通信。 6.游戏人工智能设计的需求分析: 本作游戏的设计重点之处在于人工智能的学习和球员数据库的适时更新,以便球员能在游戏中作出变化适应球场的形势变化。研究要点包括适应性行为,灵活、多模态的多智能体合作行为,在复杂、动态和不确定的现实世界中最优通讯策略。特别的,物理智能体方面主要关注与硬件软件和通讯方式的集成。归纳如下: (1)感知能力:球员必须实时观察他所不能完全预测或控制的物体的行为,以便于作出动作进行处理。这些物体包括球、对手及队友,甚至将来的裁判。大范围的感知能力,区分其它智能体的能力,在被挡住时对他们位置和运动的估计能力等都是必须具备的。这种感知能力是扩展机器人应用的基本技术。 (2)行动能力:球员必须具备快速的加速、减速、转向等运动能力,能进行稳定的移动,在踢球和阻截时有良好的技术和力量。其中的一些要求是互相矛盾的,如球员踢球的力量越大,技术就越差。如果我们采用庞大的机械装置来满足这两点,又会引起质量和所需能量的增加,往往又会影响其它运动能力。还有,无线的要求和重量的限制严重的影响了机械装置的设计。因此,不仅仅要考虑拥有良好技术的运动能力,而且还要考虑整个系统需求的总体平衡。 (3)形势和行为:任务领域本身是简单的,但是由于球、球门和球员之间的相对位置和相对运动及比赛进程的动态变化,会出现近乎无穷多的状态,最佳行为也会随着形势的改变而改变。因为我们的目标不是一支哑巴球队,我们还需要比简单反应式行为更复杂的能力,如对形势的理解,战术的选择和修改,队友之间最少的通讯,从训练中培养的团队合作行为。这些物体与一些认知问题有紧密联系,如对时空世界的记忆的组织,将马达动 淮海工学院二??六届毕业设计,论文, 第13页 共52页 作集合分类为物理实体的技术等。 (4)实时处理:由于球和其它队员的运动造成的形势剧变,没有时间来仔细分析当前形势并对规划进行深思熟虑。因此,如果旁边没有对方球员,为了等待更好的机会,球员应该立刻选择带球,或者跑到一个特定的地点以便于和队友配合。 2.1.3 系统的可靠性和可用性需求分析 可靠性需求定量地指定系统的可靠性。例如,游戏在运行过程中不能频繁发生错误而不得不终止游戏。 可用性则与可靠性密切相关,它量化了用户可以使用系统的程度。例如,游戏的运行必须保证随时可以,不能在一段不使用的时间内,游戏产生不可预见的错误而致无法运行等等。 2.1.4 本系统所要实现的功能 本作设计的是一款希望可以基于网络的五人制足球游戏,用Java语言实现。游戏的内容包含正常足球游戏需要的元素,这其中就包括游戏的引擎,游戏的声音和图象,游戏的物理系统,游戏的渲染系统和游戏的人工智能设计。游戏的引擎是用来处理游戏中的各种事件,游戏中包含图象的绘制输出和既定的游戏图象,游戏中声音的输出,游戏的物理系统设置包括碰撞模块的设置。游戏中最主要的设计就是智能模块的部分。游戏中每个球员都是一个智能体,它需要不断吸收场上瞬息万变的信息,更新数据库信息,以应对出现的各种进攻或者防守状况。其中包括适时的传球、射门和过人。游戏中还包含一个时间显示和比分显示系统,还包括一个文字解说系统。主要的功能选项包括进场,开始,换人和结束。 淮海工学院二??六届毕业设计,论文, 第14页 共52页 2(2 数据流分析 系统数据流图如下所示: 1.0 1.1 1.2 事 进入游球场调球员更球场、球球场信息 玩家 务 新数据戏 整 员、球的 库 显示 球场信息 D1 球员数据库 2.7 2.6 盯防对方控球判断球的位球员信息 员 球员信息 置 对 方 2.0 判断开球员球方 选信息 择 信 息 2.10 配合防守 2.1 朝向对 2.8 方球门判断断球是否 移动 成功 球员 判断 信 息 2.2 球员 3.1 判断球是判 断球员动作否到达自信 息 显示 己脚下 2.9 球场信息 继续防守或者配判断 2.5 合防守 信息 配合进D1 球员数据库 攻 选 2.3 球择判断形势场 3.0 信选择传球信球员数据球场信息 2.4 息 或继续带息 库更新 选择射球 门 图例2-1 系统数据 流程 快递问题件怎么处理流程河南自建厂房流程下载关于规范招聘需求审批流程制作流程表下载邮件下载流程设计 图 淮海工学院二??六届毕业设计,论文, 第15页 共52页 2(3 数据字典 数据流图表达了数据和处理的关系,数据字典则是系统中各类数据描述的集合,是进行详细的数据收集和数据分析所获得的主要成果。数据字典在数据库设计中占有重要的地位。 数据字典通常包括数据项、数据结构、数据流、数据存储和处理过程五个部分。其中数据项是数据的最小组成单位,若干个数据项可以组成一个数据结构,定义来描述数据流、数据存储的逻辑内容。本设计中用到的数据字典如下: 数据项名称: 数据项类型: 数据项的作用: Kind Int型 定义动作的类型 Direct Int型 定义角度 Speed Int型 定义球员和球的移动速度 Strength Double型 定义球员踢球的力量 Goalx Double型 定义球移动时的X方向上的增量 Goaly Double型 定义球移动时的Y方向上的增量 X Double型 定义球员移动时的X坐标 Y Double型 定义球员移动时的Y坐标 Lspeed Double型 定义球员的移动速度 Frame Int型 定义动画演示帧数 Ldirect Int型 定义球员移动的角度 Dx Int型 定义X方向上的增量 Dy Int型 定义Y方向上的增量 Name String型 定义球员的名称和球号 Id Int型 定义球员的背号 Team Int型 定义球员所在球队 Post Int型 定义球员在阵型中所处的位置 Nspeed Int型 定义球员的一般移动速度 Mspeed Int型 定义球员的最大移动速度 Celerity Int型 定义球员的反应速度 2.4 本章节小结 本章节主要通过需求分析阐述课题的研究要求,并通过数据流图和数据字典来表示课题的流程和基本研究要求。 淮海工学院二??六届毕业设计,论文, 第16页 共52页 3 总体设计 总体设计过程通常由两个主要阶段组成:系统设计阶段,确定系统的具体实现方案;结构设计阶段,确定软件结构和功能模块。 3(1 系统开发 3.1.1 系统开发的原则 经过需求分析阶段的工作,系统必须“做什么”已经清楚了,现在是决定“怎么做”的时候了。总体设计的基本目的就是回答“概括地说,系统应该如何实现,”这个问题,因此,总体设计又称为概要设计或初步设计。通过这个阶段的工作将划分出组成系统的物理元素——程序、文件、数据库、人工过程和文档等等,但是每个物理元素仍然处于黑盒子级,这些黑盒子里的具体内容将在以后仔细设计。总体设计阶段的另一项重要任务是设计软件的结构,也就是要确定系统中每个程序是由哪些模块组成的,以及这些模块相互见的关系。 总体设计过程首先寻找实现目标系统的各种不同的方案,需求分析阶段得到的数据流图是设想各种可能方案的基础。然后从这些供选择的方案中选取若干合理的方案,为每个合理的方案都准备一份系统流程图,列出组成系统的所有物理元素,进行成本/效益分析,并且指定实现此方案的进度计划。通常,设计出初步的软件结构后还要多方改进,从而得到更合理的结构,进行必要的数据库设计,确定测试要求并且制定测试计划。 基于上面的叙述,在详细设计之前先进行总体设计的必要性:可以站在全局高度上,花较少成本,从较抽象的层次上分析比对多种可能的系统方案和软件结构,从中选出最佳方案和最合理的软件结构,从而用较低成本开发出较高质量的软件系统。 3.1.2 系统设计阶段 系统设计阶段的主要目的就是确定软件如何做的问题。主要任务就是确定系统中的大模块和设计方法,确定软件的功能模块和模块的作用,组成,关系等等。 本作是一款希望可以基于网络的五人制足球游戏,其中要实现的主要功能就是足球游戏的基本目标。采用模拟的方式,球场完全按照比例来绘制,球场和球员的对比等等也严格依照比例。 作为游戏者(玩家),作为一个游戏的操作者,在本作中是以教练员的身份出现的。游戏者可以操作的功能选项有游戏的开始,更换人员和结束比赛。场景布置是模拟的现实足球场地,以一个以绿色草地作为背景的二维游戏空间。 比赛中采用的主视角,是一般游戏中采用的俯视45度视角,这也比较符合真实的足球比赛。让玩家在视觉享受的同时能感受到如同真实比赛一样的效果。球的效果也显示有大小的变化,在高空飞行中的足球相对于观看者而言是稍大一些的,而低传球,贴近地面的运动中的足球则是没有大小的变化,这也比较符合实际情况。 系统中值得注意的一个方面是系统的物理功能模块,包括重力系统和碰撞模块两个方面。整个系统是仿照真实环境来设计的,它有重力系统和时间系统等,重力系统选用的g = 2,而这里的时间系统选用的是真实时间的1/20。 淮海工学院二??六届毕业设计,论文, 第17页 共52页 游戏中还设置了声音输出和渲染系统。主要负责游戏音乐的输出和图象的渲染。 本作的内容是五人制足球游戏。总共10名队员在进行比赛,双方各五名,五名中由一人担任守门员,其余四人协同进攻和防守。无论是进攻还是防守,核心仍然是球的运动轨迹,是以球的移动视角来观察球场的变化。在进攻的时候,进攻方的球员除却守门员的四位球员配合进攻,一名球员的变化牵动着其他球员,它可以选择带球,或是传球给自己的队友,或者自己判断是否达到射门的范围。其他的进攻球员是以球的移动来作为基准,判断自己的行进路线,或者是接球做其他行动。而做为防守方,球员仍然是以球的移动来作为自己的基准,判断如何防守,譬如:如何断球,何时断球等。但是不可能其余球员全部朝向球的运动方向运动,所以,在攻守转换的时候,球员作为进攻方时,可以选择任意的行进路线以配合自己的队友来进攻,但是作为防守的一方,球员以固定好自己的坐标,在球行进到自己的坐标范围内的时候,开始采取相应的方式作防守。所有这些控制都是由线程控制完成。 关于线程:对象技术提供了一种把程序划分成若干独立部分的方式。通常,还需要把程序转换成彼此分离的、能独立运行的子任务。每一个这样的独立子任务都被称为一个“线程”。每个线程都好象是在独立运行并且有自己的CPU。CPU时间确实是通过某些底层机制进行分配的,不过你一般不考虑这些,这使得编写多线程程序的任务变得容易得多了。多线程有多种用途,不过通常用法是,程序中的某个部分与一个特定的事件或资源联系在一起,而又不想让这种联系阻碍程序其余部分的运行。这时候,可以创建一个与这个事件或者资源相关联的线程,并且让此线程独立于主程序运行。使用并发的最引人瞩目的理由之一就是,产生一个可作出响应的用户界面。考虑一个程序,它要执行某项强烈需用CPU的计算,这样就会导致用户的输入被忽略,也就无法作出响应。问题的实质是:程序需要一边连续进行计算,同时还要把控制权交给用户界面,这样程序才能响应用户的操作。 并发还可以用来优化吞吐量。比如,在等待数据到达输入/输出端口的同时,可以进行其他重要的工作。要是不用线程的话,唯一可行的办法就是不断查询输入/输出端口,这种方法不仅笨拙,而且很困难。 线程模型为编程带来了便利,它简化了在单一程序中同时交织在一起的多个操作的处理。在使用线程时,CPU将轮流给每个线程分配其占用时间。每个线程都觉得自己在一直占用CPU ,但事实上CPU时间是划分成片段分配给了所有线程。例外情况是程序运行在具多个CPU的机器上,但线程的一大好处是可以使你从这个层次抽身出来,即代码不必知道它是运行在具有一个还是多个CPU的机器上。所以线程是一种透明的、可扩展的程序方法,如果程序运行的太慢,为机器增添一个CPU就能很容易地加快程序的运行速度。多任务和多线程往往是使用多处理器系统的最合理方式。 在系统中每个队员都是一个独立的线程,它的运作完全依赖于自己的信息采集和抉择系统。每位球员有体力、反应速度、观察能力和记忆能力等参数,球员的体力是用来决定球员奔跑时的最大速度的,而反应能力则是球员对当前场景中的情况作出抉择所需要的时间。这也是根据真实情况来分析的,比如在球员进行防守时,由于人的反应能力的差别,防守队员经常会被进攻队员的假动作所迷惑。在系统中虽然保存着整个球场的准确信息, 淮海工学院二??六届毕业设计,论文, 第18页 共52页 但每个球员只能通过自己的视觉通过观察来获得球场上在自己的视角范围内的球场信息,球员的视角范围设置在135 和,135 度之间。球员只能采集到视角范围内的信息,即使在视角范围内,球员的对观测到信息的准确度也是和距离成反比的。当被观察的物体离球员越远时,球员对他位置信息的判断就越不准确。在获得新的球场信息时球员会把上次观查到的球场信息存入到记忆中。这样球员根据当前球场中的信息和记忆中的球场信息来计算和判断球场的情况并作出相应的抉择。如果想得到另外一个球员的运动信息,则可以根据记忆中旧的信息和最新的信息比较获得。 3.1.3 结构设计阶段 经过系统设计阶段的思考和实践,需要对功能结构进行细致的划分。一个程序的结构设计的好坏也是决定其发展的重要指标。对一个程序的模块划分往往也能使程序设计变得简单。本作的功能模块大致有:图象系统,声音系统,渲染系统,物理系统,人工智能系统,其功能模块图示如下: 五人制足球游戏系统模块 图声渲物人 象音染理工 系系系系智 能统 统 统 统 系 统 球球球球球重碰球球环 场员场场员力撞员员境 图图音图动系系数学变 象象效象画据习统 统 量 显显输裁显库系 减信示 示 出 示 统 变息 采化 集 图例3-1 系统功能模块结构图 功能模块介绍: 图象系统:包括足球图象显示和球员图象显示。球员的图象显示包含的内容就是本身球员的图象,球员在球场中的运动图象就是球员图象的连续播放形成连续动作。 声音系统:负责输出球场音效。在实现代码中加入了一些球场音效,能给游戏带来一些真实感。 淮海工学院二??六届毕业设计,论文, 第19页 共52页 渲染系统:包括球场图象裁减变化和球员、球的动画显示等。 物理系统:包括重力系统和碰撞系统。这个部分是仿真系统的重要部分,主要是为了让游戏更贴近于现实情况。重力系统和碰撞系统都是模拟真实世界的重要组成部分。前面的图象和声音效果只是为了使游戏看起来更具真实效果,但是真正能让玩家在游戏中体验到真实感的重要手段就是仿真系统。 人工智能系统:包括球员的数据库信息采集,球员学习系统和环境变量。 球员的数据库信息采集作用在于适时更新球员在进攻或防守时采取的成功或者失败策略,成功的策略就保留在球员的思想中,再次遇到类似的情况可以继续沿用成功的方法去防守或者进攻;而失败的策略则要不断地删除更新,使得可以不断地出现新情况,解决新问题。环境变量整个模块是对球员观察到的信息根据距离产生一个随机的影响因素,来模仿真实世界中的距离影响的因素。球员的学习系统是整个游戏的核心模块,球员根据当前获得的信息和记忆在“脑子中”的数据信息来对当前的整个球场进行分析,然后根据自己的规则库来选择对应进攻或防守策略。 3.2 攻防策略的研究 3.2.1 进攻策略研究 作为进攻方来说,最重要的莫过于射门,那么球员在球场中能实现射门的功能是最重要的。在之前的设计中,基本设计了简单的程序以及控制方法,但是大多球员都没有较好的比赛能力。现在我们要让球员拥有在足球比赛中最需要的能力——射门。 通过下图来研究一下球员在进攻中的射门方法: 图例3-2 进攻策略演示图 假设进攻球员初始在A点,球在B点,球门在P点,无论是球员在带球还是球在传行过程中,当需要射门的时候,球员A需要一个点去撞击球B,这一点设在C点,当球员A移动到C点的时候,就选择射门,朝向球门P。 简易的流程图如下: 淮海工学院二??六届毕业设计,论文, 第20页 共52页 开始 获取进攻方向、球场宽度和球场高度 通过判断,计算所要进攻球门中心位置 计算射门位置,向该位置移动 选择射门 图例3-3 进攻策略流程图 当球员带球到达射门区域时,或者球员之间互相传球到达射门范围时,球员自己选择射门。 球员在进攻中,除了要达到射门的目的,球员之间的相互配合也相当地重要,这之中最重要的手段就是传球配合。本作中,球员进攻时候,球总是放在最前端球员的脚下来策动进攻。球员的移动的范围基本固定在一定范围内,当球到达某球员的固定范围内,球员就脱离自己的固定点,朝向球的移动方向移动。在针对对方防守的时候,球员意识到自己会有被断球的意识时,球员也会选择传球。 进攻球员在受到防守球员防守时,球员除了传球之外,也可以选择过人。球员在过人时候,比较生硬,一般带球过人比较困难,所以球员在过人的时候一般会失败,所以多数还是要选择传球比较合适。 淮海工学院二??六届毕业设计,论文, 第21页 共52页 球员进攻中的流程图如下: 开始 获取球场大小 获取球员信息 球员移动 否 是否选择射门 是 朝向球门运动 选择传球 条件始终为 真 获取球的坐标 朝向球门运动,选择射门 图例3-4 球员进攻流程图 淮海工学院二??六届毕业设计,论文, 第22页 共52页 3.2.2防守策略研究 作为防守一方,最为重要的就是防守方的守门员要能守住球门。现实足球赛中的守门员完成扑球和防守动作有防止足球入网、抱住足球、破坏足球的运动轨迹、用身体挡住足球等等。在游戏中,球员当然不可能抱住足球,防止足球入网。所以可行的方案是破坏足球的运动诡计,用身体挡住足球之类。守门员要在守门之前优先判断进攻球员的运动轨迹来选择自己的移动方向,以达到守住球门的目的,具体的可以用以下图例来表示: 图例3-5 防守策略演示图 对照上图,当进攻球员C选择射门时,防守方的守门员要阻止足球A进入球门区域D,可以选择的移动方向是a和b,这样可以达到守住球门的目的。 简易的流程图如下: 开始 守门员获取球场信息 根据进攻球员移动选择移动方向 不断获取球的坐标,并选择阻止进球 图例3-6 防守策略流程图 防守球员除了守门员的防守阻止进球之外,其余球员的阻挡和抢断也是防守中的重点。本作游戏中采取的是一对一防守,防守球员要不断获取球场上的变化和球的移动信息,然后朝向球选择移动,目的是阻止进攻球员的传球以及射门等。 3.3本章节小结 本章节主要通过系统的总体设计,划分出各个主要的功能模块和系统要求。对各个功能模块的作用及其关系做细致描述。对游戏中相互的进攻及防守策略做细致描述,大体设计出游戏的功能。 淮海工学院二??六届毕业设计,论文, 第23页 共52页 4.详细设计 详细设计阶段的根本目标是确定应该怎样具体地实现所要求的系统,也就是说,经过这个阶段的设计工作,应该得出对目标系统的精确描述,从而在编码阶段可以把这个描述直接翻译成用某种程序设计语言书写的程序。详细设计的结果基本上决定了最终程序代码的质量。详细设计的目标不仅仅是逻辑上正确地实现每个模块的功能,更重要的是设计出的处理过程应该尽可能简明易懂。结构程序设计技术是实现上述目标的关键技术,因此是详细设计的逻辑基础。 4.1 图形系统的设计 4.1.1球员和球的图象显示 游戏中球的显示是仿真的一部分。游戏中设置的球是有重量的,在空中由于受到重力的影响,可以明显看出球的变化及球在空中的弧线,也可以看到球的大小变化,球在地面上的投影等。画出球的主要代码如下: //BallInfo.java package com.info; public interface BallInfo { public final int BALL_WIDTH = 13; //定义球的宽度 public final double BALL_WEIGHT = 18; //定义球的重量 public final double BALL_k = 0.95; } 画出球员的图象显示的具体代码如下: package com.info; public interface PersonInfo { public final int TOTAL_DIRCT = 8; public final int TOTAL_FRAME = 4; //定义球员的结构 public final int PERSON_WIDTH = 20; //定义球员的宽度 public final int PERSON_HEIGHT = 40; //定义球员的高度 public final int DISTANCE_LEVEL = 40; //定义水平距离 public final int DISTANCE_PLUMB = 60; //定义铅直距离 } 球员在球场中的运动,是由一个个连续的球员图片构成的,调用球员的运动图象,将一个个连续的动作就象幻灯片一样地放映出来,就构成了一幅幅鲜活的球员图象。 淮海工学院二??六届毕业设计,论文, 第24页 共52页 球员的具体图象参照下图所示: 图例4-1 球员图象 球员在球场中的运动图象可以参照下图所示: 图例4-2 球员在球场中的运动图象 4.1.2 球场图象显示 游戏中采用了仿真设计,图象有远近大小之分,采用的绘图方法不能使用一般游戏采用的图象裁减,否则会带来一系列问题。球场图象显示的具体流程图如下: 淮海工学院二??六届毕业设计,论文, 第25页 共52页 球场信息 计算球的坐标 重定位球的坐标 越界 显示区域 未计算显示区域大越小 界 显示球场信息,显 示图片 重建球场信息,显 示图片 图例4-3 球场图象显示流程图 具体的实现代码如下: 4.2 声音系统的设计 4.2.1 球场的音效输出 为了配合亲和设计,游戏中添加了不可缺少的声音系统,就是调用声音使得玩家能感 受到球场的气氛,主要就是负责球场音效的输出,增添游戏的乐趣。具体的语句如下所示: private void resetSence() { if( ball.getInfo().x < 0 || ball.getInfo().x > COURT_LENGTH) { Display.addmessage("球进了,漂亮的一个进球。"); //输出球场信息语句 soundPlay.playSound("sound//Crowd pen shoot outwin.wav"); //调用球场音效 new Thread(soundPlay).start(); //启动线程控制 if(ball.getInfo().x < 0) { source[1] ++; Display.raceinfo[1] = source[1]; sheet = 0; }else { source[0] ++; 淮海工学院二??六届毕业设计,论文, 第26页 共52页 Display.raceinfo[0] = source[0]; sheet = 1; } initSence(sheet); } } 4.3 渲染系统的设计 4.3.1球场图象裁减变化 游戏中,主视角定位在足球上,就是说球的变化带动镜头的变化,这也符合一般的实际情况。但是当球到达球场边界的时候,才固定主视角的变化,直到球重新回归场内。游戏中的球场比较大,而真正显示的区域不足够大,所以显示的区域只能是以足球为中心的一定大小。而未显示的部分则储存在内存中,当球移动到不可见的那部分区域时,再调用出来显示球场的信息。另外,由于是球的变化带动镜头的变化,所以在球的运动过程中,要不断进行变换,否则会导致球场的显示不均匀。 具体的流程图示如下: 显示球场信息 球的区域变化 出界 固定视角 未 出 界 计算球的位置变化 缓存球场图片 显示当前球场图片 图例4-4 球场图象裁减变化流程图 淮海工学院二??六届毕业设计,论文, 第27页 共52页 部分球场显示的代码如下: public interface CourtInfo { public final int COURT_WIDTH = 700; //定义球场宽度 public final int COURT_LENGTH = 1300; //定义球场长度 public final int CENTER_WIDTH = 300; //定义中圈宽度 public final int BIG_WIDTH = 400; //定义禁区宽度 public final int BIG_LENGTH = 200; //定义禁区长度 public final int SMALL_WIDTH = 200; //定义小禁区宽度 public final int SMALL_LENGTH = 100; //定义小禁区长度 public final double COURT_u = 0.5; public final double COURT_k = 0.8; } 4.3.2球员动画显示 在系统设计中介绍过球员的图象,在实际的游戏中,球员的动作就是由图片的集合组成的,球员的带球,奔跑,射门等动作都由固定的图片连续放映构成的。 游戏中出现的问题:1.游戏中进攻方球员在带球的过程中,存在着一个比较大的问题, 就是进攻方都是一人在带球,而另有一名球员在护球。由于设置的球员在近球位置会去配合进攻,就是朝向球运动,而防守方也设置了在近球位置的球员会去争抢球。这样,常常出现多个球员,包括进攻和防守球员会同时争球,造成了球不断在双方球员的脚下来回,或者围着球在打转,很容易形成一个死循环,直到有其他球员能将球踢出,打开死锁。 给出的解决方法:进攻中,设置最前端的球员带球,其他进攻球员协同进攻时,以同等的速度在该进攻球员的外围(远离球的点)跑位。当该进攻球员遇到防守方球员时,如果防守球员的速度跟不上该进攻球员的速度,而使得防守球员还有一段距离才能追上进攻球员,则该进攻球员就选择绕过防守球员;但是当防守球员移动在与进攻球员面对的方向上时,进攻球员判断出球场的信息而选择传球给自己外围的队友。这样,球员在进攻中,不会出现同队球员相互争求的局面。 淮海工学院二??六届毕业设计,论文, 第28页 共52页 大体的流程图示如下: 带球的进攻球员 遭遇防守球员 双方距离信息 判断 双方距双方距 离较近 离较远 传球给外围无球队友 选择绕过防守球员 配合跑位 继续进攻,选择射门 图例4-5 进攻球员进攻策略选择流程图 部分代码如下: //分析带球员 private void playBall() { double[] person = new double[4]; person = nearPerson(pro.Team, FINALX, 350); if(person[0] != -1 && person[1] != -1 && person[3] < 90000 ) //将球总是交于 处于前端的球员 { if((int)person[2] != pro.Team * 5 + pro.Id) { Display.addmessage((pro.Team+pro.Id) +" 号把球传给了"+ person[2]+"号"); passBall(person[0], person[1]); }else { Display.addmessage(pro.Team + pro.Id+" 要射门了。"); passBall(FINALX - (INCREASE * 100 + Math.random() * 100), 300 + Math.random() * 100); } }else 淮海工学院二??六届毕业设计,论文, 第29页 共52页 { double value = 0; int team = pro.Team; team ++; team %= 2; for(int i = team * 5 + 1; i < team * 5 + 6; i++) { int n = 0; while(n < 4 && pate[n][i][0] == -1 && pate[n][i][1] == -1) { n ++; } double s = Math.pow(pos.x - pate[n][i][0], 2) + Math.pow(pos.y - pate[n][i][1], 2); if( s < 900) { passBall(pro.Team); return ; }else if(s < 3600) { value += 18000/s; } } if(value > 5) { passBall(pro.Team); return; }else { int gdir = getDirct(pos.x, pos.y, pos.x - INCREASE * 100, pro.Post * 175 + 85); Dirction dir = new Dirction(); dir = getDirct(gdir); double cvalue = countValue(pro.Team, pos.x + 50 * dir.dx, pos.y + 50 * dir.dy); for(int i = 0 ; i < 8; i++) { dir = getDirct(i); double l = Math.abs(dir.dx) + Math.abs(dir.dy); double dx = 50 * dir.dx/l; double dy = 50 * dir.dy/l; double temp = countValue(pro.Team, pos.x + dx, pos.y + dy); if(temp < cvalue) { gdir = i; cvalue = temp; 淮海工学院二??六届毕业设计,论文, 第30页 共52页 } } actionInfo.kind = 1; actionInfo.strength = 6; actionInfo.dirct = gdir; } } } 球员在射门中的具体图例参照下图所示: 图例4-6 球员的射门图示 2.无球队员,或者说在进攻时不在球的可视范围内的球员。由于他们距离球比较远,不会以球为参照对象来选择走位,而在设置的固定范围内活动,大体是以自己为中心的X半径内移动。这样,会使得自己远离球在运动,而不能掌握球场的信息,不参与任何进攻或防守。 给出的解决方法:将球场以中线分为进攻半场和防守半场。在进攻中,球员按照上述已经提到的方法配合进攻,将球员进攻时的运动方向定位在球上。防守的时候,则将球员的目标定位在对方球员身上,按照盯人防守的办法来防守对方球员。主要在防守半场的时候,就以一盯一的方式来防守。游戏中设置了球员的平均速度变量和最大速度变量,所以,当球到达防守半场的时候,假如带球的进攻球员比较远离已经设定过的防守队员,就以加速度的方式来添补防守的空缺,避免出现漏防的问题。 大体的流程图如下所示: 淮海工学院二??六届毕业设计,论文, 第31页 共52页 防守球员移动 球场信息判断 进攻防守 半场 半场 配合进攻走位 盯防已设定进攻球员 获取球场信息,选择进获取球场信息,选择防 攻 守 图例4-7 防守球员防守策略选择流程图 部分代码如下: //初始化球员的位置 public void InitPos(int sence, int type) { setId(sence); Aposition pos ; if(type == 0) { for(int i =0; i < 5; i++) { pos = new Aposition(); switch(athlete[i].property.Post) { case 0: pos.x = FINALX + INCREASE * 900; pos.y = 85; break; case 1: pos.x = FINALX + INCREASE * 800; pos.y = 260; break; case 2: pos.x = FINALX + INCREASE * 800; pos.y = 425; break; case 3: pos.x = FINALX + INCREASE * 900; pos.y = 615; break; 淮海工学院二??六届毕业设计,论文, 第32页 共52页 case 4: pos.x = FINALX + INCREASE * 1250; pos.y = 350; break; } if(id == 0) { pos.Ldirct = 0; }else if(id == 1) { pos.Ldirct = 4; } athlete[athlete[i].property.Post].setPos(pos); } }else if(type == 1) { //设置每个球员的位置 for(int i = 0; i < 5; i++) { pos = new Aposition(); switch(athlete[i].property.Post) { case 0: pos.x = FINALX + INCREASE * 830; pos.y = 85; break; case 1: pos.x = FINALX + INCREASE * 680; pos.y = 300; break; case 2: pos.x = FINALX + INCREASE * (650- INCREASE * 25) ; pos.y = 350; break; case 3: pos.x = FINALX + INCREASE * 830; pos.y = 615; break; case 4: pos.x = FINALX + INCREASE * 1250; pos.y = 350; break; } if(id == 0) { pos.Ldirct = 0; }else if(id == 1) { pos.Ldirct = 4; } if(athlete[i].property.Post == 2) { 淮海工学院二??六届毕业设计,论文, 第33页 共52页 pos.Ldirct += 4; pos.Ldirct %= 8; } athlete[athlete[i].property.Post].setPos(pos); } } } //球员位置的调整 public void changeAhlete(Property pro) { athlete[pro.Post].Load(pro); } 球员在游戏中的传球具体图例参照下图所示: 图例4-8 球员的传球图示 3(游戏的五人中,设置了一位守门员,他在防守的时候不能及时地获取球场上的变化,当进攻球员移动到需要防守的地带的时候,守门员可能在球门的远端运动,而不能及时防守球门。进攻球员在选择射门的时候,守门员也不能及时获得准确的信息防守住。主要的原因在于守门员在球的距离判断之后,能不能跟上球的速度做防守。 给出的解决方法:在防守的策略中已经给出守门员的防守方法。就是设定守门员在判断出球到达自己半场的信息后,在球门线上运动,按照防守策略中的方法防守。 大体的流程图示如下: 淮海工学院二??六届毕业设计,论文, 第34页 共52页 守门员位置移动 球场信息判断 对方己方 球员球员 控球 控球 守门员移动到球门线附近 守门员在禁区移动 球的位置继续判断球场信息 判断 选择正确的防守方向 图例4-9 守门员防守信息选择流程图 部分的代码如下: //守门员的移动判断信息 private void Goalkeep() { actionInfo.dirct = getDirct(pos.x, pos.y, FINALX, pos.y); if(pate[0][0][0] != -1 && pate[0][0][1] != -1) { double gx = FINALX + 1250 * INCREASE; double gy = 350; if(Math.abs(pate[0][0][0] - (FINALX + INCREASE * 1300)) < 250) { int n = 0; while(n < 4 && pate[n][0][0] != -1 && pate[n][0][1] != -1) { n++; } if(pate[n][0][0] != -1 && pate[n][0][1] != -1) { double dx = pate[0][0][0] - pate[n][0][0]; double dy = pate[0][0][1] - pate[n][0][1]; if(dx != 0) { 淮海工学院二??六届毕业设计,论文, 第35页 共52页 double k = dy/dx; double c = pate[0][0][1] - pate[0][0][0] * k ; gy = gx + c; if(gy < 300) { gy = 300; }else if( gy > 400) { gy = 400; } } if(pos.x < gx + 10 && pos.x > gx - 10 && pos.y < gy +10 && pos.y > gy - 10) { actionInfo.speed = 0; actionInfo.dirct = getDirct(pos.x, pos.y, pos.x, pos.y); }else { actionInfo.speed = 5; actionInfo.dirct = getDirct(pos.x, pos.y, gx, gy); } } }else { if(pos.x * INCREASE < FINALX + INCREASE * 1260 && pos.x * INCREASE> FINALX + INCREASE* 1240 && pos.y < 360 && pos.y > 340) { actionInfo.speed = 0; actionInfo.dirct = getDirct(pos.x, pos.y, FINALX, pos.y); }else { actionInfo.speed = 2; actionInfo.dirct = getDirct(pos.x, pos.y, FINALX + INCREASE * 1250, 350); } } } int n = 0; while(n < 4 && pate[n][0][0] != -1 && pate[n][0][1] != -1) { n++; } double ls = Math.pow(pos.x - pate[n][0][0], 2) + Math.pow(pos.y - pate[n][0][1], 2); 淮海工学院二??六届毕业设计,论文, 第36页 共52页 if(ls < 3600) { if(ls > 160) { double gx = pate[n][0][0]; double gy = pate[n][0][1]; actionInfo.speed = 5; if(pos.x < gx + 10 && pos.x > gx - 10 && pos.y < gy +10 && pos.y > gy - 10) { actionInfo.speed = 6; actionInfo.dirct = getDirct(pos.x, pos.y, FINALX + INCREASE * 1250, pos.y); }else { actionInfo.speed = 5; actionInfo.dirct = getDirct(pos.x, pos.y, gx, gy); } }else { passBall(pro.Team); try { Thread.sleep(100); }catch(Exception e){} } } } 4.进攻的时候,进攻球员的射门时机的选择。 给出的解决方法:进攻球员判断球场的信息,获取球门的距离,自动选择射门。 大体的流程图示如下: 进攻球员带球 判断球门距离 与球门与球门 中心较中心较 近 远 选择射门 选择传球给己方队友,配合进攻 图例4-10 进攻球员射门选择流程图 淮海工学院二??六届毕业设计,论文, 第37页 共52页 4.4 物理系统的设计 4.4.1 重力系统 仿真设计中一个重要的方面就是物理系统的模块,而为了体现游戏的实际效果,设计了重力模块。主要是考虑到实际中球的变化,一定是受到地心引力的影响,所以在设计中,加入了重力的影响,包括影响球的速度和球员踢球时的力度和水平速度等,示意图如下: 球员踢球 球受重力下落及影响 重力 球的大小变化 影 响 球的速度 图例4-11 重力系统影响示意图 重力模块的具体实现代码如下: public class Gravity //定义球的重力 { private final double g = -2; //计算球由于重力带来的水平冲力 private double k; public Gravity(double a, double b) { k = a*b; } public Bposition count(Bposition pos) //计算移动中球的位置 { Bposition temp = pos; pos.z += pos.Pspeed + g/2; pos.Pspeed += g; if((int)(Math.round(pos.z)) <= 0) { pos.z = 0; pos.Pspeed = -(int)(pos.Pspeed * k); } 淮海工学院二??六届毕业设计,论文, 第38页 共52页 return pos; } } 4.4.2 碰撞系统 本游戏球场的边界可以看成是一个碰撞边界,但是此外也包括球员和足球之间的碰 撞,也就是踢球时产生的摩擦等,主要就是产生了足球的动力。球在底线会出界,但是由 于五人制足球的限制,球在两边边界不会出线,所以设置了碰撞边界。另外,在球员的相 互碰撞,球员踢球的时候也会产生碰撞力,可能会改变球的速度,给游戏带来了未定性。 具体的实现代码如下: public class Collide implements CourtInfo //定义碰撞 { private final double g = -2; private double k; private double c; private ActionInfo actionInfo; public Collide() { actionInfo = new ActionInfo(); } public Collide(double u, double c) //定义碰撞摩擦力 { this(); this.c = c; k = u*g; } private ActionInfo setDirction(ActionInfo act, int dirct) { switch(dirct) //返回球的运动信息 { case 0 : act.goalx = 1; act.goaly = 0; break; case 1 : act.goalx = 1; act.goaly = -1; break; case 2 : act.goalx = 0; act.goaly = -1; break; case 3 : act.goalx = -1; act.goaly = -1; break; case 4 : act.goalx = -1; act.goaly = 0; break; case 5 : act.goalx = -1; act.goaly = 1; break; case 6 : act.goalx = 0; act.goaly = 1; break; case 7 : act.goalx = 1; act.goaly = 1; break; default: break; } return act; } public synchronized Aposition move(Aposition pos) //球员的移动信息 { double s = 0; 淮海工学院二??六届毕业设计,论文, 第39页 共52页 actionInfo = setDirction(actionInfo, pos.Ldirct); double l = Math.sqrt(Math.abs(actionInfo.goalx)+Math.abs(actionInfo.goaly)); if(l == 0) { return pos; } s = 5; pos.x += s * actionInfo.goalx/l; pos.y += s * actionInfo.goaly/l; return pos; } } 4.5 人工智能系统的设计 4.5.1 球员数据库信息采集 球员的数据库信息采集就是指游戏中的球员要以球员的身份学习如何避免重复的失败动作和引用成功经验。球员在做进攻时,如果这次选择的射门未能成功,下次遇到同样的问题,是否可以以其他的方式做判断,选择其他的射门方式,而成功的经验可以继续沿用;同样,作为防守队员,如果一次防守失败,是否会以其他的方式再做防守,而同样成功的例子可以继续沿用。 首先,球员要预先判断球场的各类信息,不断获取球场的变化,包括计算球的位置,球员的相对坐标等等。然后,在进攻中,球员带球进攻,射门成功,球员就将此次成功的信息数据(包括球的位置变化和球员的位置变化)等更新到数据库中,在以后的进攻过程中继续采用该策略。当进攻球员在进攻时,选择的进攻方式错误,未能达到目标,就将此次的失败经验抛弃掉,随机再次选择其他的进攻方式。在防守时,主要指守门员是否能成功获球,如果能成功,就将此次的移动路线、选择方式和信息数据等更新到数据库中;当选择方式错误时,就将此次的数据抛弃掉,在以后的防守中,重新选择防守策略。 这类数据库的设计,可以使得一部分球员获取比较多的成功经验,从而在进攻和防守时的选择策略比较多,而能够成长为拥有比较高的成功率的智能球员,将其在游戏中设置为类似现实球星的球员。而那些数据库更新比较少的球员,则可能在游戏中被淘汰,就是替换掉,用比较高“智商”的球员替代。 具体的流程如下: 淮海工学院二??六届毕业设计,论文, 第40页 共52页 球场信息 球场变化 球员动作 防守 失 败 成 功 更新球员数抛弃信息 进攻 据库 成 功 失败 更新球员数采用当前成采用新策抛弃信息 据库 功策略 略 采用当前成采用新策 功策略 略 图例4-12 球员数据库信息采集流程图 4.5.2球员学习系统 球员学习中,主要就是球场信息的采集方面,比如进攻时判断球的方位,选择是否进攻,不在进攻范围时,是否配合进攻;防守时判断球的方位,选择是否防守,不在自己的防守范围,盯防对方无球球员。在判断球场信息的同时,球员要根据学习到的经验立即做出进攻或防守的动作,并对进攻或者防守的最佳方法做出选择。具体的流程图如下: 淮海工学院二??六届毕业设计,论文, 第41页 共52页 球场信息 计算球的区域信防守 息 处在在防进攻守区半 场 域 配合防守 盯防对方进攻 无球队员 处在 在进攻防守 区 域 半 场 配合进攻 配合走位 图例4-13 球员学习系统流程图 部分的实现代码如下: //球员目测的距离并且记录 private void remenb(int type, double i, double j, int kind) { double a = 0; double b = 0; double number = 0; switch(kind) //根据球员目测球场的大小判断球的位置 { case 0 : number = 0; break; case 1 : number = Math.random()*50 - 25; break; case 2 : number = Math.random()*100 - 50; break; case 3 : number = Math.random()*170 - 85; } a = i + number; b = j + number; if(a > 1300) { a = 260; }else if(a < 0) { a = 0; 淮海工学院二??六届毕业设计,论文, 第42页 共52页 } if(b > 700) { b = 120; }else if(b < 0) { b = 0; } curtInfo[type][0] = a; curtInfo[type][1] = b; } //观看整个球场 private void watch(Aposition pos, ActionInfo left, ActionInfo right) { double a = pos.x; double b = pos.y; ActionInfo self = new ActionInfo(); self = setDirction(self, pos.Ldirct); for(int i = 0; i < 11; i++) //根据球场大小判断位置关系 { if( pos.x < Court.courtInfo[i][0] + 5 && pos.x > Court.courtInfo[i][0] - 5 && pos.y < Court.courtInfo[i][1] + 5 && pos.x > Court.courtInfo[i][1] - 5) { remenb(i, Court.courtInfo[i][0], Court.courtInfo[i][1], 0); }else if(jugeIn(self, Court.courtInfo[i][0], Court.courtInfo[i][1], left, right, a, b)) { double s = Math.pow(Court.courtInfo[i][0] - a, 2) + Math.pow(Court.courtInfo[i][1] - b, 2); int kind = 0; if( s < 3600) { kind = 0; }else if(s < 22500) { kind = 1; }else if(s < 62500) { kind = 2; }else { kind = 3; } remenb(i, Court.courtInfo[i][0], Court.courtInfo[i][1], kind); } 淮海工学院二??六届毕业设计,论文, 第43页 共52页 } } //计算人的移动方向所在的直线和球的移动方向所在的直线的相交位置 private double[] count(ActionInfo first, double x1, double y1, ActionInfo second, double x2, double y2) { double[] res = new double[2]; double fc = first.goalx * y1 - first.goaly * x1; double sc = second.goalx * y2 - second.goaly * x2; if(second.goalx == 0) { res[0] = -sc/second.goaly; }else { double k = first.goalx/second.goalx; double n = first.goaly - second.goaly * k; res[0] = (k * sc - fc)/n; } if(first.goalx == 0) { res[1] = (second.goaly * res[0] + sc)/second.goalx; }else { res[1] = (first.goaly * res[0] + fc)/first.goalx; } return res; } 淮海工学院二??六届毕业设计,论文, 第44页 共52页 球员学习过程中的构造函数、继承的类、包和定义的一些方法,属性等等在UML中对应图示如下: 图例4-14 UML图 在图中可以看到学习功能中,有错误处理机制Exception,用到计算方法和数组,并且有线程的Thread类。 4.5.3环境变量 球员在球场中的学习能力和数据库更新与球场的环境变量也有密切的关系。球员在实行动作之前,需要搜集球场的变化信息及计算球和其他球员的位置关系等等。 4.6游戏有待提高之处 本课题是基于Java的五人制足球游戏攻防策略的研究。我们知道,Java与网络的结合是相当好的,所以,想象可以将其设计成基于网络的适用于手机对战的网络游戏,让更多的人参与游戏。 智能体的设计方面,游戏中球员设置的是一个智能体,可以按照球场上的适时变化来改变自己的运动方向及进攻或者防守策略,但是实现的情况并不是很好。球员的学习能力很差,出现比较多的问题,而且设计中球员仍然是一个遵循一定算法在进行运行的并不能算得上是智能体。可以设置一个动态表来监视球员的行动,不断地更新其数据,让其能达到真正的学习能力最好。另外,图象的处理和场景设置方面也不能够达到游戏的最优效果。球员的带球、传球、射门等等的动作都不是十分地如意,图片还是比较生硬,感觉细节并不十分逼真。 本系统最有待改进的地方,就是能提供出一个网络平台和一个公共的对外编程接口, 淮海工学院二??六届毕业设计,论文, 第45页 共52页 方便其他的用户对游戏的开发和研究,或者进行网络平台的对战。 4.7 本章节小结 本章节是全游戏设计中最重要的环节,是游戏的详细设计阶段。主要的功能就是实现游戏的最细致的设计,从图象的实现和处理,到物理模块中的重力和碰撞模块的详细设计,再到人工智能系统中的球员学习和数据库信息采集的详细设计,主要列出的是实现代码。最后提出的是游戏的不足之处和游戏中还有待提高的主要方面。 淮海工学院二??六届毕业设计,论文, 第46页 共52页 5 游戏的设计环境和Java游戏系统特点 5.1游戏的开发环境和运行环境 本系统运行在JVM虚拟机上,对运行环境的要求就是JVM虚拟机。本人是在JBuilder2005开发环境中设计完成的。 5(2 Java游戏系统的特点及本作游戏的特点 5.2.1 选择Java游戏系统的原因 一、 引言 近来,移动游戏在提供个人娱乐方面变得越来越流行。这种流行使得移动游戏给手机用户,游戏出版商和手持设备制造者带来丰厚的利润;移动游戏,在给游戏开发者和相关人员带来无数商机的同时,处于极为重要的枢纽位置。据估计,到2009年,全世界的手机玩家有望达到两亿两千万之多,移动游戏业将被规划并扩展到一个更高层次,为手机用户和手持设备制造者带来更大的利润份额。 移动游戏可以分为三大类: ?嵌入式游戏:被硬编码到移动手持设备系统中的游戏,并随着设备一同发布。不久就会过时。例如:随着诺基亚手机一同发行的贪吃蛇游戏。 ?SMS游戏:通过发送文本消息来玩的游戏-例如,把SMS消息发送到游戏服务器-该服务器处理这些SMS消息,然后再通过SMS消息形式发送回结果。经常是以在线竞赛和测验形式出现。并不很流行,因为游戏的费用将随着把每一个SMS发送到游戏服务器而逐步增加。 ?浏览器游戏:这些游戏可以使用移动电话的内嵌微型浏览器(专用于移动设备的网络浏览器)来玩,在线或离线的方式都可以。玩家可以通过自己的手持设备或一个第三方游戏供给者的游戏Web站点的方式在线玩这样的游戏,或下载它们后离线玩。这一类游戏又有很多种类,例如单人或者多人游戏, 网络游戏,离线游戏,街机游戏,等等。 在这三种类型中,浏览器游戏是今天最流行的移动游戏类型,这是因为它们具有创新性和丰富的多媒体内容,引人入胜的表达与SMS游戏相比的低价位优势。本文将重点讨论浏览器游戏开发。今后,术语"移动游戏"在本文专指"浏览器游戏"。 移动游戏可用C++,Java(J2ME),还有Qualcomm公司的Binary Runtime Environment for Wireless(BREW)平台来进行开发。 二、 为什么选择Java进行移动游戏开发? 尽管C++能够被编译成本机代码并且可以直接存取本机系统资源,以及与BREW(它允许开发者使用任何希望的语言,包括C++,Java,XML和Flash)相结合为移动游戏开发者提供端到端的解决方案,但是Java仍然是进行移动游戏开发的最流行的选择。Java,或更精确的说是Java 2微型版本(J2ME)平台,被认为是开发移动游戏的最方便的语言。J2ME如此流行的背后动力包括: ?J2ME遵循为大多数手持设备生产商所支持的工业标准,如今大多数的移动电话都 淮海工学院二??六届毕业设计,论文, 第47页 共52页 支持Java开发。 ?J2ME是一个自由的和开放的平台。这使得开发人员投资很少,但却提供给他们必需的灵活性以及大量的支持。 ?它的高度可移植的特性保证一部为一个品牌/类型的手持设备开发的游戏应用程序,将可以工作在其它类型的支持Java的手持设备品牌/类型上。 ?它特别为小型设备进行了优化,是轻量级的,高度安全的,因为在其上开发的应用程序不能存取或者影响运行在该手持设备上的其它应用程序。 J2ME包含移动信息设备轮廓(MIDP)API,它的设计是为专门开发包括手机在内的移动设备应用程序,但切记它们的局限性和约束条件。而且,最新的MIDP 2.0版自己提供了一套完整的API以用于游戏开发,这使得游戏开发更为简单和快捷。 三、 MIDP2.0在游戏开发中的地位 MIDP2.0 API是一组具有特别性能的API,可用于开发安全的,内容丰富的多媒体应用软件,包括适合于移动设备的游戏程序。MIDP 2.0基于以前的MIDP 1.0之上并提供一个更好的开发平台以创建高效快速的移动设备应用程序。 MIDP 2.0进一步提炼了MIDP 1.0的特性和有关功能。新增添到MIDP上的重要特点之一是Game API,或更精确地说是javax.microedition.lcdui.game API包。通过该Game API,MIDP 2.0提供给游戏开发者现成的程序模块,这些模块在早期的MIDP 1.0时是你必须从头开始创建的。这些模块以类的形式提供,用于创建和控制各种游戏元素,如游戏画布、精灵、层等等(后文将介绍)。这样,MIDP 2.0大大减少了游戏开发者的创作时间。 进行游戏开发必需的另外两个MIDP 2.0 API包,它们是javax.microedition.midlet和javax.microedition.lcdui。 javax.microedition.midlet API包是开发各种类型的移动应用程序的基础。它包含javax.microedition.midlet.MIDlet类,它是所有的基于J2ME的移动应用软件的基类,它必须由所有移动应用程序的main类加以扩展后使用。非常类似于java.applet.Applet类,MIDlet类提供创建midlet程序的必要的资源。 javax.microedition.lcdui API包是开发各种类型的移动应用程序的用户接口所必需的。这个API提供类来创建和控制UI部件(例如屏幕,表单,文本框,单选按钮,等等)并且处理包括游戏在内的移动应用程序的输入。有使用AWT和SWING GUI开发经验的开发者会发现javax.microedition.lcdui包中的元素非常相似于这些API中的元素。 5.2.2 本作游戏的特点介绍 1.智能化: 本作游戏的一大特点就是智能系统的设计。包括球员的学习、互相合作等功能,也包括仿真系统的设计; 2.面向对象: Java本身就是面向对象的:Java吸收了C++面向对象的概念,将数据封装于类中,实现了程序的简洁性和便于维护性,使程序代码可以只需一次编译就可反复利用。游戏的界面及 淮海工学院二??六届毕业设计,论文, 第48页 共52页 游戏内容都是针对广大足球游戏爱好者的乐趣来设计的,主要使玩家能贴切地感觉到游戏的乐趣。 3.健壮性: Java语句本身就致力与检查程序在编译和运行时的错误,并自动回收内存,减少了内存出错的可能性。Java取消了C语言的结构、指针、#define语句、多重继承、goto语句、操作符、重载等不易被掌握的特性,提供垃圾收集器自动回收不用的内存空间。 4.可移植性: Java引进虚拟机原理,并运行于虚拟机,实现不同平台之间的Java接口。Java的数据类型与机器无关。所以本作游戏可移植性也非常好。 5.其他: 游戏中加入了许多其他的亲和设计,比如游戏的解说,球场的音效等等。 5.3 本章节小结 通过前期的游戏设计,可以看出最适合设计本游戏的语言是Java语言。对Java语言的系统介绍,加深对Java语言的了解。并对游戏的设计环境和运行环境进行介绍,强调游戏的特点。 淮海工学院二??六届毕业设计,论文, 第49页 共52页 6 用户使用手册 6.1系统功能及用户简介 6.1.1系统功能 《基于Java五人制足球游戏的研究与开发》是一个利用Java语言编程的小游戏,希望可以将其制作成为一款受机上的浏览器游戏。 主要功能模块包括:图象系统、声音系统、渲染系统、物理系统和人工智能系统。 通过本游戏,游戏者可以以裁判的视角观察到虚拟球员带来的精彩过人、盘带、射门等动作,带来一种视觉和身心的享受。 6.1.2 系统运行环境简介 (1)运行平台:JVM虚拟机 (2)开发工具:JBuilder2005 (3)操作系统:Windows95以上 6.2 系统运行与操作指南 本系统是一款无须手动操作的简易游戏,使用方法简单方便,界面友好。使用者可以在可执行文件的目录下,执行biye.jar文件即可。 淮海工学院二??六届毕业设计,论文, 第50页 共52页 结 论 本课题详细描述了整个足球游戏的制作方法、内容、代码和其攻防策略。从其发展的背景介绍起,详细介绍了其发展现状和发展前景,再通过需求分析得出课题研究的需求,从系统分析初步规划程序的系统模块,直到最终的详细设计得出最终结果。整个系统严格按照软件工程的规划思想完成。 如今,机器人足球的研究已经赢得了学术界的广泛认同,一些有影响的学术刊物例如The Journal on Robotics and Autonomous System,The International Journal of Intelligent Automation and Soft Computing等都出版过机器人足球专辑,一些重要的国际学术会议也都进行过这方面的专题讨论。如今,这方面的研究已经能够反映出一个国家整体的科教水平,也能体现一个国家的整体国力。个人的研究微不足道,希望能通过一些些介绍,让更多的读者投身到为我国的机器人足球发展的事业中来。 虽已经完成全部工作,但是其间的错误由于个人水平能力有限,仍可能存在很多不足之处。望老师和同学,包括阅读此文的所有读者能够给予指正,我一定接受并细心改正,感激不尽。 淮海工学院二??六届毕业设计,论文, 第51页 共52页 致 谢 首先感谢细心指导我的导师赵启升老师,正是由于他的细心教诲和严格督促才能使我顺利完成此次的毕业设计及完成论文的撰写,学生对此深表感激。还要特别感谢学长对我的关心和支持,谢谢他给出的指导意见。感谢周围的同学在毕业设计期间给我的意见和建议。 另外,需要感谢计算机系负责此次毕业设计的所有老师和领导。正是由于他们的悉心关怀,为我们提供完成毕业设计的良好环境,才能使得我们按时完成毕业设计的内容和毕业论文的撰写。特别感谢伍俊明老师在毕业设计期间对我们全体毕业生的督促和指导。 最后,谢谢在毕业设计期间给予我关心的所有家人,老师和同学。谢谢你们对我的关爱和支持,希望能以优良的面貌回报你们,忠心感谢。 淮海工学院二??六届毕业设计,论文, 第52页 共52页 参 考 文 献 [1]林邦杰. JSP交互网站实务经典. 北京:中国青年出版社,2001年 丁友东. Java图形与动画编程实例.北京:清华大学出版社,2003年 [2]李敏 [3]David Brackeen. Java游戏编程.北京:科学出版社,2004年 [4]Ralph Morelli. Java面向对象程序设计.北京:电子工业出版社,2004年 [5]荣欣科技.Java2游戏设计.清华大学出版社,2004年 [6]印 旻.Java语言与面向对象程序设计.湖南人民出版社,2001年 [7]Bruce Eckel. Java编程思想(第3版).机械工业出版社,2006年 [8]张海潘.软件工程导论. 清华大学出版社,2003年 [9]David Brackeen. Java游戏编程.北京希望电子出版社,2004年 [10]吴其庆.Java编程思想与实践.冶金工业出版社,2002年 [11]段兆麟.Java网络编程.国防工业出版社,2001年 [12]宋宪锋.趣味程序导学Java2.清华大学出版社,2002年 [13] 飞思科技产品研发中心. Java2应用开发指南.电子工业出版社,2002年 [14]王胜捷. Java程序设计.机械工业出版社,2002年 [15]Brett spell. Java专业编程指南.电子工业出版社,2001年
本文档为【毕业设计(论文)-基于Java的五人制足球游戏攻防策略的研究与实现】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_260251
暂无简介~
格式:doc
大小:235KB
软件:Word
页数:0
分类:
上传时间:2018-04-05
浏览量:12