基于IOS平台的游戏五子棋.docx
《基于IOS平台的游戏五子棋.docx》由会员分享,可在线阅读,更多相关《基于IOS平台的游戏五子棋.docx(48页珍藏版)》请在冰豆网上搜索。
![基于IOS平台的游戏五子棋.docx](https://file1.bdocx.com/fileroot1/2023-2/10/93909921-7ad3-4010-9ca4-1c4d20915db1/93909921-7ad3-4010-9ca4-1c4d20915db11.gif)
基于IOS平台的游戏五子棋
基于IOS平台的游戏“五子棋”
毕业设计说明书
题目:
基于IOS平台的游戏“五子棋”
程序设计
摘要
本论文主要阐述以iOS开发平台为基础,通过使用Xcode开发工具以及objective-c和c++语言开发的一款运行在iPad上的智力游戏“五子棋”。
五子棋是一种两人对弈的纯策略型棋类游戏,棋具与围棋通用,是起源于中国古代的传统黑白棋种之一。
近年来,随着智能手机的流行,出现了许多在移动操作系统上的手机应用。
所以,开发一款可以在iOS系统上运行的五子棋游戏是非常有意义的。
在开发的过程中,我首先学习了objective-c语言的相关语法,objective-c语言是在C语言上进行一些面向对象的扩充,学习它大概用了一周的时间。
接下来,开始学习iOS应用的构建原理(学习视图控制器与视图的使用方法,程序委托的使用等)以及一些常用控件的使用,并尝试在Xcode工具上搭建一些简单的界面。
这时候的界面是用xib文件来搭建的,通过直接拖拉控件来产生界面。
之后,开始尝试用代码写控件来代替xib文件。
在做好这些基础的准备后,我开始动手搭建五子棋的界面,五子棋界面除了一些常用的控件(按钮以及标签)外,重要的是画出棋盘以及棋子,棋盘和棋子不能用普通控件来显示,需要使用绘图的方法把它画出来。
在这些工作完成了之后,界面就可以显示出来了。
接下来,就要在棋盘类上面进行一些处理工作,比如点击各个按钮触发的事件,在游戏过程中玩家点击棋盘触发的事件,判断游戏输赢,悔棋和认输功能的实现等等。
之后,就开始设计与实现五子棋算法了。
经过多年的发展,五子棋的算法已经较为完善,我做的工作是在理解这些算法原理的基础上,用自己的话来实现,并加入一些新的东西。
五子棋算法一般包括估值算法以及搜索算法,估值算法的实现虽然代码量较大但是理解起来不是特别难,而我在学习搜索算法的过程中却在一开始的时候无法理解他的alpha-beta剪枝以及负极大值算法的意思。
而在一开始写完算法部分代码之后,也还是存在许多问题,无法搜索出正确的落子点,在经过一些排错与完善之后,算法的实现可以与前面的棋盘进行结合了。
这样,整个设计就差不多完成了,接下来就需要进行测试并进行一些小的修改。
在本论文中,主要阐述了开发过程中的一些细节,遇到的问题,解决的方法以及自己的一些感悟。
关键词:
objective-c;人工智能;算法
Abstract
Thispapermainlyexpoundedamentalgamegobang.ItisonthebasisofiOSdevelopmentplatform,usingtheXcodedevelopmenttoolsandobjective-candc++languagetodevelop,andrunedintheiPad.Gobangisagameoftwopurestrategytypechessgame.Chesscanbeusedinthegameofgo.GobangisoneofthetraditionalreversiwhichisoriginatedfromtheancientChinese.Inrecentyears,withthepopularityofsmartphones,Manymobileapplicationsonmobileoperatingsystemappeared.So,developingaGobanggamecanberunoniOSismeaningful.
Intheprocessofdevelopment,thefirstthingislearningthesyntaxofobjective-clanguage,theobjective-clanguageisinthebasisofclanguageandaddsomeObjectorientedexpansion,ittookmeaboutaweek'stimetostudy.Next,IstarttolearnthebuildingprincipleofiOSapp(learningtheusageofviewcontrollerandview,theuseofapplicationofdelegateandsoon)andtheuseofsomecommoncontrols,andtrytomakesomesimpleinterfaceonXcodetoolstructures.Atthistimethexibfileinterfaceisusedtobuild,throughdirectdragcontrolstogeneratetheinterface.Next,Ibegantotrytoreplacethexibfilebywrittingcodes.Afterdoingthisthings,Istarttobuildgobanginterface,inadditiontosomecommonlyusedcontrols(buttonsandlabels),itisimportanttodrawthechessboardandchess,theboardandchesscannotusenormalcontrolstodisplay,Ineedtodrawthem.Aftertheworkfinished,interfacecanbedisplayed.
Next,Ishoulddosomeworkonboard,suchastheeventsbyclickeachbutton,theeventsbyclickboard,thefunctionofjudessuccess,givingupandregretandsoon.Then,Ibegantodesignandrealizethegobangalgorithm.Gobangalgorithmhasbeenmoremature,myworkisunderstandingthealgorithmandrelizeit,andIwilladdsomenewthings.Gobangalgorithmgenerallyincludesvaluationalgorithmandsearchalgorithm,thecodeofvaluationalgorithmislargebutIdonothardtoundstandit.Instead,Ican'tunderstandthealphabetapruningandnegativemaximumvaluealgorithm.Andafterfinishedthealgorithm,itstillexistmanyproblems,itisunabletosearchtherightmoveplace,aftersometroubleshootingandimprovement,therealizationofthealgorithmcanbecombinedwiththefrontboard.So,thewholedesignisalmostfinished,youneedtotestandmakeafewsmallchanges.
Thispapermainlyexpoundssomedetailsinthedevelopmentprocess,implementationmethods,difficulties,andsomeofmyownfeeling.
Keywords:
objective-c;Artificialintellegence;algorithm
目 录
引言1
1手机五子棋游戏介绍3
1.1五子棋游戏规则介绍3
1.2五子棋游戏术语介绍3
1.3手机五子棋特色3
2开发环境及工具介绍4
2.1开发环境4
2.2运行环境4
2.3工具介绍4
2.3.1iOS介绍4
2.3.2objective-c介绍5
3需求分析与总体设计5
3.1需求分析5
3.2系统设计思想6
3.3系统总体设计6
3.4系统模块及功能6
3.4.1系统主要模块6
3.4.2系统主要流程8
4五子棋AI算法分析与实现9
4.1算法总体概况9
4.2估值算法分析与实现9
4.3搜索算法的分析与实现14
4.4算法设计的不足以及改进方法20
5APP应用详细设计21
5.1APP设计介绍21
5.1.1main函数介绍21
5.1.2应用程序委托介绍21
5.1.3视图控制器介绍21
5.1.4视图类介绍22
5.1.5MVC模型介绍22
5.1.6主要框架介绍:
22
5.2详细设计概述23
5.3视图控制器类设计23
5.3.1积分榜的设计23
5.3.2委托类的设计与使用23
5.3.3按钮的设计24
5.4棋盘类的设计24
5.4.1棋盘类变量设计24
5.4.2棋盘的绘制25
5.4.3玩家和机器人下子25
5.4.4棋子类的实现26
5.4.5判断胜负功能26
5.4.6游戏新局功能的实现26
5.4.7认输功能的实现27
5.4.8悔棋功能的实现27
5.4.9人人对战的实现27
6开发过程中遇到的问题28
6.1五子棋AI算法设计问题28
6.2棋盘类设计遇到的问题28
7测试29
8总结34
谢辞37
参考文献38
引言
随着科技的发展,智能手机的出现改变了我们一直以来对手机只是用于打电话和发短信的观点。
在路上,车上,我们总能看见有人拿着手机来玩游戏,看电影,这一切都在改变我们的日常生活。
也正是由于这些变化,移动互联网已经逐渐成为了互联网这个行业的重要组成部分。
我们也能看到,传统的PC行业的增长已经开始放慢,国际上一些很大的传统PC厂家例如惠普,戴尔在PC行业的利润已经越来越少,它们都在积极的寻求转型。
而反观智能机的领域,苹果,三星,HTC等企业都通过智能手机的销售取得了非常好的业绩。
特别是苹果和三星,占据了整个智能手机领域的很大部分利润。
所谓智能手机,就是与传统的功能手机只可以用来打电话与发短信不同。
它类似于电脑,有一个独立的操作系统,用户可以自行安装和卸载各种软件,这样手机的功能就得到了充分的扩充。
在PC上的软件现在不断有了移动操作系统上的版本,例如QQ等聊天类软件,微博等社交类软件,甚至在手机上也出现了很多3D游戏,这些都有赖于移动操作系统的产生以及相关硬件的发展。
在智能手机的行业中,诺基亚和黑莓曾经占据了非常重要的地位。
塞班系统曾经非常成功,但是后来由于开源的Android以及iOS系统的出现,加上触控技术的流行,塞班系统不断的失去了它的优势。
同样,近年来也兴起了平板这种新的数码产品,这是一种崭新的产物。
iPad是苹果公司推出的一款平板电脑,受到了市场的强烈反响。
所以,我觉得在iPad上开发一款移动应用是一件非常有意义的事情。
五子棋是一种两人对弈的策略型游戏,起源于中国古代。
五子棋的规则比较简单,上手比较容易,而且趣味横生,引人入胜。
传统五子棋的棋具是与围棋通用的,一般是15*15的棋盘,棋子分黑白两种颜色,对弈的双方分别执一种颜色的棋子,棋子放置在棋盘线上的交叉位置,双方轮流下子,只要同一颜色的棋子能够有五个棋子在同一条线上,那么执这种颜色棋子的一方就赢得了这盘棋。
随着科技的发展,现在人们的物质生活越来越丰富,但是人们的生活压力也越来越大,所以在工作闲暇之余,来一盘五子棋,也不失为一种调节情绪,放松思考的机会。
五子棋的规则简单,却往往可以开发人的思维,是一种非常有意义的游戏。
五子棋现在已经发展为一种非常重要的棋盘游戏。
近年来,游戏产业得到了巨大的发展。
而且随着手机的发展,游戏产业已经扩展到了手机上,这样大家就有了更多休闲娱乐的机会。
棋类游戏具有益智,开发人大脑思维的功能也受到了大家的欢迎。
手机上的棋类游戏往往分为人机对战和人人对战两种。
特别是人机对战中的机器博弈,是PC和手机上的棋类游戏的一大特色。
机器博弈是人工智能研究领域中一块非常重要的地方。
本文设计的是一款人机和人人对战的五子棋游戏软件,在人机对战模块中,提供了一定智力的机器人来和玩家进行博弈。
机器人的功能通过估值,alphabeta剪枝搜索,负极大值等算法来实现。
人人对战主要是提供一个界面美观的棋盘来给两个玩家切磋棋艺。
另外,本软件还提供了下面的一些功能:
1,重新开始功能,游戏模式选择功能,人机对战选择游戏难度功能,下棋先后手选择功能。
2,认输功能。
3,悔棋功能。
3,积分功能(胜负记录)。
4,判断胜负功能。
5,游戏状态提醒功能。
1手机五子棋游戏介绍
1.1五子棋游戏规则介绍
五子棋的标准棋盘大小是15*15,由双方各执一种颜色的棋子,分别在棋盘横竖线交叉的位置摆上棋子。
最后有一方的棋子有五子可以连成同一根线就算执该颜色棋子的一方胜利。
由于在五子棋游戏过程中,先下子的一方非常占有很大的优势,所以五子棋游戏有两种下棋规则,禁手和无禁手。
禁手规则是指先下子的一方需要一定的约束,通常有长连禁手,四四禁手,三三禁手。
这些都是对先下子一方的约束,来平衡先下子本身带来的不公平。
无禁手规则是指双方都不需要约束下子的位置,国际比赛往往都有禁手规则。
1.2五子棋游戏术语介绍
连珠:
国际上五子棋的正式名称。
阳线:
棋盘上可见的横线和竖线的总称。
阴线:
棋盘的两条对角线及与它们平行的交叉点间不可见斜线的总称。
连:
一条阳线或阴线上紧紧相连的同色棋子。
长连:
一条阳线或阴线上紧紧相连的同色六枚或六枚以上棋子。
五连:
一条阳线或阴线上紧紧相连的同色五枚棋子。
四:
指活四和冲四。
活四:
己方再加上一子,有两个点可以成五的单四。
冲四:
己方再加上一子,只有一个点可以成五的四。
包括连冲四和跳冲四。
三:
指活三和眠三。
活三:
己方再加上一子,可以形成活四的三。
眠三:
己方再加上一子,可以形成冲四但不能形成活四的三。
二:
指活二和眠二。
活二:
己方再加上一子,可以形成活三的二。
眠二:
己方再加上一子,可以形成眠三但不能形成活三的二。
死四、死三、死二由于在主方向已不可能成五,因此已不是四、三、二。
1.3手机五子棋特色
便携性:
在没有计算机和手机出现之前,要进行一场五子棋游戏都是需要使用真正的棋盘和棋子进行的。
而随着计算机和网络的不断发展,五子棋已经完全可以脱离棋盘的限制。
而近年来随着手机的发展,更加方便的手机版五子棋不断出现。
它不仅具有电脑版五子棋的优势,而且更加的方便。
网络连接能力:
由于手机或平板都有一定的网络连接能力,所以可以通过网络连接进行两人对战,这样就减少了距离的限制。
2开发环境及工具介绍
2.1开发环境
电脑硬件:
处理器2.7GHzIntel
内存8GB1600MHzDDR3
操作系统:
软件OSX10.8.2(12C3103)
开发工具:
xcode4.6
2.2运行环境
硬件:
第一代iPad
操作系统:
iOS5.1
2.3工具介绍
2.3.1iOS介绍
iOS是一种闭源的系统,采用了混合内核,是苹果公司开发的一款手持设备的操作系统。
苹果公司一开始是将这个系统用在了iPhone上,后来又逐渐的用在了iPodtouch,iPad等产品上。
它是以Darwin为基础的一种类Unix的操作系统,原本这个系统名为iPhoneOS,直到2010年6月7日WWDC大会上宣布改名为iOS。
iOS的系统结构分为以下四个层次:
核心操作系统(theCoreOSlayer),核心服务层(theCoreServiceslayer),媒体层(theMedialayer),Cocoa触摸框架层(theCocoaTouchlayer)。
从功能角度来说,iOS和Android还是比较类似的,都具备触摸屏,高级图形显示以及上网功能。
相较于Android,iOS运行更加流畅,对硬件的要求没有Android高,同时,它的应用的兼容性要比Android好。
而Android在界面上更加注重搜索功能,它对Flash的支持也是一个优势。
2.3.2objective-c介绍
在开发五子棋程序过程中,除了算法部分使用C++语言进行实现外,其他部分都需要使用Objective-C来实现。
Objective-C是一种通用、高级、面向对象的编程语言。
它扩展了标准的ANSIC编程语言。
将Smalltalk式的消息传递机制加入到ANSIC中。
它是苹果的OSX和iOS操作系统,及其相关API、Cocoa和CocoaTouch的主要编程语言。
Objective-C最初源于NeXTSTEP操作系统,之后在OSX和iOS继承下来。
目前主要支持的编译器有GCC和Clang,其中Clang被应用于Xcode4.0中。
1980年代初,BradCox与TomLove在其公司Stepstone发明Objective-C,它以一种叫做SmallTalk-80的语言为基础。
Objective-C创建在C语言之上,意味着它是在C语言基础上添加了扩展而创造出来的能够创建和操作对象的一门新的程序设计语言。
对Objective-C最主要的描述是他1986年出版的《Object-orientedProgramming,AnEvolutionaryApproach》。
1988年,NeXTComputer公司获得了Objective-C语言的授权,并开发出了Objective-C的语言库和一个名为NEXTSTEP的开发环境。
1992年,自由软件基金会的GNU开发环境增加了对Objective-C的支持。
1994年,NeXTComputer公司和SunMicrosystem联合发布了一个针对NEXTSTEP系统的标准典范,名为OPENSTEP。
OPENSTEP在自由软件基金会的实现名称为GNUstep。
1996年12月20日,苹果公司宣布收购NeXTSoftware公司,NEXTSTEP/OPENSTEP环境成为苹果操作系统下一个主要发行版本OSX的基础。
这个开发环境的该版本被苹果公司称为Cocoa。
3需求分析与总体设计
3.1需求分析
本软件设计的是具有人机对战和人人对战功能的五子棋,相较于PC版的五子棋,在平板上运行的软件界面需要更加简洁,操作更加方便。
在人机对战部分,由于CPU的主频不高,为了保证游戏的流畅性,在平板上运行的五子棋的算法实现需要较少的代码,但同时又要保证算法具有一定的智能性,否则就失去了益智的功能。
在整个软件中,需要提供以下功能:
1,需要提供一个15*15大小并且可以添加棋子的棋盘。
2,需要提供游戏开始功能(重新开始功能),选择游戏类型功能(人机对战和人人对战),提供下子先后手功能。
3,人机对战需要提供一定水平的算法,但是算法在运行过程中不能花费太多的事件,同时,人机对战需要提供不同难度的选择。
4,人机对战功能需要提供玩家悔棋功能。
5,提供自动判断游戏胜利并且在界面上给予提示的功能。
6,提供游戏积分榜功能,显示每一方胜利的局数,并且在每局游戏结束后可以马上更新,在应用重新打开时仍然可以正确显示。
7,提供游戏认输功能,提供游戏状态(某一方下子,游戏结束等)提示功能。
3.2系统设计思想
该软件设计的是一款可以在iPad上运行的五子棋游戏,软件打开后直接进入游戏主界面,然后用户通过选择游戏模式,游戏难度,下棋先后手之后开始进行游戏,在游戏过程中软件提供当前状态的提示,玩家在这个过程中可以进行认输,悔棋等操作,当程序判断游戏结束时,程序按照游戏结果更新积分榜。
3.3系统总体设计
按照系统设计思想,系统的总体设计如下:
3.4系统模块及功能
3.4.1系统主要模块
系统主要模块如下:
主视图初始化模块:
创建并添加棋盘视图,添加积分榜模块视图,认输模块视图,棋盘初始化模块视图,悔棋模块视图。
棋盘初始化模块:
清空表示棋子相应信息的数组,将棋盘上之前添加的棋子全部移除。
新游戏设置模块:
选择游戏的类型(人机对战和人人对战),人机对战模式还需选择游戏难度,并且两种模式都要选择先后手。
主循环模块:
转换下子的一方的颜色。
玩家点击棋盘模块:
玩家点击棋盘后,系统根据玩家点击位置将棋子添加进棋盘。
机器人落子算法模块:
该模块根据当前棋盘的信息,通过一定的算法,得出最适合下子的坐标。
机器人下子模块:
程序根据落子算法模块得到最佳落子地点,然后将该点设置成机器人棋子的颜色。
判断游戏结束模块:
玩家点击模块和机器人下子模块调用该模块,该模块通过判断是否有连续五颗同样颜色的棋子在同一条线上来决定是否结束游戏。
认输功能模块:
提前结束游戏,并更新积分榜。
悔棋功能模块:
在人机对战游戏中,只要游戏还没有结束,玩家就可以通过该模块撤销自己已经在棋盘上下的棋子。
游戏积分榜模块:
显示人机对战和人人对战双方各胜利的局数,并在每次游戏结束时更新。
3.4.2系统主要流程
4五子棋AI算法分析与实现
4.1算法总体概况
首先介绍在该程序中棋盘的表示,我用char型的值来代表黑子和白字,黑子是机器人,白子是玩家。
整个棋盘用一个char型的二维数组来表示。
例如:
假设这个数组是a[5][5](棋盘有五行五列),’1’代表是黑子,’2’代表是白字,假如a[0][0]的值是’1’就代表这个棋盘第一行第一列是黑子。
五子棋的AI算法主要包括估值算法和搜索算法。
估值算法是指通过一定的算法将棋盘盘面的值计算出来。
而搜索算法是指在估值算法的基础上将盘面中最适合摆子的一点找出来。
估值算法是基础,调用一次搜索算法就可能需要调用多次估值算法,所以估值的准确性和估值算法的精简性对算法质量的影响非常大。
估值算法可以让你知道出现每一种棋局的重要性,而搜索算法就是要在估值的基础上找到真正适合你下子的那点。
4.2估值算法分析与实现
估值算法就是将整个棋盘相应的分值计算出来。
当然,这个分值是相对于某一方来说的。
比如此时是玩家下棋,那么此时得到的这个分值就应该是相对于玩家的。
假如是机器人下棋,那么此时得到的这个分值就应该是相对于机器人的。
那么为什么会产生不同的分值,不同的分值又有什么重要的意义?
产生不同的分值那是因为每一种不同的棋面对结果会产生不同的影响,比如该棋局某一方有五子相连,那么只要出现这个棋面,有五