首页 毕业论文_Android环境下人机对弈五子棋的设计与实现

毕业论文_Android环境下人机对弈五子棋的设计与实现

举报
开通vip

毕业论文_Android环境下人机对弈五子棋的设计与实现毕业论文_Android环境下人机对弈五子棋的设计与实现 毕业论文_Android环境下人机对弈五子棋的设计与实 现 南 阳 理 工 学 院 本科生毕业设计论文 学院系: 软件学院 专 业: 软件工程 学 生: 李雪峰 指导教师: 白光远 完成日期 2012年04 月 南阳理工学院本科生毕业设计(论文) Android环境下人机对弈 五子棋的设计与实现 The Design And Implementation of Five in a Row Base on Android 总 计:毕业...

毕业论文_Android环境下人机对弈五子棋的设计与实现
毕业论文_Android环境下人机对弈五子棋的设计与实现 毕业论文_Android环境下人机对弈五子棋的设计与实 现 南 阳 理 工 学 院 本科生毕业设计论文 学院系: 软件学院 专 业: 软件工程 学 生: 李雪峰 指导教师: 白光远 完成日期 2012年04 月 南阳理工学院本科生毕业设计(论文) Android环境下人机对弈 五子棋的设计与实现 The Design And Implementation of Five in a Row Base on Android 总 计:毕业设计论文 27页 表 格: 0个 图 片: 14个 南 阳 理 工 学 院 本 科 毕 业 设 计论文 Android环境下人机对弈 五子棋的设计与实现 The Design And Implementation of Five in a Row Base on Android 学 院系: 软件学院 专 业: 软件工程 学 生 姓 名: 李雪峰 学 号:068108053 指导教师职称: 白光远 讲师 评 阅 教 师: 完 成 日 期:2012年04月01日南阳理工学院 Nanyang Institute of Technology Android环境下人机对弈 五子棋的设计与实现 软件工程 李雪峰 移动互联网时代的到来极大的改变了我们的生活,而Android是一种以Linux为基础的开放源码操作系统迅速占领了智能机操作系统,所以在android环境下开发显得尤为必要。本文围绕一个“基于Android平台的五子棋游戏设计与开发”程序的设计和应用系统的开发课题为背景,详细介绍了在Android平台上以Java为语言编写游戏的过程。五子棋游戏的开发不仅是一个简单游戏的编写过程,更重要的是在系统分析和设计阶段所做的工作。该程序在设计过程中严格遵循软件工程学的方法,用分阶段的生命周期计划严格管理,并主要讲述了程序的总体设计、详细设计阶段,对程序进行需求迭代,不断修正和改进,利用SQlite、SharedPreferences等数据存储功能,直到形成一个完善的可行性系统. 界面美观、大方,方便的操作与良好的视觉感应共同构成了“基于Android平台 的五子棋游戏设计与开发”的设计。 Android,Java,数据存储,软件工程,五子棋 The Design And Implementation of Five in a Row Base on Android Software Engineering Major Li XueFeng Arrival of the mobile Internet era has greatly changed our lives, and Android is a Linux-based open source operating system quickly occupied the smartphone operating system, Android development is particularly necessary under the circumstances. This paper focus on a "based on the Android platform of Five in a Row game design and development" program design and application system development issues as the background, introduces in detail in the Android platform to Java language write games for the process.The development of the Quintet game is not just a progress of programing. What’s more, we need to pay more attention to the work on the period of systematic analysis and design. The program follows the software engineering strictly and narrates the major design and section. This program maily talk about the period of the system design and the detailed design. And also it will study on the bug fixing and improvements. By using the some fuctiong of datalogging such as the SQlite, SharedPreferences, it build a practicable system. The nice and expert interface and good visual introduction form the design which is based on the designing and development of Android platform Five-in-a-row game. Android,java, Data Storage,Software Engineering, Five in a Row 目 录 1. 引言 1 1.1 人机对弈五子棋开发背景 1 1.2 Android游戏开发现状分析 1 1.3 相关知识的介绍 2 1.3.1 开发工具简介 2 1.3.2 数据存储方式 2 1.3.3 系统运行配置 3 2. Android系统分析 3 2.1 Android系统的架构 3 2.1.1 应用层 4 2.1.2 应用程序框架 4 2.1.3 系统运行库 4 2.1.4 Linux内核 5 2.2 Android应用程序的主要组件 5 2.2.1 Activity 5 2.2.2 service 6 2.2.3 BroadcastReceiver 6 2.2.4 ContentProvider 7 3. 需求分析 7 3.1 功能需求 7 3.2 性能需求 7 3.3 可行性研究 7 3.3.1 经济可行性 7 3.3.2 技术可行性 8 4. 概要设计 8 4.1 系统功能结构及流程图 8 4.2 数据存储设计 8 5. 详细设计 8 5.1 界面的绘制 8 5.1.1 棋盘的绘制 9 5.1.2 棋子的绘制 12 5.2 游戏核心功能设计 12 5.2.1 背景音乐和音效 13 5.2.2 游戏的三种不同难度等级的设计与输赢判断 13 5.3 游戏帮助模块设计 16 5.4 游戏最高记录模块设计 17 5.5 游戏设置模块设计 18 6. 人机对弈五子棋的实现 20 6.1 触屏下棋落子的判断 20 6.1.1 触屏事件onTouchEvent方法简介 20 6.1.2 落子的判断 21 6.2 背景音乐和音效的实现 22 6.3 难度等级的实现 23 6.3.1 简单 23 6.3.2 中等 24 6.3.3 较难 25 结束语 26 参考文献 26 致谢 27 引言 随着计算机与网络技术的日益发达,同时也进入了高效的信息化时代,说起手机,没有一个人会感到陌生。近几年来一个名词一直影响着许许多多的手机用户,它就是智能手机。智能手机凭借其强大的功能吸引住了许多用户的眼球,因为有了广大的用户基础,智能手机也风靡一时。说起智能手机,除了他有一颗强大的CPU和其他一些较高配置的硬件外,其真正的智能还要归功于其不可缺少的智能操作系统。随着3G的到来,无线带宽越来越高,使得更多内容丰富的应用程序部署在手机上成为可能,比如视频通话、视频点播、移动互联网等。为了承载这些数据应用及快速部署,手机功能将越来越智能越来越开放。 人机对弈五子棋开发背景 手机游戏也就应运而生,每个手机上都有手机游戏,上下班以及无聊闲暇时游戏是人们娱乐的一种方式。Android平台下的手机游戏更是受顾客的亲睐,手机游戏不仅玩起来比较方便,还有助于开发我们的思维,使大家在娱乐的同时也增长了见识,拓展了思维。五子棋对自己的思维及协调能力有益,能使我们注意力 集中,耐心也有明显的提升,培养我们的逻辑思维能力,对智力以及记忆力都很有帮助。 Android游戏开发现状分析 移动互联网时代的到来,在这个新的研究领域中,我国在世界上处于较为领先的地位,我国电信业正处在高速发展的阶段,特别是新业务、新服务在打造品牌、创建市场的时期,对电信产业的结构调整必须充分的考虑成本。由我国自主研发并获政府支持的TD-SCDMA制式技术,在频谱利用率、对业务支持具有灵活性等独特优势。这种全称为Time Division - Synchronous CDMA时分同步CDMA的技术,其空中接口采用了四种多址技术:TDMA,CDMA,FDMA,SDMA智能天线。综合利用四种技术资源分配时在不同角度上的自由度,得到可以动态调整的最优资源分配。克服由覆盖半径随用户数目的增加而收缩造成的呼吸效应和当手机靠近基站功率必定过剩而且形成有害的电磁辐射所造成的远近效应,并且实现了动态信道分配。而分别由欧洲和美韩所倡导的WCDMA和CDMA2000也各具优势。 我国拥有庞大的手机用户群体,为游戏产业的发展奠定了良好的用户基础。手机游戏的真正生命力,是成为最终吸引用户的关键所在。通过色彩艳丽的画面或奇特的游戏名称来吸引用户。3G手机游戏开发周期相对比较短,资金投入小,用户广泛统一;载体方便,很容易在市场上推广;如需收费,也合理方便。游戏可以锻炼思维及协调能力,能使我们注意力和耐心有所提高,培养我们的逻辑思维能力,对智力以及记忆力都很有帮助。 相关知识的介绍 本游戏采用当前很热的Android系统, 以Java语言为基础的2D手机游戏。用户游戏界面通过手机终端来实现,较强的人际交互。这样就大大简化了用户的 操作,该游戏为免费游戏,用户可以放心使用。 此外,本系统采用了SharedPreferences作为应用程序的数据存储,用来存储简单的配置信息,简单快捷,占用系统资源少。背景音乐采用媒体播放功能实现,控制也比较方便。 开发工具简介 本系统的开发环境是JDK1.6+MyEclipse8.5+Android SDK,使用的语言是Java语言。 JDK(Java Development Kit)是Sun Microsystems公司为Java开发人员设计的产品。从Java诞生以来,JDK已经成为使用最广泛Java SDK。JDK是整个Java的核心内容,包括了Java运行环境,Java工具和Java基础的类库三部分。从Sun的JDK1.5开始,提供了一些非常实用的功能,其版本也不断更新,运行效率得到了非常大的提高。 MyEclipse企业级工作平台(MyEclipse Enterprise Workbench ,简称MyEclipse)是对Eclipse IDE的扩展,应用程序服务器的整合方面极大的提高工作效率。它是功能丰富的Java集成开发环境,包括了完备的编码、调试、测试和发布功能,完整支持6>HTML, Struts,Spring, CSS, Javascript, SQL, Hibernate。 Android SDK是软件开发工具包(software development kit)。被软件开发工程师用于为特定的软件包、软件框架、硬件平台、操作系统等建立应用软件工具的集合。因此Android SDK是Android专属的开发工具包。其授权 协议 离婚协议模板下载合伙人协议 下载渠道分销协议免费下载敬业协议下载授课协议下载 为Apache,开发语言为Java、需要Android操作系统的支持。 数据存储方式 SharedPreferences存储方式,它是Android提供的用来存储一些简单配置信息的一种机制,例如:登录用户名和密码。其采用了Map数据结构来存储数据,以键值的方式存储,可以简单的读取与写入。最高纪录则用此存储方式进行存储。 SQlite存储方式,它是Android平台上集成的一个嵌入式关系型数据库。SQLite3支持 NULL、INTEGER、REAL(浮点数字)、TEXT字符串文本和BLOB二进制对象数据类型,虽然它支持的类型虽然只有五种,但实际上sqlite3也接受varcharn、charn、decimalp,s 等数据类型,只不过在运算或保存时会转成对应的五种数据类型。 SQLite最大的特点是你可以保存任何类型的数据到任何字段中,无论这列声明的数据类型是什么。例如:可以在Integer字段中存放字符串,或者在布尔型字段中存放浮点数,或者在字符型字段中存放日期型值。 但有一种情况例外:定义为INTEGER PRIMARY KEY的字段只能存储64位整数, 当向这种字段中保存除整数以外的数据时,将会产生错误。另外, SQLite 在解析CREATE TABLE 语句时,会忽略 CREATE TABLE 语句中跟在字段名后面的数据类型信息。 系统运行配置 操作系统:Android 2.1以上。 开发包:JDK 1.6、Android SDK。 数据存储:SharedPreferences、SQlite。 Android系统分析 Android是一个包括操作系统,中间件以及一些重要应用程序的专门针对移动设备的层次结构的软件集。作为一个层次结构的软件集,一定有一个层次的系统构架,下图为Android的构架图: 图2?1 Android 系统构架 Android系统的架构 Android的系统架构和其操作系统一样,采用了分层的架构。android分为四个层,从高层到低层分别是应用程序层、应用程序框架层、系统运行库层和linux核心层。 应用层 Android会同一系列核心应用程序包一起发布,该应用程序包包括email客户端,SMS短消息程序,日历,地图,浏览器,联系人管理程序等。所有的应用程序都是使用JAVA语言编写的。 应用程序框架 开发人员也可以完全访问核心应用程序所使用的API框架。该应用程序的架构设计简化了组件的重用;任何一个应用程序都可以发布它的功能块并且任何其它的应用程序都可以使用其所发布的功能块不过得遵循框架的安全性限制。同样,该应用程序重用机制也使用户可以方便的替换程序组件。隐藏在每个应用后面的是一系列的服务和系统, 其中包括:丰富而又可扩展的视图Views,可以用来构建应用程序, 它包括列表lists,网格grids,文本框text boxes,按钮buttons, 甚至可嵌入的web浏览器; 内容提供器Content Providers使得应用程序可以访问另一个应用程序的数据如联系人数据库, 或者共享它们自己的数据:资源管理器Resource Manager提供 非代码资源的访问,如本地字符串,图形,和布局文件 layout files ;通知管理器 Notification Manager 使得应用程序可以在状态栏中显示自定义的提示信息; 活动管理器 Activity Manager 用来管理应用程序生命周期并提供常用的导航回退功能。 系统运行库 系统运行库包括程序库和Android运行库。首先是程序库, Android 包含一些C/C++库,这些库能被Android系统中不同的组件使用。它们通过 Android 应用程序框架为开发者提供服务。以下是一些核心库:系统 C 库 - 一个从 BSD 继承来的标准 C 系统函数库 libc , 它是专门为基于 embedded linux 的设备定制的;媒体库 - 基于 PacketVideo OpenCORE;该库支持多种常用的音频、视频格式回放和录制,同时支持静态图像文件。编码格式包括MPEG4, H.264, MP3, AAC, AMR, JPG, PNG ; Surface Manager - 对显示子系统的管理,并且为多个应用程序提 供了2D和3D图层的无缝融合; LibWebCore - 一个最新的web浏览器引擎用,支持Android浏览器和一个可嵌入的web视图;SGL - 底层的2D图形引擎;3D libraries - 基于OpenGL ES 1.0 APIs实现;该库可以使用硬件 3D加速如果可用或者使用高度优化的3D软加速;FreeType -位图bitmap和矢量vector字体显示;SQLite - 一个对于所有应用程序可用,功能强劲的轻型关系型数据库引擎。其次是Android 运行库,Android 包括了一个核心库,该核心库提供了JAVA编程语言核心库的大多数功能。每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例。Dalvik被设计成一个设备可以同时高效地运行多个虚拟系统。 Dalvik虚拟机执行.dex的Dalvik可执行文件,该格式文件针对小内存使用做了优化。同时虚拟机是基于寄存器的,所有的类都经由JAVA编译器编译,然后通过SDK中 的 "dx" 工具转化成.dex格式由虚拟机执行。Dalvik虚拟机依赖于linux内核的一些功能,比如线程机制和底层内存管理机制。 Linux内核 Android 的核心系统服务依赖于 Linux 2.6 内核,如安全性,内存管理,进 程管理, 网络协议栈和驱动模型。 Linux 内核也同时作为硬件和软件栈之间的抽象层。 Android应用程序的主要组件 对于一个Android应用程序来说,是由四种构造块组织而成的,这四种构造块如下: Activity ;Intent Receiver;Service ;Content Provider。 但是,并不是每一个Android应用程序都需要这四种构造块,这不是必须的,某些时候,我们只需要这四种中的几种组合成我们的应用。 当我们明确了我们的应用需要哪些构造块后,我们就需要在AndroidManifest.xml中登记这些构造块的清单。这是一个XML配置文件,这个配置文件用于定义我们的应用程序的组件、组件的功能及必要条件等。这个配置文件是每个Android应用必需的。对于 AndroidMainfest.xml的Schema,参考SDK包附带的文档。 Activity Activity是Android构造块中最基本的一种,在应用中,一个activity通常就是一个单独的屏幕。每一个activity都被实现为一个独立的类,并且继承于Activity这个基类。这个activity类将会显示由几个Views控件组成的用户接口,并对事件做出响应。大部份的应用都会包含多个的屏幕。例如,一个短消息应用程序将会有一个屏幕用于显示联系人列表,第二个屏幕用于写短消息,同时还会有用于浏览旧短消息及进行系统设置的屏幕。每一个这样的屏幕,就是一个activity。从一个屏幕导航到另一个屏幕是很简单的。在一些应用中,一个屏幕甚至会返回值给前一个屏幕。当一个新的屏幕打开后,前一个屏幕将会暂停,并保存在历史堆栈中。用户可以返回到历史堆栈中的前一个屏幕。当屏幕不再使用时,还可以从历史堆栈中删除。默认情况下,Android将会保留从主屏幕到每一个应 用的运行屏幕。 2?2 Activity的生命周期 service Android中的服务和windows中的服务是类似的东西,服务一般没有用户操作界面,它运行于系统中不容易被用户发觉,可以使用它开发如监控之类或者其他后台可以运行的程序。比较好的一个例子就是一个正在从播放列表中播放歌曲的媒体播放器。在一个媒体播放器的应用中,应该会有多个activity,让使用者可以选择歌曲并播放歌曲。然而,音乐重放这个功能并没有对应的activity,因为使用者当然会认为在导航到其它屏幕时音乐应该还在播放的。在这个例子中,媒体播放器这个activity会使用Context.startService来启动一个service,从而可以在后台保持音乐的播放。同时,系统也将保持这个service一直执行,直到这个service运行结束。另外,我们还可以通过使用Context.bindService 方法,连接到一个service上(如果这个service还没有运行将启动它)。 BroadcastReceiver BroadcastReceiver也就是“广播接收者”的意思,顾名思义,它就是用来接收来自系统和应用中的广播。 在Android系统中,广播体现在方方面面,例如当开机完成后系统会产生一条广播,接收到这条广播就能实现开机启动服务的功能;当网络状态改变时系统会产生一条广播,接收到这条广播就能及时地做出提示和保存数据等操作;当电池电量改变时,系统会产生一条广播,接收到这条广播就能在电量低时告知用户及时保存进度,等等。 Android中的广播机制设计的非常出色,很多事情原本需要开发者亲自操作 的,现在只需等待广播告知自己就可以了,大大减少了开发的工作量和开发周期。而作为应用开发者,就需要数练掌握Android系统提供的一个开发利器,那就是BroadcastReceiver。 ContentProvider 应用程序能够将它们的数据保存到文件中、SQL数据库中,甚至是任何有效的设备中。当你想将你的应用数据与其它的应用共享时,Content Provider将会很有用。一个Content Provider类实现了一组标准的方法,从而能够让其它的应用保存或读取此Content Provider处理的各种数据类型。 需求分析 功能需求 五子棋分为五个模块:开始游戏、游戏说明、最高纪录、游戏设置、退出游戏。 1.开始游戏: ?.点击进入游戏。 2.游戏说明: ?.五子棋游戏规则的说明及操作说明。 3.最高纪录: ?.纪录不同难度获胜的最短时间,可清空。 4.游戏设置: ?.音效设置:开启/关闭音效、背景音乐的开/关。 ?.难度设置:简单,中等,较难。 5.退出游戏: ?.退出游戏。 性能需求 1.硬件环境 :PC 2.软件环境 :Windows XP、Android 2.1以上 可行性研究 经济可行性 该软件为免费软件,不收取任何费用。开发周期相对较短,能有效的利用开发人员。 技术可行性 运用Android智能手机的平台,开发人员具有一定的Android知识,熟悉的算法基础。智能手机拥有扎实的硬件平台以及较好的操作系统;该游戏能在手机上正常运行;操作简单,方便,为游戏玩家提供了一个良好的游戏平台。 概要设计 系统功能结构及流程图 根据系统功能的要求,可以将系统分解成几个功能模块来分别设计。系统结构如图4.1所示: 4?1系 统结构图 数据存储设计 根据系统所做的需求分析和系统设计,SharedPreferences为最有效的存储方式。它用来存储一些简单配置信息的一种机制,比SQlite更高效。 详细设计 系统详细设计是对每个模块功能的具体设计,包括界面、功能模块和设计要点等内容。 界面的绘制 游戏主界面如图5.1所示: 5?1游 戏主界面 点击‘开始游戏’时,可直接进入游戏;‘游戏说明’为相关的介绍以及游戏操作;‘最高纪录’记录不同难度等级的最高成绩;‘游戏设置’为设置游戏背景音乐、音效、以及难度;‘退出游戏’为退出整个游戏。 棋盘的绘制 Canvas类主要实现了屏幕的绘制过程,其中包含了很多实用的方法,比如绘制一条路径、区域、贴图、画点、画线、渲染文本,下面是Canvas类常用的方法,当然Android开发网提示大家很多方法有不同的重载版本,参数更灵活。 void drawRectRectF rect, Paint paint //绘制区域,参数一为RectF一个区域 void drawBitmapBitmap bitmap, Rect src, Rect dst, Paint paint// 贴图,参数一就是我们常规的Bitmap对象,参数二是源区域Android123提示这里是bitmap,参数三是目标区域应该在canvas的位置和大小,参数四是Paint画刷对象,因为用到了缩放和拉伸的可能,当原始Rect不等于目标Rect时性能将会有大幅损失。 void drawLinefloat startX, float startY, float stopX, float stopY, Paint paint //画线,参数一起始点的x轴位置,参数二起始点的y轴位置,参数三终点的x轴水平位置,参数四y轴垂直位置,最后一个参数为Paint画刷对象。 void drawTextString text, float x, float y, Paint paint? //渲染文本,Canvas类除了上面的还可以描绘文字,参数一是String类型的文本,参数二x轴,参数三y轴,参数四是Paint对象。 Paint类常用方法: void? setAntiAliasboolean aa? //是否抗锯齿 void? setColorint color? //设置颜色,这里Android内部定义的有Color 类包含了一些常见颜色定义 void setTextSizefloat textSize //设置字体大小 本设计中棋盘的设置采用drawLinefloat startX, float startY, float stopX, float stopY, Paint paint绘制。 相关代码: mPaint.reset; //.Y; mPaint.setAntiAliastrue; mPaint.setStrokeWidth1; can.drawLine0, 43, 320, 43, mPaint; can.drawLine10, 45, 310, 45, mPaint;// 横线 can.drawLine10, 75, 310, 75, mPaint; can.drawLine10, 105, 310, 105, mPaint; can.drawLine10, 135, 310, 135, mPaint; can.drawLine10, 165, 310, 165, mPaint; can.drawLine10, 195, 310, 195, mPaint; can.drawLine10, 225, 310, 225, mPaint; can.drawLine10, 255, 310, 255, mPaint; can.drawLine10, 285, 310, 285, mPaint; can.drawLine10, 315, 310, 315, mPaint; can.drawLine10, 345, 310, 345, mPaint; can.drawLine10, 375, 310, 375, mPaint; can.drawLine10, 405, 310, 405, mPaint; can.drawLine10, 435, 310, 435, mPaint; can.drawLine0, 437, 320, 437, mPaint; can.drawLine0, 438, 320, 438, mPaint; can.drawLine10, 45, 10, 435, mPaint;// 竖线 can.drawLine40, 45, 40, 435, mPaint; can.drawLine70, 45, 70, 435, mPaint; can.drawLine100, 45, 100, 435, mPaint; can.drawLine130, 45, 130, 435, mPaint; can.drawLine160, 45, 160, 435, mPaint; can.drawLine190, 45, 190, 435, mPaint; can.drawLine220, 45, 220, 435, mPaint; can.drawLine250, 45, 250, 435, mPaint; can.drawLine280, 45, 280, 435, mPaint; can.drawLine310, 45, 310, 435, mPaint; 棋子的绘制 本设计中棋子是用drawCircle在坐标上绘制一个经典几何图形。先判断是 否有棋,是黑子还是白子,然后判断是哪个坐标,然后调用drawCircle绘制棋子 canvas.drawCirclefloat,float, float, Paint方法用于画圆,前两个 参数代表圆心坐标,第三个参数为圆半径,第四个参数是画笔; 棋子绘制的简要代码如下: private static int curChess[][] new int[400][600];// 判断是否 有棋:无0, 白1,黑2 private static int curChessx[] new int[9];// 9x12 private static int curChessy[] new int[12]; private static int per_Chessx[] new int[9 * 12];// 纪录玩家下棋的 位置 private static int per_Chessy[] new int[9 * 12]; private static int pc_Chessx[] new int[9 * 12];// 纪录庄家下棋的 位置 private static int pc_Chessy[] new int[9 * 12]; for int i 0; i 9; i++ for int j 0; j 12; j++ if curChess[curChessx[i]][curChessy[j]] 1 mPaint.reset; //.TE; mPaint.setAntiAliastrue; for int ii 0; ii 9 * 12; ii++ // 玩家下棋位置 if per_Chessx[ii] ! 0 && per_Chessy[ii] ! 0 can.drawCircleper_Chessx[ii],per_Chessy[ii], 10,mPaint;// 下棋 else break; for int i 0; i 9; i++ for int j 0; j 12; j++ if curChess[curChessx[i]][curChessy[j]] 2 mPaint.reset; //.CK; mPaint.setAntiAliastrue; for int ii 0; ii 9 * 12; ii++ // p c下棋位置 if pc_Chessx[ii] ! 0 && pc_Chessy[ii] ! 0 can.drawCirclepc_Chessx[ii],pc_Chessy[ii], 10,mPaint;// 下棋 else break; 游戏核心功能设计 进入游戏后,按照操作可直接玩该五子棋游戏。图5.2是游戏界面的截图 5?2游戏界面 背景音乐和音效 背景音乐和音效对一个游戏来说也是必不可少的。背景音乐开则进入游戏开 始播放背景音乐,背景音乐关则相反。开启音效,则每次下棋的时候发出“嘀”的 一声的下棋声音。在游戏设置里面可以设置背景音乐的开启与关闭。 游戏的三种不同难度等级的设计与输赢判断 本设计中难度的设置是极为重要的阶段,不同难度的设置对玩家要求也各有 不同。游戏流程如图5.3所示。 5?3游戏流程图 三大难度的算法设计,算法的主体思想分三个步骤: 第一步:根据双方的当前的形势循环地假设性的分别给自己和对方下一子(在某个范围内下子),并判断此棋子能带来的形势上的变化,如能不能冲4,能不能形成庄家或玩家双3等, 第二步:根据上一步结果,组合每一步棋子所带来的所有结果(如某一步棋子可能形成我方1个活3,1个冲4等),包括庄家和玩家的。 第三步:根据用户给的规则对上一步结果进行排序,并选子(有进攻形、防守形规则)。 简单:简单难度的实现,庄家不防守,在离玩家最近下棋棋子最近的8个位置上的空位上方随机下棋。 中等:中等难度的实现,庄家只防守,少攻击。当玩家有“三活棋”以及“四冲”时,防守;否则选择自己最长连棋并且可下棋的空位下棋。流程图如图5.4所示: 5?4中等难度流程图 较难:较难难度的实现,庄家有强烈的防守,有猛烈的攻击。双方都不可以制造活4棋,找双活3棋子,不行就找半活4,再不行就找单活3,双活2的攻守模式。流程图如图5.5所示: 5?5较难难度流程图 庄家与玩家的胜负判断:每走一步,调用判断方法。其思路为:首先有一个组的集合,就是横、竖、斜三个方向,每5格一组,这个可以根据宽高计算出来。循环这个集合。如果有同色连接5个,那么为胜同时将五格中已有4个同色并且剩余一格未操作的,放入一个集合内,若上一步没有结果,那么判断这个集合,如果 有这个集合有两条以上,并且未操作格坐标不为同一个,那么同样为胜。 游戏帮助模块设计 游戏帮助是一个游戏中不可缺少的一部分,给玩家提供了简单的游戏玩法和明了的操作。图5.6是游戏帮助的界面截图。 5?6游 戏帮助 游戏最高记录模块设计 最高纪录为纪录3个不同难度的最好成绩,也可清空最高纪录。图5.7是最高纪录截图。 5?7最 高记录图游戏设置模块设计 游戏设置模块分为背景音乐开/关、音效开/关、难度选择。图5.8是设置界面截图,图5.9是背景音乐开关截图,图5.10是音效开关截图,图5.11是难度选择截图。 图5?8游戏设置界面 图5?9背景音乐设置 图5?10音效设置图5?11难度级别设置 人机对弈五子棋的实现 触屏下棋落子的判断 触屏事件onTouchEvent方法简介 手机屏幕事件的处理方法onTouchEvent。该方法在View类中的定义,并且所有的View子类全部重写了该方法,应用程序可以通过该方法处理手机屏幕的触摸事件。该方法的签名如下所示: public?boolean?onTouchEvent?MotionEvent?event 参数event:参数event为手机屏幕触摸事件封装类的对象,其中封装了该事 件的所有信息,例如触摸的位置、触摸的类型以及触摸的时间等。该对象会在用户触摸手机屏幕时被创建。 返回值:该方法的返回值机理与键盘响应事件的相同,同样是当已经完整地处理了该事件且不希望其他回调方法再次处理时返回true,否则返回false。 一般情况下屏幕被按下,抬起,拖动事件全部由onTouchEvent方法处理,下面简单介绍一下按下和抬起两种事件。 屏幕被按下:当屏幕被按下时,会自动调用该方法来处理事件,此时MotionEvent.getAction的值为MotionEvent.ACTION_DOWN,如果在应用程序中需要处理屏幕被按下的事件,只需重新该回调方法,然后在方法中进行动作的判断即可。 屏幕被抬起:当触控笔离开屏幕时触发的事件,该事件同样需要onTouchEvent方法来捕捉,然后在方法中进行动作判断。当MotionEvent.getAction的值为MotionEvent.ACTION_UP时,表示是屏幕被抬起的事件。 落子的判断 首先获得触摸的的坐标值,然后判断是否pc端下完棋,如果是则遍历每一个坐标,判断是否是有棋子,如果等于0则无棋子;然后用触屏获得的x和y的坐标值分别减去棋盘的坐标的x坐标和y坐标的值得到两个值,两个值平方再相加赋给临时变量temp。由于本设计中的棋盘两坐标距离最大的平方和为900,判断temp与900的大小,小于900符合条件,再声明一个变量r记录temp的最小值,遍历完所有符合条件的坐标,最后得到离点击屏幕距离最小的棋盘坐标,这就是要下棋的坐标。 简要代码如下: switch event.getAction case MotionEvent.ACTION_DOWN: if pc_end Log.e"xxyyy", "" + x + "-------" + y; firxy[0] 0; firxy[1] 0;// 纪录点赋0 float r 900;// 判断哪个点下棋 for int xx 0; xx 9; xx++ for int yy 0; yy 12; yy++ if curChess[curChessx[xx]][curChessy[yy]] 0 float temp x - curChessx[xx] * x - curChessx[xx] + y - curChessy[yy] * y - curChessy[yy]; if temp 900// 方格长度以内,选最小,则最近 if r temp r temp; firxy[0] curChessx[xx]; firxy[1] curChessy[yy]; Log.e"cur", "" + firxy[0] + "-"+firxy[1]; // if break; case MotionEvent.ACTION_UP: if pc_end if firxy[0] * firxy[1] 0 // 该点能下棋 for int i 0; i 9 * 12; i++ // 玩家下棋位置 if per_Chessx[i] 0 && per_Chessy[i] 0 per_Chessx[i] firxy[0]; per_Chessy[i] firxy[1]; break; if FIR.soundplay Sound; pc_end false; curChess[firxy[0]][firxy[1]] 1;// 赋值 person_end true; else // 该点不能下棋,则继续选择下棋点 pc_end true; person_end false; //.tInvalidate; 背景音乐和音效的实现 背景音乐和音效的实现,先创建播放文件, 然后通过准备,播放,停止的模式 来播放背景音乐和音效。部分代码如下: player MediaPlayer.createthis, //.sic; soundplayer MediaPlayer.createthis, //.ndmusic; if play //背景音乐 try player.prepare; catch IllegalStateException e e.printStackTrace; catch IOException e e.printStackTrace; player.start; else player.stop; if sonudplay //音效 try soundplayer.prepare; catch IllegalStateException e e.printStackTrace; catch IOException e e.printStackTrace; soundplayer.start; else soundplayer.stop; 难度等级的实现 简单 简单难度的实现,只有当庄家为活四的时候才进攻,其他情况离玩家最近下棋棋子最近的8个位置上的空位上随机下棋。部分伪代码如下: if庄家下棋 if庄家活四下棋 else 离玩家最近下棋棋子最近的8个位置上的空位上随机下棋 return; 中等 中等难度的实现,庄家只防守,少攻击。当玩家有“三活棋”以及“四冲”时,防守;否则选择自己最长连棋并且可下棋的空位下棋。部分伪代码如下: if庄家下棋 //遍历玩家的棋子,在玩家的棋中加入合适的棋子,再判断 if玩家活四防守 return; else if玩家双活三防守 return; else if玩家四冲防守 return; else//遍历自己的棋子 if庄家活四防守 else if庄家四冲 进攻else if庄家活三 进攻 else 下棋 return; 较难 较难难度的实现,庄家有强烈的防守,有猛烈的攻击。双方都不可以制造活4棋,找双活3棋子,不行就找半活4,再不行就找单活3,双活2的攻守模式。部分伪代码如下: if庄家下棋 //遍历玩家的棋子,在玩家的棋中加入合适的棋子,再判断 if玩家活四防守return; else if玩家双活三防守return; else if玩家四冲防守return; else if玩家单活三防守return; //遍历自己的棋子,加入合适一棋子,再判断 if制造活四 下棋else if制造双活三 下棋else if制造四冲 下棋else if制造单活三 下棋else if制造双活二 下棋else if制造单活二 下棋 return; 结束语 经过这一段时间的不断探索,自己对Android的研究,对Android游戏有了进一步的了解和学习。这段时间的不懈努力,五子棋游戏已经完成,达到了预期的要求。一个完整的Android五子棋游戏完成了。在本游戏的设计与实现的过程中主要完成了一个较完整的五子棋的系统设计部分。系统设计为整个游戏构建了框架,各个功能模块实现各个细节部分。难,中,易三种游戏难度的选择,游戏界面美观大方,音效以及背景音乐的控制,均已实现。 游戏难度的实现虽然比较麻烦,但是在自己的不懈努力和指导老师的帮助下,都顺利的完成了。 系统的详细设计根据系统分析阶段的结论将系统具体化,并完成了各个模块的相关功能,从而实现Android五子棋。 在这个毕业设计的每个阶段都能使我学到新的东西,虽然也有一些不足之处,但是每一个不足之处都是我值得思考的问题,这将对我以后的发展很有帮助。随着3G智能机的普及,人们对游戏的要求也越来越高,人机对战的实现往往是不够的。现在网络越来越好,网络双人对战也是一个很不错的研究方向。 参考文献 吴亚峰,索光亚.Android 2.0游戏开发实战宝典[M].北京:人民邮电出版社,2010.1:358. 杨丰盛.Android应用开发揭秘[M].北京:机械工业出版社,2010.1:518. 高焕堂.Android应用框架原理与程式设计36技[M/OL]. Google公司,2008:132-150. 李宁.Android开发权威指南[M].北京:人民邮电出版社,2011.367:404. 裴佳迪,马超,孙仁贵.Android开发全程实录[M].人民邮电出版社,2012.1:470. 公磊,周聪.基于Android的移动终端应用程序开发与研究[J].计算机与现代 化,20088:85-89. 汪永峰.Android平台开发之旅[M].北京:机械工业出版社,2010.8:515. 马越.Android的架构与应用[D].北京:中国地质大学北京硕士学位论文,2008:9-20. 致谢 在撰写本文过程中,得到了很多老师同学的帮助,给他们以诚挚的谢意。该设 计是
本文档为【毕业论文_Android环境下人机对弈五子棋的设计与实现】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_435706
暂无简介~
格式:doc
大小:58KB
软件:Word
页数:26
分类:工学
上传时间:2017-09-25
浏览量:29