基于android系统的手机游戏设计与实现论文

基于android系统的手机游戏设计与实现论文

ID:6194131

大小:831.00 KB

页数:23页

时间:2018-01-06

上传者:U-1035
基于android系统的手机游戏设计与实现论文_第1页
基于android系统的手机游戏设计与实现论文_第2页
基于android系统的手机游戏设计与实现论文_第3页
基于android系统的手机游戏设计与实现论文_第4页
基于android系统的手机游戏设计与实现论文_第5页
资源描述:

《基于android系统的手机游戏设计与实现论文》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

基于Android系统的手机游戏设计与实现毕业论文目录摘要IABSTRACTII第1章绪论51.1背景51.2提出问题51.3本文组织结构6第2章相关技术介绍72.1Java72.1.1Java介绍72.1.2JavaVSC++72.1.3开发工具72.2Android平台82.2.1Android体系构架92.2.2Android系统核心102.3人工智能10第3章系统设计123.1总体设计123.2模型建立133.3控制模块设计133.4显示模块设计143.5人工智能设计1520 第4章系统实现164.1细化的设计描述164.1.1游戏初始化模块174.1.2主控制模块184.1.3落子模块194.1.4胜负判断模块204.2人工智能算法204.3实现效果21第5章总结与展望23参考文献24致谢2520 第1章绪论第1章绪论1.1背景智能手机有Symbian、WindowsPhone、Android、IOS、BlackBerry10这些系统。Android系统鹤立鸡群占据着巨大的市场份额,随着人们接触的手机时间越来越长,针对Android系统的程序和游戏层出不穷。每个手机都有手机游戏,是人们闲暇时间的一种娱乐方式,而因为Android的巨大市场份额,Android平台下的手机游戏更是受到青睐。手机游戏不仅操作方便,还能开发思维,让用户在休闲的同时拓展了思维增长了见识。手机的小巧便捷,方便的特性成为我们日常生活中必备通讯工具。拥有巨大市场空间的手机平台游戏会着智能手机的普及和应用必然会迎来新一轮的热潮。在新一轮的热潮中,Android手机客户量大,所以手机小游戏的发展空间很可观。1.2提出问题五子棋对思维和协调能力有益,能使我们集中精力,对于事务的耐心也得到了提高,培养我们的逻辑思维能力,对智力以及记忆都很有帮助。本文围绕着五子棋小游戏展开Java和Android的相关技术介绍,并把整个Android平台下五子棋的设计展示出来。把整个五子棋设计分为初始化模块、主控制模块、落子模块、胜负判断模块和人工智能模块。各个模块分工不同,把整个小游戏完善起来。设计的重点是人工智能模块,进而实现人机对战。设计中的人工智能是利用遍历的方法进行三次搜索,综合考虑当前局势从中选出最佳位置下棋,但不足之处是没有考虑到极大值极小值问题。开始游戏就直接进入主界,主界面用了一个TextView来说明怎样来进行游戏,根据用户触发相应的操作开始不同的对战方式。在游戏中,用画线来布满整个的手机屏幕,并且设定各个线相交的可触摸点和处理分析用户的触摸从而实现落子。在结束后用TextView来进行了文字的说明和提示。20 第1章绪论本文的主要目的是实现Android平台下的五子棋,使我对Android有更好的应用水平和为以后的软件设计道路打下坚实的基础。1.3本文组织结构本文是以Android平台下的五子棋游戏设计为核心,总共划分为五章。第一章是整篇论文的概述,大致说明智能手机、手机游戏、五子棋小游戏的相关背景,以及设计中各个模块的需求。第二章对编程用的语言平台进行相关的技术介绍。在第三章中对整个游戏进行总体设计说明各个模块的设计方向。第四章把每个模块的功能具体化,提供对应的流程图或者伪代码。在论文的结尾进行总结。20 第2章相关技术介绍第2章相关技术介绍2.1Java现今计算机编程语言种类繁多,例如C++、VB、BASIC、PASCAL。而Android利用的是Java语言2.1.1Java介绍Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言Java技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。因为有了移动互联网全球化和云计算,Java有更好的优势和前景。Java编程语言是个简单、面向对象、分布式、解释性、健壮、安全与系统无关、可移植、高性能、多线程和动态的语言。Java平台有JavaEE、JavaSE、JavaME这三种版本。2.1.2JavaVSC++Java设计的本意是要简化C++,但它在嵌入式系统中的成功C++无法比拟,它具有强大的网络功能使得它在网络编程和嵌入式系统中独占鳌头。C++运行效率高,可以对具体的平台进行优化;Java的开发效率高,移植性好。应该根据具体的应用要求,选择合适的开发工具。在执行效率高的应用面前,C++比较有优势。Java的优势体现在更新换代快,使用人数多的应用软件上。2.1.3开发工具现在常用的Java项目开发环境有:JBuilder、VisualAgeforJava、ForteforJava,VisualCafe、Eclipse、NetBeansIDE、JCreator+J2SDK、JDK+记事本、EditPlus+J2SDK等等。现今Eclipse应用广泛、功能强大,而且还可已按自己的需要下载各种插件来扩展它的功能,所以本设计选用的工具是Eclipse。Eclipse20 第2章相关技术介绍是一个开放源代码的、基于Java的可扩展开发平台。Eclipse是利用各种插件来建立开放环境从而提供框架和服务的。Eclipse附带了一个标准的插件集,包括Java开发工具JDK。被应用最多的JavaSDK就是JDK了。Java的运行环境、工具、基础类库都需要以JDK为基础。Eclipse的开发环境如图2-1所示:图2-1:Eclipse的开发环境2.2Android平台手机与人们的生活息息相关,形形色色的手机充斥着全球的手机市场。各种手机平台竞争此起彼伏。市场上比较常见的手机平台有塞班、WindowsPhone、IOS、BlackBerry10、Android这五种。塞班这个操作系统广泛应用与诺基亚手机,但由于缺乏创新,塞班面临着各种困境。WindowsPhone是微软发布的一款手机操作系统,它将微软旗下的XboxLive游戏、XboxMusic音乐与独特的视频体验整合至手机中。IOS是由苹果公司开发的手持设备操作系统。IOS操作系统简洁易上手,能不断给用户不同的用户体验。BlackBerry10,是黑莓公司的手机系统,20 第2章相关技术介绍只有黑莓手机利用这种系统,市场份额不大,但是有一批忠实的客户。上述四种平台,不是发展时间短就是市场份额低,而Android一枝独秀,它是Google于2007年11月05日宣布的基于Linux平台的开源移动操作系统的名称,该平台由操作系统、中间件、用户界面和应用软件组成。Android的架构分底层、中层、上层三部分。底层只提供基本功能,利用C语言开发的Linux被当作基础;中间层的结构是由C++开发的函数库Library和虚拟机VirtualMachine。最上层是各种由不同公司开发的软件。2.2.1Android体系构架【引用】在AndroidSDK中,定义了让开发者使用与核心应用程序相同API的权限。但要被应用程序架构的安全机制限制,使用者以用同样的机制来新增、置换组件。目前所有的应用程序是由服务及系统来组成,包含有:内容提供者、资源管理器、通知管理器、活动管理器、视窗管理器、位置管理器、电话管理器、包管管理器。具体的框架如图2-2所示:图2-2:Android架构的五个部分一些C/C++的类库被Android使用,使用这些类库的组件各不相同20 第2章相关技术介绍。这些功能可以通过应用程序框架被开发者使用。包含以下核心类库:surfaceManager、3Dlibraries:SGL、MediaFramework、FreeType、SSL、SQLite:SQLite、webKit、libc。虽然Android开发、撰写应用程序是利用Java语言,但不使用Java相应的组件来运行程序,而是利用Google开发的Android组件运行。核心类库和Dalvik虚拟机是Android运行时的两个重要的部分。2.2.2Android系统核心一个应用程序可以利用其它应用程序的元素是Android的主要特点。应用程序发出请求的时候,不管它请求的是哪个部分,系统都应该能启动这些进程而且要把它的Java对象实例化。Android应用程序的入口点可能不止一个。实例化和运行所需要活动、服务、广播接收者、内容提供者这四种组件。如图2-3所示:图2-3:实例化和运行所需组件不是所有的应用程序都一定需要这四种组件,可能只有一个或者几个组成。确定了要用什么组件的话,就应该把所需要的组件列在AndroidManifest.xml文件中,在这个文件中你可以声明应用程序组件以及它们的特性和要求。2.3人工智能人工智能是一种新的技术科学,是计算机科学的一个分支。它能产生出模拟人类智能的反应,根据不同算法把各种人类模拟完善。在人工智能方面,一般有极大极小树、剪枝、深度优先搜索这三种方法。20 第2章相关技术介绍目前绝大部分的博弈类游戏中的人工算法都采用极大极小树这种方法。假设己方为MAX点,对方则为MIN点。如果当层的节点为奇数时那么就为MAX层,同样为偶数时就为MIN层。当在MAX层时,该层的值就应该为下一个MIN层中的最大一个的值。当在MIN层是,该层的值就应该为它子层MAX的最小的一个。深度优先搜索与广度优先搜索的区别在于下一个节点的选择。DFS先选择好节点,如果下个节点不存在或者都已经遍历过了,就向上返回到上一个节点,在遍其他的未被访问过的点。很容易想到这要用到堆栈结构,使用一个递归来实现。而BFS则是逐个的遍历它的联接接点,将已经访问过的点放入队列中。然后再依次取出继续这个过程。不必要的节点可以被Alpha---Beta剪枝去除,并且去除了这些节点也不会影响结果。20 第3章系统设计第3章系统设计3.1总体设计该设计是Android平台下的五子棋游戏。本游戏略过了欢迎界面直接进入程序主界面。系统的总体设计模型如图3-1所示:图3-1:总体设计模型该游戏又分为以下几个模块:初始化模块、主控制模块、人工智能模块、落子模块、胜负判断模块。相应的数据流动如图3-2所示:图3-2:系统主流程图20 第3章系统设计3.2模型建立五子棋分黑白两种颜色,若那种颜色首先在横、竖、左斜、右斜这任意方向大于等于五个棋子,就胜利了。所以,该游戏模型的重点就在于棋盘和棋子。流程如图3-3所示:图3-3:模型建立流程传统的五子棋的棋盘为15×15,我所绘制的棋盘不仅限于15×15,而是根据游戏界面的大小自动调整的。所以就必须设置棋盘上每个点的大小,从而计算出游戏界面上的横竖坐标。首先画出棋盘的框架,再根据计算出的横竖坐标,产生棋盘上所有的线,这样棋盘模型就建立好了。棋子就应该利用方法与设置好的点对应,通过对点的属性修改载入相应的棋子模型,棋子模型就建立好了。3.3控制模块设计控制模块分为主控制模块、胜负判断模块、落子模块中的处理分析部分。控制模块如图3-4所示:20 第3章系统设计图3-4:控制模块设计主控制模块被用来转换下棋的顺序,当下棋顺序到了某一方的时候,把整个数据和流程转到响对应的模块里。胜负判断模块将根据预先设定的规则,判断游戏胜负。玩家与电脑落子模块中的处理分析部分是把用户点击界面的事件接收后进行处理分析。3.4显示模块设计游戏界面初始化模块、落子模块中的接收点功能与显示棋子功能都属于显示模块。显示模块设计如图3-5所示:图3-5:显示模块设计运行游戏用户直接进入主界面,初始化模块运行,用户将看到主界面上的棋盘与选择游戏模式的提示窗口。用户选择游戏模式后,提示框将消失,游戏开始。20 第3章系统设计落子模块接受用户的触摸,在棋盘上对应的位置显示出棋子。游戏胜利后再弹出提示窗口说明胜负,并提示如何继续进行游戏。3.5人工智能设计本游戏的人工智能是根据五子棋下法的特点从而计算出最佳的落子位置,或防守或进攻,从而达到胜利的目的。人工智能总体的流程是:人机对战游戏开始,轮到手机落子的时候先计算搜索范围,清空上一轮搜索结果。进行第一次搜索,扫描所有空白点是否在搜索范围内,判断是否可能连成五子,是否为活1、半活2,抛弃该点是否有一方即将胜利。接着进行第二次搜索,在即将胜利位置落子,不再往下分析。判断是否有一方可以制造出活4是否整理出可以制造活3,半活4等棋型的位置,在制造活4处落子,不再往下分析。最后进行第三次搜索,找出最佳落子位置落子。将在第4章的人工智能详细介绍里给出人工智能计算的流程图。20 第4章系统实现第4章系统实现4.1细化的设计描述启动游戏后直接进入主界面,在主界面上有提示窗口选择游戏模式。选择游戏模式是根据手机键盘的方向键设定的。游戏主界面的类图如图4-1所示:图4-1:游戏主界面类图Chessboard继承自IChessboard,在IChessboard中定义了三种方法分别是:取得棋盘最大纵坐标,取得棋盘最大横坐标,取得当前所有空白点。有了取得棋盘最大横纵坐标的方法,才可以计算出棋子的位置。而有了取得当前所有空白点的方法,棋盘上的这些点才可以下。20 第4章系统实现4.1.1游戏初始化模块在游戏初始化模块中,定义所有需要用到的函数和方法,使整个主界面得以运行。初始化模块又分为显示模块初始化、控制模块初始化、数据模块初始化。显示模块初始化l创建画笔对象l创建用于提示输赢的文本控件l建立不同颜色的Bitmap数组,使颜色为黑、白两种颜色l初始化好黑、白两种颜色的点l定义所有未下的空白点数据模块初始化l设置点的大小l定义屏幕右下角的坐标值,即最大坐标值l初始横线和竖线的数目控制模块初始化l定义可开局状态l定义已开局状态l定义已结束状态并且输出胜负。l把当前状态默认为可开局状态l初始化空白点集合l创建玩家一并且默认为人类玩家l玩家二根据选择的游戏模式进行初始化,若是电脑玩家调用Ai接口,若是人类玩家则再定义一个人类玩家l创建方法强制使面板元素接收焦点4.1.2主控制模块20 第4章系统实现主控制模块被用来转换下棋的顺序,当下棋顺序到了某一方的时候,把整个数据和流程转到响对应的模块里。利用whoRun来设置玩家下棋的状态。whoRun=1时玩家一下棋,whoRun=2时玩家二下棋。首先判断玩家是否取得胜利,如果胜利则直接输出结果,若没有胜利就轮到对手下棋。部分伪代码如下:if(玩家一没有胜利){if(玩家二是电脑){发送电脑下棋信息,并且10毫秒后才给玩家2下棋}else{玩家二下棋;}}else{输出玩家一胜利;}首先判断玩家一是否胜利,若没胜利则可以落子。在玩家二落子之前先判断是否是电脑落子,如果是电脑落子则根据接收到的触摸信息进行落子(在落子模块中再详细介绍)否则玩家二落子,而如果玩家一赢了则不再下棋跳到已结束状态并输出胜负结果。将流程转移到玩家一落子与上述方法基本相同,先判断玩家二是否胜利,若没胜利则玩家一落子,否则不再下棋跳到已结束状态并输出胜负结果。部分代码如下:if(玩家二没有胜利){玩家一下棋;}else{输出玩家二胜利;}20 第4章系统实现4.1.3落子模块在初始化模块中已经设置好点的大小和模型,在落子模块中就要把玩家或者电脑所要下的棋子显示在游戏界面中。人类玩家落子首先根据触摸点找到棋盘上对应的点,接着再判断这个触摸点是否可以下棋,若可以下棋则正在下棋状态,该状态下不可以再响应其它触摸事件,进入正在下棋状态后利用IPlayer接口里的run方法把棋子数据放入可下棋的触摸点位置,最后刷新一下棋盘,棋子就显示在棋盘上对应的位置了。部分伪代码如下:privatevoidplayer1Run(MotionEventevent){Pointpoint=newPoint(event.getX(),event.getY());if(该点为空白点且可落子){设置为正在下棋状态;//这期间一定不可以再响应触摸事件玩家一下棋;刷新棋盘;}}而电脑落子首先判断是否是电脑落子,如果是电脑则利用继承自Handler的方法发消息触发handleMessage函数,而在电脑接收到触发消息后,根据人工智能计算出的最佳位置电脑走一步棋子,接着刷新一下棋盘,电脑要下的棋子就显示在棋盘上了。部分伪代码如下:publicvoidcomputerRunAfter(longdelayMillis){this.removeMessages(0);发消息触发handleMessage函数;}publicvoidhandleMessage(Messagemsg){玩家二下棋;刷新棋盘;};在刷新棋盘的时候都需要触发onDarw方法,onDarw就是把玩家或者电脑下的棋子显示出来的方法,把玩家一和玩家二的棋子利用canvas方法把对应棋子图片放入棋盘,并把上一次下的棋子和新下的棋子区分开。20 第4章系统实现4.1.4胜负判断模块BasePlayer实现IPlayer这个接口,重写了hasWin()、setChessboard()、ListgetMyPoints()这三个方法。hasWin()就是判断判断胜负的方法,即总体设计中的判断胜负模块。首先定义我已下的棋子protectedListmyPoints=newArrayList(200);再创建一个boolean类型的函数,判断在横、竖、左斜、右斜四个方向的棋子个数是否大于等于五,若棋子个数大于等于五则胜利。判断胜负流程如图4-2所示:图4-2:判断胜负4.2人工智能算法把算法分为三次搜索。第一次搜索把玩家第一步棋的边界加1,前提是初始化搜索范围。接着遍历双方棋子,若棋子在搜索范围内,则不作改变。若棋子不在搜索范围之内,就需要修改搜索范围使之在搜索范围内。把黑白双方的第一次搜索结果分开分析可以缩短搜索时间。第二次分析,主要是是分析第一次搜索的结果,第一次搜索结果会把一步棋在各个方向的结果生成相应对象,通过第二次搜索就将这些生成的对象合成一个对象。如果进行到第三次测试,说明双方都没有可进攻的活4或者双活4。20 第4章系统实现首先进行防守判断,若人类玩家的棋局不会对电脑造成威胁,判断顺序是玩家是否有活4,玩家是否有双活3,玩家是否有冲4,玩家是否有冲双活3,若不需要防守就进攻,先找电脑能否制造活4,没有就找双活3,没有双活3就找冲4,没有冲4就找单活3,没有的话就只能找活2了。最后选择最优位置下棋。人工智能的流程如图4-3所示:图4-3:人工智能流程20 第4章系统实现4.3实现效果运行程序直接进入游戏主界面,游戏主界面如图4-4所示:图4-4:游戏主界面进入游戏主界面后可以根据提示窗口进行游戏模式的选择。游戏结束后的效果如图4-5所示:图4-5:游戏结束效果从图4-5可以看出,当黑色或者白色棋子在横向或者斜向连成大于等于5个棋子的时候,连成的那一方就胜利。并且游戏界面的边界都得以限制,不会出现数据溢出现象。20 第4章系统实现第5章总结与展望在本次游戏的设计中,将游戏设计成人人对战和人机对战两种模式。采用监听按键方法快速进入游戏。在设计过程中存在着不足,如没有进入游戏的按键界面,没有悔棋的按键,电脑的难易度无法控制。人工智能方面也存在缺陷,在电脑的落子只是考虑当前棋局,而没有考虑到落子之后对整个棋局的影响。这就涉及到极大值极小值问题,如果在人工智能中把极大值极小值考虑进去,就可以根据人工智能设计的程度而把人机对战分成不同的难易程度,使用户有更好的游戏体验。在以后的学习和提高中会努力学习更多知识从而完善这些功能。在游戏界面的美化,棋盘中悔棋、难易程度的选择、重新开始游戏等各种功能的实现还需进一步加强,使玩家得到更好的游戏环境和用户体验。随着3G智能手机的普及,人们对游戏的要求会越来越高。仅仅只是人机对战不足以满足用户的需求,网络对战才是今后游戏发展的目标。用户之间接收和发送信息,使五子棋游戏不仅仅局限于一台手机上。20 第4章系统实现参考文献[1]张孝祥.Java就业培训教程[M].北京:清华大学出版社,2003[2]朱福喜编著.Java语言习题与解析[M].北京:清华大学出版社,2006[3]吴其庆编著.Java程序设计实例教程[M].北京:冶金工业出版社,2006[4]E2ECloud工作室著深入浅出GoogleAndroid[M].北京:人民邮电出版社[5](美)BruceEckel.Java编程思想[M].陈昊鹏译.北京:机械工业出版社,2007[6]叶核亚,陈立著.Java2程序设计实用教程[M].北京:电子工业出版社,2003.5[7]王克宏著.Java技术教程(基础篇)[M].北京:高等教育出版社,2002.04[8]孔令德.毕业设计案例教程—从系统开发到论文写作[M].北京:国防工业出版社,2007.[9]雍俊海编著.Java程序设计习题集[M].北京:清华大学出版社,2006[10]赵毅主编.跨平台程序设计语言——Java[M].西安:西安电子科技大学出版社,2006[11]孙燕主编.Java2入门与实例教程[M].北京:中国铁道出版社,2003.01[12]赵文靖编著.Java程序设计基础与上机指导[M].北京:清华大学出版社,2006[13]柯温钊著.JAVA例解教程[M].北京:中国铁道出版社,2001.03[14]都志辉著.Java3D编程实践[M].北京:清华大学出版社,2002.11[15](美)威尔顿,麦可匹克.JavaScript入门经典(第3版).施宏斌译.北京:清华大学出版社,2009[16]EricJ.Braucle等.软件设计—从程序设计到体系结构[M].李仁发等译.北京:电子工业出版社,2007.20 致谢致谢在此论文完成之际,感谢我的指导老师刘嘉欣。每次在遇到困难的时候,我得到了指导老师的帮助,使我明确了目标与设计方向,各种难题得到解决。这次的设计使我了解到自己的兴趣所向,今后的奋斗目标得到明确,我将继续努力学习,在今后的生活和工作中更好的发挥自己的优势,学好自己选择的这项专业技术,让自己在这条路上的明天会更好。刘嘉欣老师对我的毕业设计予以悉心的指导,对我的毕业设计提出了很多建议,并细心授予写论文的心得,多次提醒注意事项,耐心的指导使我做的更完善。在此对刘嘉欣老师致以衷心的感谢。

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
大家都在看
近期热门
关闭