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

上传人:ra****d 文档编号:157325607 上传时间:2022-09-29 格式:DOC 页数:34 大小:382KB
返回 下载 相关 举报
毕业论文:Android环境下人机对弈五子棋的设计与实现_第1页
第1页 / 共34页
毕业论文:Android环境下人机对弈五子棋的设计与实现_第2页
第2页 / 共34页
毕业论文:Android环境下人机对弈五子棋的设计与实现_第3页
第3页 / 共34页
点击查看更多>>
资源描述
南 阳 理 工 学 院本科生毕业设计(论文)学院(系): 软件学院 专 业: 软件工程 学 生: 李雪峰 指导教师: 白光远 完成日期 2021 年 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 TechnologyAndroid环境下人机对弈五子棋的设计与实现软件工程 李雪峰摘 要 移动互联网时代的到来极大的改变了我们的生活,而Android是一种以Linux为根底的开放源码操作系统迅速占领了智能机操作系统,所以在android环境下开发显得尤为必要。本文围绕一个“基于Android平台的五子棋游戏设计与开发程序的设计和应用系统的开发课题为背景,详细介绍了在Android平台上以Java为语言编写游戏的过程。五子棋游戏的开发不仅是一个简单游戏的编写过程,更重要的是在系统分析和设计阶段所做的工作。该程序在设计过程中严格遵循软件工程学的方法,用分阶段的生命周期方案严格管理,并主要讲述了程序的总体设计、详细设计阶段,对程序进行需求迭代,不断修正和改良,利用SQlite、SharedPreferences等数据存储功能,直到形成一个完善的可行性系统.界面美观、大方,方便的操作与良好的视觉感应共同构成了“基于Android平台的五子棋游戏设计与开发的设计。关键词 Android,Java,数据存储,软件工程,五子棋The Design And Implementation of Five in a Row Base on AndroidSoftware Engineering MajorLi XueFengAbstract: 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. Whats 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.Key words: Android,java, Data Storage,Software Engineering, Five in a Row目 录1. 引言11.1 人机对弈五子棋开发背景11.2 Android游戏开发现状分析11.3 相关知识的介绍2 开发工具简介2 数据存储方式2 系统运行配置32. Android系统分析32.1 Android系统的架构3 应用层4 应用程序框架4 系统运行库42.1.4 Linux内核52.2 Android应用程序的主要组件52.2.1 Activity52.2.2 service62.2.3 BroadcastReceiver62.2.4 ContentProvider73. 需求分析73.1 功能需求73.2 性能需求73.3 可行性研究7 经济可行性7 技术可行性84. 概要设计84.1 系统功能结构及流程图84.2 数据存储设计85. 详细设计85.1 界面的绘制8 棋盘的绘制9 棋子的绘制125.2 游戏核心功能设计12 背景音乐和音效13 游戏的三种不同难度等级的设计与输赢判断135.3 游戏帮助模块设计165.4 游戏最高记录模块设计175.5 游戏设置模块设计186. 人机对弈五子棋的实现206.1 触屏下棋落子的判断20 触屏事件onTouchEvent方法简介20 落子的判断216.2 背景音乐和音效的实现226.3 难度等级的实现23 简单23 中等24 较难25结束语26参考文献26致谢271. 引言随着计算机与网络技术的日益兴旺,同时也进入了高效的信息化时代,说起 ,没有一个人会感到陌生。近几年来一个名词一直影响着许许多多的 用户,它就是智能 。智能 凭借其强大的功能吸引住了许多用户的眼球,因为有了广阔的用户根底,智能 也风行一时。说起智能 ,除了他有一颗强大的CPU和其他一些较高配置的硬件外,其真正的智能还要归功于其不可缺少的智能操作系统。随着3G的到来,无线带宽越来越高,使得更多内容丰富的应用程序部署在 上成为可能,比方视频通话、视频点播、移动互联网等。为了承载这些数据应用及快速部署, 功能将越来越智能越来越开放。1.1 人机对弈五子棋开发背景 游戏也就应运而生,每个 上都有 游戏,上下班以及无聊闲暇时游戏是人们娱乐的一种方式。Android平台下的 游戏更是受顾客的亲睐, 游戏不仅玩起来比拟方便,还有助于开发我们的思维,使大家在娱乐的同时也增长了见识,拓展了思维。五子棋对自己的思维及协调能力有益,能使我们注意力集中,耐心也有明显的提升,培养我们的逻辑思维能力,对智力以及记忆力都很有帮助。1.2 Android游戏开发现状分析移动互联网时代的到来,在这个新的研究领域中,我国在世界上处于较为领先的地位,我国电信业正处在高速开展的阶段,特别是新业务、新效劳在打造品牌、创立市场的时期,对电信产业的结构调整必须充分的考虑本钱。由我国自主研发并获政府支持的TD-SCDMA制式技术,在频谱利用率、对业务支持具有灵活性等独特优势。这种全称为Time Division-Synchronous CDMA(时分同步CDMA)的技术,其空中接口采用了四种多址技术:TDMA,CDMA,FDMA,SDMA(智能天线)。综合利用四种技术资源分配时在不同角度上的自由度,得到可以动态调整的最优资源分配。克服由覆盖半径随用户数目的增加而收缩造成的呼吸效应和当 靠近基站功率必定过剩而且形成有害的电磁辐射所造成的远近效应,并且实现了动态信道分配。而分别由欧洲和美韩所倡导的WCDMA和CDMA2000也各具优势。我国拥有庞大的 用户群体,为游戏产业的开展奠定了良好的用户根底。 游戏的真正生命力,是成为最终吸引用户的关键所在。通过色彩艳丽的画面或奇特的游戏名称来吸引用户。3G 游戏开发周期相比照拟短,资金投入小,用户广泛统一;载体方便,很容易在市场上推广;如需收费,也合理方便。游戏可以锻炼思维及协调能力,能使我们注意力和耐心有所提高,培养我们的逻辑思维能力,对智力以及记忆力都很有帮助。1.3 相关知识的介绍本游戏采用当前很热的Android系统, 以Java语言为根底的2D 游戏。用户游戏界面通过 终端来实现,较强的人际交互。这样就大大简化了用户的操作,该游戏为免费游戏,用户可以放心使用。此外,本系统采用了SharedPreferences作为应用程序的数据存储,用来存储简单的配置信息,简单快捷,占用系统资源少。背景音乐采用媒体播放功能实现,控制也比拟方便。1.3.1 开发工具简介本系统的开发环境是JDK1.6+MyEclipse8.5+Android SDK,使用的语言是Java语言。JDKJava 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集成开发环境,包括了完备的编码、调试、测试和发布功能,完整支持HTML, Struts,Spring, CSS, Javascript, SQL, Hibernate。Android SDK是软件开发工具包software development kit。被软件开发工程师用于为特定的软件包、软件框架、硬件平台、操作系统等建立应用软件工具的集合。因此Android SDK是Android专属的开发工具包。其授权协议为Apache,开发语言为Java、需要Android操作系统的支持。1.3.2 数据存储方式SharedPreferences存储方式,它是Android提供的用来存储一些简单配置信息的一种机制,例如:登录用户名和密码。其采用了Map数据结构来存储数据,以键值的方式存储,可以简单的读取与写入。最高纪录那么用此存储方式进行存储。SQlite存储方式,它是Android平台上集成的一个嵌入式关系型数据库。SQLite3支持 NULL、INTEGER、REAL浮点数字、TEXT(字符串文本)和BLOB(二进制对象)数据类型,虽然它支持的类型虽然只有五种,但实际上sqlite3也接受varchar(n)、char(n)、decimal(p,s) 等数据类型,只不过在运算或保存时会转成对应的五种数据类型。 SQLite最大的特点是你可以保存任何类型的数据到任何字段中,无论这列声明的数据类型是什么。例如:可以在Integer字段中存放字符串,或者在布尔型字段中存放浮点数,或者在字符型字段中存放日期型值。 但有一种情况例外:定义为INTEGER PRIMARY KEY的字段只能存储64位整数, 当向这种字段中保存除整数以外的数据时,将会产生错误。另外, SQLite 在解析CREATE TABLE 语句时,会忽略 CREATE TABLE 语句中跟在字段名后面的数据类型信息。1.3.3 系统运行配置操作系统:Android 2.1以上。开发包:JDK 1.6、Android SDK。数据存储:SharedPreferences、SQlite。2. Android系统分析Android是一个包括操作系统,中间件以及一些重要应用程序的专门针对移动设备的层次结构的软件集。作为一个层次结构的软件集,一定有一个层次的系统构架,下列图为Android的构架图:图21 Android 系统构架2.1 Android系统的架构Android的系统架构和其操作系统一样,采用了分层的架构。android分为四个层,从高层到低层分别是应用程序层、应用程序框架层、系统运行库层和linux核心层。2.1.1 应用层Android会同一系列核心应用程序包一起发布,该应用程序包包括email客户端,SMS短消息程序,日历,地图,浏览器,联系人管理程序等。所有的应用程序都是使用JAVA语言编写的。2.1.2 应用程序框架开发人员也可以完全访问核心应用程序所使用的API框架。该应用程序的架构设计简化了组件的重用;任何一个应用程序都可以发布它的功能块并且任何其它的应用程序都可以使用其所发布的功能块(不过得遵循框架的平安性限制)。同样,该应用程序重用机制也使用户可以方便的替换程序组件。隐藏在每个应用后面的是一系列的效劳和系统, 其中包括:丰富而又可扩展的视图(Views),可以用来构建应用程序, 它包括列表(lists),网格(grids),文本框(text boxes),按钮(buttons), 甚至可嵌入的web浏览器; 内容提供器(Content Providers)使得应用程序可以访问另一个应用程序的数据(如联系人数据库), 或者共享它们自己的数据:资源管理器(Resource Manager)提供 非代码资源的访问,如本地字符串,图形,和布局文件( layout files );通知管理器 (Notification Manager) 使得应用程序可以在状态栏中显示自定义的提示信息; 活动管理器( Activity Manager) 用来管理应用程序生命周期并提供常用的导航回退功能。2.1.3 系统运行库系统运行库包括程序库和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内核的一些功能,比方线程机制和底层内存管理机制。2.1.4 Linux内核Android 的核心系统效劳依赖于 Linux 2.6 内核,如平安性,内存管理,进程管理, 网络协议栈和驱动模型。 Linux 内核也同时作为硬件和软件栈之间的抽象层。2.2 Android应用程序的主要组件对于一个Android应用程序来说,是由四种构造块组织而成的,这四种构造块如下: Activity ;Intent Receiver;Service ;Content Provider。 但是,并不是每一个Android应用程序都需要这四种构造块,这不是必须的,某些时候,我们只需要这四种中的几种组合成我们的应用。 当我们明确了我们的应用需要哪些构造块后,我们就需要在AndroidManifest.xml中登记这些构造块的清单。这是一个XML配置文件,这个配置文件用于定义我们的应用程序的组件、组件的功能及必要条件等。这个配置文件是每个Android应用必需的。对于 AndroidMainfest.xml的Schema,参考SDK包附带的文档。2.2.1 ActivityActivity是Android构造块中最根本的一种,在应用中,一个activity通常就是一个单独的屏幕。每一个activity都被实现为一个独立的类,并且继承于Activity这个基类。这个activity类将会显示由几个Views控件组成的用户接口,并对事件做出响应。大部份的应用都会包含多个的屏幕。例如,一个短消息应用程序将会有一个屏幕用于显示联系人列表,第二个屏幕用于写短消息,同时还会有用于浏览旧短消息及进行系统设置的屏幕。每一个这样的屏幕,就是一个activity。从一个屏幕导航到另一个屏幕是很简单的。在一些应用中,一个屏幕甚至会返回值给前一个屏幕。当一个新的屏幕翻开后,前一个屏幕将会暂停,并保存在历史堆栈中。用户可以返回到历史堆栈中的前一个屏幕。当屏幕不再使用时,还可以从历史堆栈中删除。默认情况下,Android将会保存从主屏幕到每一个应用的运行屏幕。22 Activity的生命周期2.2.2 serviceAndroid中的效劳和windows中的效劳是类似的东西,效劳一般没有用户操作界面,它运行于系统中不容易被用户觉察,可以使用它开发如监控之类或者其他后台可以运行的程序。比拟好的一个例子就是一个正在从播放列表中播放歌曲的媒体播放器。在一个媒体播放器的应用中,应该会有多个activity,让使用者可以选择歌曲并播放歌曲。然而,音乐重放这个功能并没有对应的activity,因为使用者当然会认为在导航到其它屏幕时音乐应该还在播放的。在这个例子中,媒体播放器这个activity会使用Context.startService()来启动一个service,从而可以在后台保持音乐的播放。同时,系统也将保持这个service一直执行,直到这个service运行结束。另外,我们还可以通过使用Context.bindService()方法,连接到一个service上如果这个service还没有运行将启动它。2.2.3 BroadcastReceiverBroadcastReceiver也就是“播送接收者的意思,顾名思义,它就是用来接收来自系统和应用中的播送。在Android系统中,播送表达在方方面面,例如当开机完成后系统会产生一条播送,接收到这条播送就能实现开机启动效劳的功能;当网络状态改变时系统会产生一条播送,接收到这条播送就能及时地做出提示和保存数据等操作;当电池电量改变时,系统会产生一条播送,接收到这条播送就能在电量低时告知用户及时保存进度,等等。Android中的播送机制设计的非常出色,很多事情原本需要开发者亲自操作的,现在只需等待播送告知自己就可以了,大大减少了开发的工作量和开发周期。而作为应用开发者,就需要数练掌握Android系统提供的一个开发利器,那就是BroadcastReceiver。2.2.4 ContentProvider应用程序能够将它们的数据保存到文件中、SQL数据库中,甚至是任何有效的设备中。当你想将你的应用数据与其它的应用共享时,Content Provider将会很有用。一个Content Provider类实现了一组标准的方法,从而能够让其它的应用保存或读取此Content Provider处理的各种数据类型。3. 需求分析3.1 功能需求五子棋分为五个模块:开始游戏、游戏说明、最高纪录、游戏设置、退出游戏。1.开始游戏:.点击进入游戏。2.游戏说明: .五子棋游戏规那么的说明及操作说明。 3.最高纪录:.纪录不同难度获胜的最短时间,可清空。 4.游戏设置: .音效设置:开启/关闭音效、背景音乐的开/关。 .难度设置:简单,中等,较难。5.退出游戏: .退出游戏。3.2 性能需求1硬件环境 :PC2软件环境 :Windows XP、Android 2.1以上3.3 可行性研究3.3.1 经济可行性该软件为免费软件,不收取任何费用。开发周期相对较短,能有效的利用开发人员。3.3.2 技术可行性运用Android智能 的平台,开发人员具有一定的Android知识,熟悉的算法根底。智能 拥有扎实的硬件平台以及较好的操作系统;该游戏能在 上正常运行;操作简单,方便,为游戏玩家提供了一个良好的游戏平台。4. 概要设计4.1 系统功能结构及流程图根据系统功能的要求,可以将系统分解成几个功能模块来分别设计。系统结构如图4.1所示:41系 统结构图4.2 数据存储设计根据系统所做的需求分析和系统设计,SharedPreferences为最有效的存储方式。它用来存储一些简单配置信息的一种机制,比SQlite更高效。5. 详细设计系统详细设计是对每个模块功能的具体设计,包括界面、功能模块和设计要点等内容。5.1 界面的绘制游戏主界面如图5.1所示:51游 戏主界面点击开始游戏时,可直接进入游戏;游戏说明为相关的介绍以及游戏操作;最高纪录记录不同难度等级的最高成绩;游戏设置为设置游戏背景音乐、音效、以及难度;退出游戏为退出整个游戏。5.1.1 棋盘的绘制Canvas类主要实现了屏幕的绘制过程,其中包含了很多实用的方法,比方绘制一条路径、区域、贴图、画点、画线、渲染文本,下面是Canvas类常用的方法,当然Android开发网提示大家很多方法有不同的重载版本,参数更灵活。void drawRect(RectF rect, Paint paint) /绘制区域,参数一为RectF一个区域void drawBitmap(Bitmap bitmap, Rect src, Rect dst, Paint paint) /贴图,参数一就是我们常规的Bitmap对象,参数二是源区域(Android123提示这里是bitmap),参数三是目标区域(应该在canvas的位置和大小),参数四是Paint画刷对象,因为用到了缩放和拉伸的可能,当原始Rect不等于目标Rect时性能将会有大幅损失。 void drawLine(float startX, float startY, float stopX, float stopY, Paint paint) /画线,参数一起始点的x轴位置,参数二起始点的y轴位置,参数三终点的x轴水平位置,参数四y轴垂直位置,最后一个参数为Paint画刷对象。void drawText(String text, float x, float y, Paint paint) /渲染文本,Canvas类除了上面的还可以描绘文字,参数一是String类型的文本,参数二x轴,参数三y轴,参数四是Paint对象。Paint类常用方法:void setAntiAlias(boolean aa) /是否抗锯齿void setColor(int color) /设置颜色,这里Android内部定义的有Color类包含了一些常见颜色定义void setTextSize(float textSize) /设置字体大小本设计中棋盘的设置采用drawLine(float startX, float startY, float stopX, float stopY, Paint paint)绘制。相关代码:mPaint.reset();mPaint.setColor(Color.GRAY);mPaint.setAntiAlias(true);mPaint.setStrokeWidth(1);can.drawLine(0, 43, 320, 43, mPaint);can.drawLine(10, 45, 310, 45, mPaint);/ 横线can.drawLine(10, 75, 310, 75, mPaint);can.drawLine(10, 105, 310, 105, mPaint);can.drawLine(10, 135, 310, 135, mPaint);can.drawLine(10, 165, 310, 165, mPaint);can.drawLine(10, 195, 310, 195, mPaint);can.drawLine(10, 225, 310, 225, mPaint);can.drawLine(10, 255, 310, 255, mPaint);can.drawLine(10, 285, 310, 285, mPaint);can.drawLine(10, 315, 310, 315, mPaint);can.drawLine(10, 345, 310, 345, mPaint);can.drawLine(10, 375, 310, 375, mPaint);can.drawLine(10, 405, 310, 405, mPaint);can.drawLine(10, 435, 310, 435, mPaint);can.drawLine(0, 437, 320, 437, mPaint);can.drawLine(0, 438, 320, 438, mPaint);can.drawLine(10, 45, 10, 435, mPaint);/ 竖线can.drawLine(40, 45, 40, 435, mPaint);can.drawLine(70, 45, 70, 435, mPaint);can.drawLine(100, 45, 100, 435, mPaint);can.drawLine(130, 45, 130, 435, mPaint);can.drawLine(160, 45, 160, 435, mPaint);can.drawLine(190, 45, 190, 435, mPaint);can.drawLine(220, 45, 220, 435, mPaint);can.drawLine(250, 45, 250, 435, mPaint);can.drawLine(280, 45, 280, 435, mPaint);can.drawLine(310, 45, 310, 435, mPaint);5.1.2 棋子的绘制本设计中棋子是用drawCircle在坐标上绘制一个经典几何图形。先判断是否有棋,是黑子还是白子,然后判断是哪个坐标,然后调用drawCircle绘制棋子canvas.drawCircle(float,float, float, Paint)方法用于画圆,前两个参数代表圆心坐标,第三个参数为圆半径,第四个参数是画笔; 棋子绘制的简要代码如下:private static int curChess = new int400600;/ 判断是否有棋:无0, 白1,黑2private static int curChessx = new int9;/ 9x12private static int curChessy = new int12;private static int per_Chessx = new int9 * 12;/ 纪录玩家下棋的位置private static int per_Chessy = new int9 * 12;private static int pc_Chessx = new int9 * 12;/ 纪录庄家下棋的位置private static int pc_Chessy = new int9 * 12;for (int i = 0; i 9; i+)for (int j = 0; j 12; j+) if (curChesscurChessxicurChessyj = 1) mPaint.reset();mPaint.setColor(Color.WHITE);mPaint.setAntiAlias(true);for (int ii = 0; ii 9 * 12; ii+) / 玩家下棋位置if (per_Chessxii != 0 & per_Chessyii != 0) can.drawCircle(per_Chessxii,per_Chessyii, 10,mPaint);/ 下棋 elsebreak;for (int i = 0; i 9; i+)for (int j = 0; j 12; j+) if (curChesscurChessxicurChessyj = 2) mPaint.reset();mPaint.setColor(Color.BLACK);mPaint.setAntiAlias(true);for (int ii = 0; ii 9 * 12; ii+) / p c下棋位置if (pc_Chessxii != 0 & pc_Chessyii != 0) can.drawCircle(pc_Chessxii,pc_Chessyii, 10,mPaint);/ 下棋 elsebreak;5.2 游戏核心功能设计进入游戏后,按照操作可直接玩该五子棋游戏。图5.2是游戏界面的截图52游戏界面5.2.1 背景音乐和音效背景音乐和音效对一个游戏来说也是必不可少的。背景音乐开那么进入游戏开始播放背景音乐,背景音乐关那么相反。开启音效,那么每次下棋的时候发出“嘀的一声的下棋声音。在游戏设置里面可以设置背景音乐的开启与关闭。5.2.2 游戏的三种不同难度等级的设计与输赢判断本设计中难度的设置是极为重要的阶段,不同难度的设置对玩家要求也各有不同。游戏流程如图5.3所示。53游戏流程图三大难度的算法设计,算法的主体思想分三个步骤:第一步:根据双方的当前的形势循环地假设性的分别给自己和对方下一子在某个范围内下子,并判断此棋子能带来的形势上的变化,如能不能冲4,能不能形成庄家或玩家双3等,第二步:根据上一步结果,组合每一步棋子所带来的所有结果如某一步棋子可能形成我方1个活3,1个冲4等,包括庄家和玩家的。第三步:根据用户给的规那么对上一步结果进行排序,并选子有进攻形、防守形规那么。简单:简单难度的实现,庄家不防守,在离玩家最近下棋棋子最近的8个位置上的空位上方随机下棋。中等:中等难度的实现,庄家只防守,少攻击。当玩家有“三活棋以及“四冲时,防守;否那么选择自己最长连棋并且可下棋的空位下棋。流程图如图5.4所示:54中等难度流程图较难:较难难度的实现,庄家有强烈的防守,有猛烈的攻击。双方都不可以制造活4棋,找双活3棋子,不行就找半活4,再不行就找单活3,双活2的攻守模式。流程图如图5.5所示:55较难难度流程图庄家与玩家的胜负判断:每走一步,调用判断方法。其思路为:首先有一个组的集合,就是横、竖、斜三个方向,每5格一组,这个可以根据宽高计算出来。循环这个集合。如果有同色连接5个,那么为胜同时将五格中已有4个同色并且剩余一格未操作的,放入一个集合内,假设上一步没有结果,那么判断这个集合,如果有这个集合有两条以上,并且未操作格坐标不为同一个,那么同样为胜。5.3 游戏帮助模块设计游戏帮助是一个游戏中不可缺少的一局部,给玩家提供了简单的游戏玩法和明了的操作。图5.6是游戏帮助的界面截图。56游 戏帮助5.4 游戏最高记录模块设计最高纪录为纪录3个不同难度的最好成绩,也可清空最高纪录。图5.7是最高纪录截图。57最 高记录图 5.5 游戏设置模块设计游戏设置模块分为背景音乐开/关、音效开/关、难度选择。图5.8是设置界面截图,图5.9是背景音乐开关截图,图5.10是音效开关截图,图5.11是难度选择截图。图58游戏设置界面 图59背景音乐设置图510音效设置图 511难度级别设置6. 人机对弈五子棋的实现6.1 触屏下棋落子的判断6.1.1 触屏事件onTouchEvent方法简介 屏幕事件的处理方法onTouchEvent。该方法在View类中的定义,并且所有的View子类全部重写了该方法,应用程序可以通过该方法处理 屏幕的触摸事件。该方法的签名如下所示:publicbooleanonTouchEvent(MotionEventevent)参数event:参数event为 屏幕触摸事件封装类的对象,其中封装了该事件的所有信息,例如触摸的位置、触摸的类型以及触摸的时间等。该对象会在用户触摸 屏幕时被创立。返回值:该方法的返回值机理与键盘响应事件的相同,同样是当已经完整地处理了该事件且不希望其他回调方法再次处理时返回true,否那么返回false。一般情况下屏幕被按下,抬起,拖动事件全部由onTouchEvent方法处理,下面简单介绍一下按下和抬起两种事件。屏幕被按下:当屏幕被按下时,会自动调用该方法来处理事件,此时MotionEvent.getAction()的值为MotionEvent.ACTION_DOWN,如果在应用程序中需要处理屏幕被按下的事件,只需重新该回调方法,然后在方法中进行动作的判断即可。屏幕被抬起:当触控笔离开屏幕时触发的事件,该事件同样需要onTouchEvent方法来捕捉,然后在方法中进行动作判断。当MotionEvent.getAction()的值为MotionEvent.ACTION_UP时,表示是屏幕被抬起的事件。6.1.2 落子的判断首先获得触摸的的坐标值,然后判断是否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);firxy0 = 0;firxy1 = 0;/ 纪录点赋0float r = 900;/ 判断哪个点下棋for (int xx = 0; xx 9; xx+)for (int yy = 0; yy 12; yy+) if (curChesscurChessxxxcurChessyyy = 0) float temp = (x - curChessxxx)* (x - curChessxxx) + (y - curChessyyy)* (y - curChessyyy);if (temp = temp) r = temp;firxy0 = curChessxxx;firxy1 = curChessyyy;Log.e(cur, + firxy0 + -+firxy1);/ ifbreak;case MotionEvent.ACTION_UP:if (pc_end)if (firxy0 * firxy1 0) / 该点能下棋for (int i = 0; i 9 * 12; i+) / 玩家下棋位置if (per_Chessxi = 0 & per_Chessyi = 0) per_Chessxi = firxy0;per_Chessyi = firxy1;break;if (FIR.soundplay)Sound();pc_end = false;curChessfirxy0firxy1 = 1;/ 赋值person_end = true; else / 该点不能下棋,那么继续选择下棋点pc_end = true;person_end = false;FirView.this.postInvalidate();6.2 背景音乐和音效的实现背景音乐和音效的实现,先创立播放文件, 然后通过准备,播放,停止的模式来播放背景音乐和音效。局部代码如下:player = MediaPlayer.create(this, R.raw.bmusic);soundplayer = MediaPlayer.create(this, R.raw.soundmusic);if (play) /背景音乐try player.prepare(); catch (IllegalStateException e) e.printStackTrace(); catch (IOException e) e.printStackTrace();player.start(); elseplayer.stop();if (sonudplay) /音效try soundplayer.prepare(); catch (IllegalStateException e) e.printStackTrace(); catch (IOException e) e.printStackTrace();soundplayer.start(); elsesoundplayer.stop();6.3 难度等级的实现6.3.1 简单简单难度的实现,只有当庄家为活四的时候才进攻,其他情况离玩家最近下棋棋子最近的8个位置上的空位上随机下棋。局部伪代码如下:if(庄家下棋) if(庄家活四) 下棋 else 离玩家最近下棋棋子最近的8个位置上的空位上随机下棋 return;6.3.2 中等中等难度的实现,庄家只防守,少攻击。当玩家有“三活棋以及“四冲时,防守;否那么选择自己最长连棋并且可下棋的空位下棋。局部伪代码如下:if(庄家下棋) /遍历玩家的棋子,在玩家的棋中参加适宜的棋子,再判断if(玩家活四) 防守return; else if(玩家双活三) 防守return; else if(玩家四冲) 防守return; else/遍历自己的棋子if(庄家活四) 防守 else if(庄家四冲) 进攻 else if(庄家活三) 进攻 else 下棋 return;6.3.3 较难较难难度的实现,庄家有强烈的防守,有猛烈的攻击。双方都不可以制造活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智能机的普及,人们对游戏的要求也越来越高,人机对战的实现往往是不够的。现在网络越来越好,网络双人对战也是一个很不错的研究方向。参考文献1 吴亚峰,索光亚.Android 2.0游戏开发实战宝典M.北京:人民邮电出版社,2021.1:358.2 杨丰富.Android应用开发
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 商业管理 > 商业计划


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!