




已阅读5页,还剩1页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
装订线毕业设计(论文)报告纸棋类游戏开发框架的探索Animal Kingdom之设计与实现软件工程 陈犇 指导老师 张晨曦【摘要】 Animal Kingdom(以下简称AK)本是由同济大学本科生在2005年自行开发的运行在Mac OS X平台下的棋类游戏。该作品曾获2006年苹果中国学生开发挑战赛第一名。本课题的目标是分析原有设计中存在的缺陷,并尝试设计出一套通用的、适用于绝大多数棋类游戏的开发框架。笔者,也是AK的原主要开发者,结合自身在美国苹果公司的子公司的实习时所积累的经验和学习到的设计原则,并在对市场上同类产品进行比较的基础上,对原有设计中存在的缺陷进行了系统的分析。同时,笔者对棋类游戏的共同性进行了一定的研究,在UML的帮助下,设计出了符合目的大致框架。在重构AK的过程中,适逢Apple推出了iPhone SDK的测试版本。在没有对项目做太大改动的前提下,笔者成功的将新框架下的AK移植到iPhone平台,使AK在共享大多数代码的同时,可以部署到两个不同的平台。同时,笔者使用到了Mac OS X 10.5 Leopard的一些新功能,如Core Animation。【关键词】 棋类游戏 苹果 以此类推【外文摘要】 This article describes the development process of Animal Kingdom.Refactoring is the key.【外文关键词】 Mac OS X Leopard board game1引言21.1Animal Kingdom的由来21.2AK开发中所遇到问题21.3课题的目标22同类软件的比较22.1Othello的启示22.2一个Java棋类游戏的启示22.3Big Bang Chess简介23问题分析与设计指导方针23.1老版AK存在的问题分析:违反的设计原则等23.2新设计:设计原则,UML图等等24开发环境与使用到的技术25各模块的具体实现25.1AI部分,同时说明棋类游戏通用性25.2人机交互部分25.3多媒体部分25.4移植到iPhone平台26开发流程27可能的改进与展望3谢 辞3参考文献31 引言1.1 Animal Kingdom的由来1.2 AK开发中所遇到问题1.3 课题的目标2 同类软件的比较要对原先AK设计上的失误有一个深入和彻底的了解,只分析AK本身是不够的。因此,笔者参考了类似的棋类游戏,并从技术和功能两个方面分析(fixme: 扩展这段)。2.1 Othello的启示Othello1是笔者在瑞典Uppsala大学交换学习时,Logic Programming课程的最终项目。该项目是使用Prolog语言(fixme:或许需要简短介绍),对Othello游戏(也就是黑白棋)进行实现。Logic Programming用于实现棋类游戏AI所需要的回溯算法有其独到的简洁之美,不过该项目更值得借鉴的,是其对接口的设计。为了让学生的项目能够和由老师事先做好的标准的程序进行对战,同时能够让游戏有一个图形界面,而不必让学生将大部分时间花在图形界面上,Uppsala大学的老师设计了一套简单但足够通用的接口,可以让学生的命令行程序简单了整合到一个带有图形界面和标准AI程序的框架里。接口由如下predicates(LP当中自程序的名称,类似与命令式语言中的函数)构成,下面的“+”表示输入,“-”表示输出。 initialize(+Side, -State) 如果程序是Side一边,那么最初的棋盘状态由State表示。initialize在程序开始会被调用一次。 best_move(+State, -Move) State表示当前棋盘的状态,Move表示由算法生成的,基于当前状况下的最佳的一步棋。 move(+Move, +State, -NewState) Move表示程序自身走的一步棋,State表示当前棋盘的状态,而NewState是在下了Move这步棋后,棋盘会变成的状态。 opponent_move(+Move, +State, -NewState) 这个predicates于move/3基本相同,唯一的差别是Move是由对方所下。 game_over(+State, -Winner, -Whites, -Blacks) 这个predicates为真的条件是:State是一盘棋的最终状态,Winner是赢家,Whites和Blacks各为白、黑棋子最终的数量。学生的程序,只要正确的实现以上的语句,就能够被整合到测试系统中,与标准程序进行对战。这里,笔者不详细介绍具体数据结构的实现数据结构可以因语言而异,而只着重在这个接口所代表的一种设计理念理念则是四海皆通的。这个接口的好处是,客户端(学生的程序)不需要知道任何图形界面的细节,甚至不用自己维护棋盘的数据结构表示,而只用根据当前的输入信息,计算出合理的输出信息。在对AK的算法模块进行重构的过程中,笔者借鉴了Othello这样的接口设计理念,然而,这样的接口设计也并不是完美的。Othello的图形界面比较简单,没有多少人机交互的操作。比如只要棋盘上有空的格子,那么当前的棋手必定可以在那一格走棋,图形界面也不用追踪鼠标的位置来提示用户哪一个可以下棋。然而在AK中,人机交互则是非常频繁的,用户甚至可以将一个棋子拖拽到棋盘上的另一个位置。这就要求算法部分提供额外的信息,指明哪些棋子是可以被移动的、被选中的棋子可以移动到哪一格以及哪些空格上可以下新的棋子等等。另一方面,稍微高级一些的AI算法会根据历史纪录来调整走棋的策略,这就需要算法模块自身储存棋盘的状态信息。在这个前提下,Othello由server统一保存棋盘信息的模式就不再适用。2.2 一个Java棋类游戏的启示Othello的接口设计虽然很具有借鉴性,但其没有运用到面向对象的设计思想,而AK的设计语言是Objective-C(一款建立在C语言基础上的,面向对象的语言)上的。因此,分析一款由面向对象语言实现的棋类游戏就显得很有意义。Four in a row2是一款基于Java的,使用Applet实现图形界面的简单棋类游戏。虽然程序本身不复杂,但其设计思想也很值得借鉴。有两点最值得一提:一是程序定义了一系列的抽象类,用于描述棋盘信息和规定player的行为;另一点是该程序采用了监听者的设计模式,这使得各个模块之间可以以一种低耦合的方式进行沟通。AK的新算法模块设计基本上借鉴了这样的设计思想:笔者定义了一系列Objective-C protocol,以供具体的实现类来继承。同时其他模块可以通过Key-Value Observing3的方式监听算法模块,以获知算法模块合适计算好了下一步棋。算法模块可以在一个单独的线程里进行计算,这样图形界面部分不会被中断。2.3 Mac OS X具代表性的应用程序的对比除了在技术层面对类似的程序进行分析和比较,也需要对同类成功的产品进行比较。在Mac OS X平台上,最著名的棋类游戏当属来自Freeverse公司的Big Bang Board Games。与所有成功的游戏一样,BBB有着吸引人的图形界面,可爱的动画人物以及滑稽的音效等等。但最为Mac OS X平台独占的游戏,BBB与操作系统紧密结合,使用到了许多OS X独有的技术,极大的丰富了用户体验。不过更值得一提的是,BBB是一个系列的游戏,其包括黑白棋、国际象棋等著名的棋类游戏。当这一系列的游戏都有一个统一的框架,其界面风格、音效都类似,其内部必定以某种方式共享了许多代码。很遗憾的,BBB是一款商业软件,其代码不是开源的,笔者不能深入的研究其内部架构。当这种多种游戏共享一个框架的概念,引领着笔者去寻找在Mac OS X平台上类似的构架的应用程序。Adium是一款在Mac OS X平台下十分流行的、开源的聊天软件客户端。其特点是通过利用同样为遵循GPL协议的libpurple库来兼容许多种聊天协议。但使Adium与其他libpurple的软件所区别开来的,是其独到的用户界面、音效和其最值得一提的一个特性:允许用户从网上下载各种各样的美化界面的插件(Xtras)。如果我们将这样的概念应用到棋类游戏的设计中,那将会非常的有趣:用户的自定义或者从网上下载不同的插件以更改棋类游戏的外观,甚至定义一个新的游戏。这也正是新AK的一个设计目标。3 问题分析与设计指导方针3.1 老版AK存在的问题分析:违反的设计原则等通过与同类应用程序的对比,老AK的问题有:算法模块的设计不佳、整体框架缺乏合理设计、扩展性差等。具体说来,老版AK违反了以下设计原则4: Open-close原则。若要添加新功能,或是修改部分代码,AK的许多部分都要同时被修改,可谓牵一发而动全身。这个显然违反了open-close原则(模块的设计应该对于修改是封闭的,对于扩展则是开放的)。 Single-responsibility原则。许多老AK的类实现了太多的功能。3.2 新设计:设计原则,UML图等等新AK的设计的原则是尽可能的将各个模块区分开来。作为棋类游戏,最关键的模块之一,自然是算法模块,所以新的设计也送这个里开始。新的算法接口采用Objective-C的protocol(类似Java里的interface)来定义:protocol AKPlayer property (readonly)AKSideIndexside;property (readonly)AKMovebestMove;- (id)initWithSide:(AKSideIndex)anIndex numOfPlayers:(unsigned)playersCount;- (void)backToInitialState;- (void)thinkNextMove;- (BOOL)performMove:(AKMove)newMove;optional- (BOOL)canUndoLastMove;- (BOOL)undoLastMove;endAKStateMaintainer的定义如下:protocol AKStateMaintainer property (readonly, copy) NSArray* eliminatedPieces;property (readonly, copy) NSArray* createdPieces;property (readonly, copy) NSArray* movedPieces;property (readonly) AKSideIndex nextPlayerSide;property (readonly, copy) NSArray* winners;- (void)backToInitialState;- (BOOL)performMove:(AKMove)newMove;- (NSArray*)reachableCellsForPiece:(AKPiece)piece; - (NSArray*)newPiecesAtCell:(AKCellIndex)cell;- (AKPiece)moveablePieceAtCell:(AKCellIndex)cell;endAKPlayer并不知道有AKStateMaintainer的存在,因而并不依赖于它。技术上来讲,完全可以有另一个对AKPlayer有兴趣的模块与之进行交互。这里需要注意的是thinkNextMove函数是立即返回的,这给了AKPlayer在另一个线程里计算下一步的机会。而其他模块可以监听AKPlayer的move property,以获知合适AKPlayer计算好了新的一步棋。另外,这个protocol不只可以被算法模块实现,同样也可以被用于人机交互的模块实现。这样,AKStateMaintainer也不需要知道每个AKPlayer是算法还是真正的玩家。两者交互的UML顺序图如下:(fixme: diagram needed)整个系统的类关系UML图如下:(fixme: diagram needed)4 开发环境与使用到的技术这一章介绍使用到的开发工具,与关键技术等。5 各模块的具体实现以下部分应充分使用UML图。5.1 AI部分,同时说明棋类游戏通用性5.2 人机交互部分5.3 多媒体部分5.4 移植到iPhone平台6 开发流程笔者尝试了以开源软件的方式与世界各地的开发者进行合作5。类似敏捷软件开发的增量式开发模型,每一个版本都是可运行的。7 可能的改进与展望网络对战使用OpenGL参考文献1.Othello. cited; Available from: http:/www.it.uu.se/edu/course/homepage/logpro/allcourses/othello-text/othello-eng.ps.2.Bridges, S. Four in a row. 1999 cited; Available from: /ResearchTriangle/System/3517/C4/source/C4Source.html.3.Key-Value Observing Programming Guide. 2006 cited; Available from: /do
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 护理烤灯考试题及答案
- 教育评价类型题库及答案
- 考试高分阵法题目及答案
- 东南亚跨境电商市场跨境电商平台数据分析与用户画像报告
- 将进酒课课件
- 封闭式安全培训方案课件
- 导医安全培训心得课件
- 爱男友考试试题及答案
- qc知识考试试题及答案
- it考试题目及答案
- 河南科学技术出版社六年级劳动与技术上册教案(全套)
- 部编道德与法治四年级上册教材分析解读
- 西宁金鑫气体有限公司湿法工艺生产溶解乙炔气项目环评报告
- 广东省工商局授权委托书格式
- 高中音乐-保卫黄河(钢琴协奏曲《黄河》第四乐章)教学课件设计
- 新生儿窒息复苏新进展简
- 北师大版七年级数学上册《生活中的立体图形》第2课时示范公开课教学课件
- 深圳大学 答辩3
- 耳尖放血课件完整版
- 2023年湖南高速铁路职业技术学院单招职业适应性测试题库及答案解析
- 手术病人病情观察能力培养业务学习专家讲座
评论
0/150
提交评论