子棋需求分析报告_第1页
子棋需求分析报告_第2页
子棋需求分析报告_第3页
子棋需求分析报告_第4页
子棋需求分析报告_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、中国矿业大学应用系统开发实践设计题目:基于VC的五子棋游戏软件的设计与开发指导教师:学 生:专 业:计算机科学与技术 09-1班2012年5月目录1 引 言 22 系统需求分析 2系统需求 2功能需求 2系统运行环境 23 五子棋算法分析 3五子棋的发展 3五子棋的规则 3具体算法分析 4棋盘局势状态表示 . 4棋盘中下棋的顺序表示 . 5具体算法 . 54 系统流程 75 系统功能实现 8窗口设计 9棋盘设计 9按钮功能的实现 10胜负判断 116 系统测试与分析 137 结论 171. 引 言目前网络上有很多五子棋子游戏,玩法简单,娱乐性也很高。五子棋不仅能增强思维能力,提高 智力,而且富

2、含哲理,有助于修身养性。通过对五子棋的设计与开发,了解和掌握游戏开发的原理与 方法。让电脑像人脑一样思考,一直是人工智能发展的最终目标。作为一门边缘学科,它有诸多的研 究领域,博弈即为其中之一。博弈的参加者可以是个人、集体、某种生物或机器,他们都力图用自己 的“智力”去击败对手。博弈为人工智能提供了一个极好的试验场所,人工智能中的许多概念和方法 都是从博弈程序中提炼出来的,人工智能中大多以下棋为例来研究博弈规律。本文以五子棋为入口, 设计了一个五子棋双人对战和人机对弈系统,以实现人和人,人和计算机的博弈,最终的目的是为了 建立一个有具体规则的五子棋平台。2. 需求分析目前网络上有很多五子棋子游

3、戏, 玩法简单,娱乐性也很高。 五子棋不仅能增强思维 能力,提高智力,而且富含哲理,有助于修身养性。通过对五子棋的设计与开发,了解和 掌握游戏开发的原理与方法。让电脑像人脑一样思考,一直是人工智能发展的最终目标。 作为一门边缘学科, 它有诸多的研究领域, 博弈即为其中之一。 博弈的参加者可以是个人、 集体、某种生物或机器, 他们都力图用自己的“智力”去击败对手。 人机对弈程序的要点, 至少应具备以下 4 个部分:(1) 状态表示:某种在机器中表示棋局的方法, 能够让程序知 道博弈的状态。 (2) 走法产生:产生合法走法的规则,以使博弈公正地进行, 并可判断对 手是否乱走。 (3) 搜索技术:从

4、所有合法的走法中选择最佳的走法技术。 (4) 对弈界面。系统需求五子棋作为一款休闲益智游戏, 它最大的优点在于游戏规则家喻户晓, 简单,上手快, 趣味性强,所以受广大用户青睐, 在各大提供棋牌类游戏的平台都可以看到玩五子棋游戏 的人很多。 休闲益智游戏中等级并不是最重要的追求目标, 通过对游戏规则的熟悉, 能很 快上手掌握其操作方式, 也更适合男女老幼全家共同娱乐, 花费时间简短,速战速决, 在 短时间内感受到游戏的乐趣, 完全享受气氛轻松活跃的游戏过程。 此种娱乐方式既不耽误 时间也能轻松调剂娱乐, 充分适合现代人们的娱乐需求。 更主要的是开发了人的智力, 成 为年轻一代最流行的游戏, 据统

5、计,五子棋游戏的玩家中, 学生占了接近三分之一的比例, 对学生的智力健康成长起一定作用,正所谓休闲娱乐两不误。功能需求要求系统界面简洁, 操作方便,把五子棋游戏规则中最基本的规则体现出来, 比如“和 棋”、“重新开局”等。五子棋还有一大特点就是速战速决,电脑应在很短时间内就应做 出判断,并能提供一定的帮助,违反游戏规则的时候应立即指出。在正规五子棋比赛中, 都设置了“禁手”这一规则。系统运行环境Win 9X/Win ME/Win NT/Win 2000/Win XP/Win 2003/3 五子棋算法分析五子棋的发展五子棋是起源于中国古代的传统黑白棋种之一。 现代五子棋日文称之为“连珠”, 英

6、译为“ Renju ”,英文称之为“ Goba ng或“ FIR” (Five in a Row 的缩写),亦有“连五 子”、“五子连”、“串珠”、“五目”、“五目碰”、“五格”等多种称谓。五子棋不仅能增强思维能力, 提高智力, 而且富含哲理,有助于修身养性。 它既有简 单易学的特性, 为人民群众所喜闻乐见, 又有深奥的技巧和高水平的国际性比赛; 它的棋 文化源渊流长,具有东方的神秘和西方的直观;既有“场”的概念,亦有“点”的连接。 它是中西文化的交流点,是古今哲理的结晶。五子棋起源于古代中国, 发展于日本,风靡于欧洲。对于它与围棋的关系有两种说法, 一说早于围棋,早在“尧造围棋”之前,民间就

7、已有五子棋游戏; 一说源于围棋,是围棋 发展的一个分支。在中国的文化里,倍受人们的青睐。古代的五子棋的棋具与围棋相同, 纵横各十七道。 五子棋大约随围棋一起在我国南北朝时先后传入朝鲜、 日本等地。 据日本 史料文献介绍,中国古代的五子棋是经由高丽(朝鲜),于 1688年至 1704年的日本元禄时代传到日本的。到日本明治 32 年(公元 1899年) ,经过公开征名, “连珠”这一名称 才被正式确定下来, 取意于“日月如合壁,五星如连珠”。从此,连珠活动经过了不断的 改良,主要是规则的变化(即对执黑棋一方的限制),例如, 1899 年规定,禁止黑白双 方走“双三”; 1903 年规定,只禁止黑方

8、走“双三”; 1912年规定,黑方被迫走“双三” 亦算输; 1916 年规定,黑方不许走“长连”; 1918 年规定,黑方不许走“四、三、三”; 1931年规定,黑方不许走“双四”,并规定将 19X19的围棋盘改为15X15的连珠专用 棋盘。本世纪初五子棋传入欧洲并迅速风靡全欧。 通过一系列的变化, 使五子棋这一简单 的游戏复杂化、规范化,而最终成为今天的职业连珠五子棋, 同时也成为一种国际比赛棋。简单介绍一下文章中会遇到的一些关于五子棋最基本的术语(1)先手:进攻的着法,也指对弈双方执黑棋先在棋盘上落子的一方;(2)四三:指同时具备两个先手,其中一个四,另一个是活三;(3)活三(包括连三和跳

9、三):连三:紧紧相连的同色三子跳三:中间间隔一子 的活三?;(4)四四:一子落下同时形成两个“四”的棋形 ?;(5)三三:一子落下形成了两个活三的棋形;(6)长连:相同颜色的连续六子或六子以上; ?(7)禁手:对局中禁止使用的战术或被判为负的行棋手段;(8)胜局:对局的一方获胜,称为“胜局”。包括:一方首先在棋盘的直线或横线或斜线上形成连续的五子或五子以上 (特指白方)。对方表示认输。对方超过比赛 规定的时限。 当黑方禁手形成未能同时形成五连, 白方立即指出禁手后, 判定为白方胜 局。对方迟到超过容许时间。对方严重犯规而被判负;?(9)和棋:不分胜负的对局或双方同意平局。五子棋的规则五子棋游戏

10、的一个特点是先行的一方优势很大, 因此在职业比赛中对黑方做了种种限 制,以利公平竞争。五子棋的比赛规则如下:(1)黑棋先手、白棋后手,从天元开始相互顺序落子;(2)最先在棋盘横向、纵向或斜向形成连续的同色五个棋子的一方为胜;(3)黑棋禁手判负、白棋无禁手。黑棋禁手有“三、三”、“四、四”和“长连”, 包括“四、三、三”和“四、四、三”。黑棋只能以“四、三”取胜;(4)如分不出胜负,则到为平局;(5)五连与禁手同时形成,判胜;(6)黑方禁手形成时,白方应立即指出。若白方未发现或发现后不立即指出,反而 继续落子,则禁手失效,不再判黑方负。五子棋是黑白双方或两个人之间的竞技活动, 由于对黑白双方规则

11、不同, 黑棋必须先 行。一般采用猜先的方法来决定谁执黑先行, 即双方各抓一种颜色的几枚棋子, 大数减小 数,单数双方交换, 偶数不换;黑方在落下关键的第五子即形成五连的同时,如又形成禁 手,此时因黑方已经成五,而“五”在五子棋中是至高无上的,故禁手失效,黑方胜;所 谓黑方形成禁手, 是指黑方落下一子同时形成两个或两个以上的活三、 冲四及长连等。 此 时白方应立即指出,自然而胜。专业连珠五子棋虽然对黑棋采取了种种限制,但是黑棋先行的优势依然很大。因此, 在高段位的专业比赛中,又出现了三种特殊的规定:(1)“指定打法”:指比赛双方按照约定好的开局进行对弈。例如“斜月局”、 “长 星局”等。(2)“

12、三手可交换”:指黑棋下第二手棋盘面第三手棋之后,白方如感觉黑方 棋形不利于己方, 可提出交换, 即执白棋一方变为执黑棋一方 此方法不适用于指定开局 打法,而用于随意开局。采用此规定以后,黑棋就不会再使用诸如“浦月”、“花月” 之类的必胜开局了。(3)“五手两打”:指黑棋在下盘面上关键的第五手棋时,必须下两步棋,让白方 在这两步棋中任选一步,然后再继续下。采用这一系列规定以后,黑棋先行就再无优势可言。具体算法分析棋盘局势状态表示 棋盘表示主要探讨的是是什么数据结构来表示棋盘上的信息。 一般说来, 这与具体的 棋类知识密切相关。通常,用来描述棋盘及其上棋子信息的是一个二维数组。要让计算机知道棋盘局

13、势状态, 就是要它记住棋盘中哪个位置有黑子, 哪个位置有白 子以及哪个位置是空点。因为五子棋的棋盘是 15 行,15 列,因此可以将棋盘状态的描述 用一个15X 15的二维数组表示。本程序的数据将用如下所示的数据表示:int p1515= 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,

14、0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ;其中,(1)棋盘状态数据由一个15X 15的二维

15、数组表示。(2)用数字“ 1”和“2” 来表示不同的棋子,黑色棋子用“ 2”表示,白色棋子用“ 1”表示。( 3)没有棋子的格 子用“ 0”表示。棋盘中下棋的顺序表示棋局中下棋的顺序也很重要,应该是黑白双方交替下棋。本程序用 t 来判断黑白双方下棋顺序, t 为“0”时由白方下棋, t 为“1”时由黑方 下棋,由于五子棋规则中黑棋先手,所以初始值 t=1 ,即玩家执黑先手。每次落棋后,都 应改变 t 的值, t 在整个对弈过程中都只能为 1 或者为 0,即在任意时刻,都有一方可 以落棋,也只能有一方落棋。具体算法本系统中较复杂的部分是人机对战部分。 下面将简单分析人机对战, 双人对战则省略。

16、电脑要选择有利于它的最佳下法, 就要能判断哪种形势对它最有利。 但往往对一个形势的 判断是很难做到准确的, 特别是一盘棋刚开始的时候, 棋盘的形势不明朗, 即使是专家也 不能做出准确的判断。 为了判断哪种下法最有利, 我们往往需要向后面计算几步, 看看在 走了几步棋之后,局面的形势如何。这被称为“多算胜”,也就是说,谁看得越深远,谁 就可以获胜。这种思维方式被用到了计算机上。 向后面计算的步数越多, 系统开销就越大, 本系统只向后计算一步,根据威胁的优先级来选择落棋的最佳点。轮到电脑下棋时, 电脑先向棋盘搜索合法的落棋点, 即棋盘的空白点。 然后再利用下 面的算法先择最佳落棋点。在每个空白点,

17、都有四个方向需要考虑,即一、|、/四个方向。以下就用O表示电脑所执的黑棋,用表示玩家所执的白棋,用X表示棋盘的空 白点。在设计的时候, 尽可能把所有情况全面考虑, 设置为搜索一个最佳落棋点位置的时 候,需要保证左右展开后碰壁, 之间的空间距离至少要有六格 (而不是五子 ),否则就是死 子。人机对战算法流程是:顺序向下搜索,每次有符合要求的点时,视为最佳落棋点, 并 在该点落棋,同时将t赋值为1,退出搜索并判断是否有一方获胜,然后等待玩家落棋, 再重复这一过程,直到有一方获胜。如图。图人机对战算法流程图(1) ,电脑搜索棋盘里白棋是否有一步获胜的棋,即在同一条线路上有连续五个位 置上,有四颗为白

18、棋,另外一颗为空,这时就不用考虑玩家的棋局,直接就可以获胜。能 直接获胜的棋型有xOOOOx OOOOx,还包括通过四三来形成的活四,包括有 OOxOOOOOxOOxOOOo(2) ,电脑搜索棋盘里黑棋是否有一步获胜的棋,这时就应该让玩家的“活四”变“死四”,这是白棋威胁级别最高的,应立即做出反应。有直接威胁的棋型有%、XXo对于口口口口这种棋型, 其实玩家已经获胜。(3) ,电脑搜索棋盘里白棋是否有可形成活四的棋型,进一步冲四,这时就应该主 动进攻,这种棋型包括xOOOxx、 xOOxOx、xOxOOx。这样的棋只需两步 方可获胜,威胁级别仅次于上面两种。(4) ,电脑搜索棋盘里黑棋是否有可

19、形成活四的棋型,若有,就有阻止冲四,让玩 家的“活三”变死三,这时就体现了电脑的防守策略,这种棋型包括:XXDXX XX. XXXo其中XXX在封堵后还具有威胁性,所以在电脑没有 进攻机会时,也应该考虑这样的棋型的威胁性,因为可以利用这种棋型来造四三来获胜。(5) ,电脑搜索棋盘里白棋是否有可形成活三的棋型,这是获胜的过渡棋,在整个 棋局中非常重要,这样的棋型越多,白棋造活三的机会就越多,是获胜的关键。这种棋型包括:xxOOxx、xxOxOx,由于需要三步获胜,所以优先级比较低。表1是获胜情况分析表,优先级是按所需步数和落棋的顺序来决定的, 在获胜所需步 数相同的情况下,电脑所执的白棋优先级高

20、于黑棋。表1获胜情况分析表棋盘上的情况:获胜所需步数优先级电脑已有任意组活四或已有任意组死四-一-1玩家已有任意组活四或已有任意组死四-一-2电脑已有任意组活三或已有多于一组的死三-二二3玩家已有一组死三和任意组的活二三4玩家已有任意组活三或已有多于一组的死三三5玩家已有一组死三和任意组的活二三64系统流程五子棋的规则如下:(1)棋盘:采用15X15的棋盘。(2)下法玩家一执黑先手, 电脑或玩家二执白后手,轮流在棋盘上选择一个无子的交叉点落子。 无子的交叉点又被称 为空点。(3)输赢判断:黑、白双方有一方的 5颗棋子在横、竖或斜方向上连接成一线 即为该方赢。(4)对于五子棋可分为禁手和无禁手两

21、类,本游戏采用三三禁手。可用15X 15的二维数表示棋盘内各点状态(空、白子、黑子);五子棋游戏规则简单,在每次玩家或电脑落棋后,都要去判断是否游戏是否分出胜负, 如没有,另一方才能继续下棋。一局游戏结束后,可以选择再来一盘,这时将棋盘数据清 空,又开始新的棋局。系统流程如图 2所示。开始游戏玩家1下棋玩家2下棋否本局结束清空棋盘游戏结束图5-2系统流程图5系统功能实现窗口设计根据Windows API函数来编写应用程序的顺序结构:调用WinMain函数开始执行-定义窗口类一初始化窗口类T窗口的实例化T通过消息循环获取消息并将消息发送给消 息处理函数做出相应的操作。我们首先应该创建一个窗口,

22、生成一个窗口主要有两步: 定义窗口类和初始化窗口类。 首先用 InitWindowsClass 来定义一个窗口类,窗口类事实上是 struct 结构体 , 内 部有 10个分量,他们是用来于初始化窗口类对象而用的。根据函数里声明的各个参数来 执行,它在里面定义了窗口类对象、 声明了窗口的类对象名称、应用程序实例句柄、消息 处理函数名、光标样式和窗口背景等,其它的都设置为初始值。函数关键语句: BOOL InitWindowsClass(HINSTANCE hInstance) =(HBRUSH)(CreateSolidBrush(RGB(240,240,240) ;=LoadCursor(NU

23、LL,IDC_ARROW;)=hInstance ;=WndProc;=WinFill ;return RegisterClass(&WndClass) ;然后用 InitWindows 函数来初始化窗口类,在窗口类对象的初始化过程中,我们定 义了窗口的一些简单一般特征, 比如背景颜色呀,光标等等。但是在利用 CreateWindow 创 建窗口的时候可以设置更多的细节,比如窗口标题这些。函数主要参数:hWnd=CreateWindow(WinFill ,五子棋游戏 ,WS_OVERLAPPEDWIN,DOW0,0,1024,768,hInstance) ;其中,定义窗口类对象名称为 WinF

24、ill ,窗口标题为 五子棋游戏 ,窗口风格为 WS_OVERLAPPEDWINDOW此窗口是一个层叠式窗口 ,含有边框、标题栏、系统菜单、最 大最小化按钮的窗口。棋盘设计程序的实现上,首先完成界面的设计, 在界面的设计上,使用了二维数组的棋盘格式, 考虑到五子棋的落子后, 是不会再次移动的, 所以采用划直线的方法模拟一个棋盘。 棋盘 大小为560X 560,起始坐标为(200, 100),每个格子大小为(40, 40)。首先用 GetStockObject 函数创建一个画笔和画刷, 用 SelectObject 选择当前使用 的画笔和画刷, 画笔的作用是画棋盘的边框及格子, 画刷的作用是填充

25、棋盘的背景色, 先 取画笔后我们才能用它来画棋盘。 为了增加棋盘的美观, 画刷颜色选取灰色, 与窗口的银 白色分开。然后用 Rectangle 函数画一个矩形,就是棋盘的边框,棋盘的左上角坐标为( 200, 100),右下角坐标为( 760, 660)再画棋盘的各横轴及纵轴, 在画每一条直线前, 需用 MoveToEx 函数指定当前画笔的 位置,然后用 LineTo 函数从指定这点开始画一条到指定的另外一点的直线。函数段为: hPen=(HPEN)GetStockObject(BLACK_PEN;)SelectObject(hDC,hPen) ;hBrush=(HBRUSH)GetStockO

26、bject(LTGRAY_BRUS;H)SelectObject(hDC,hBrush) ;Rectangle(hDC,200,100,760,660) ;MoveToEx(hDC,200,140,NULL) ; / 第一条横线在这些都完成了之后, 对界面进行最后的完善, 通过添加按钮来使用户在和电脑对弈 的同时,可以从这些按钮中获得必要的帮助。本系统一共设置了四个按钮:“和棋”、“再来一盘”,“退出”和“帮助”。它们 的画法采用文本框模拟按钮, 先画一个矩形, 在矩形里填充提示信息, 用鼠标单击事件来 响应各个按钮。因此综上所述, 在界面的设计上,主要有两个模块,一个是棋盘模块,一个是按钮模

27、 块。按钮功能的实现本系统一共设置了四个按钮:“和棋”、“再来一盘”,“退出”和“帮助”。它们 的画法采用文本框模拟按钮, 先画一个矩形, 在矩形里填充提示信息, 用鼠标单击事件来 响应各个按钮。这四个按钮基本满足了一般玩家的需求。按钮的画法: 先在主函数里面定义四个变量, 分别存储按钮的标题, 然后在棋盘外画 四个矩形,然后在四个矩形里分别显示按钮的标题。具体实现方法:“退出”按钮:Rectangle(hDC,770,110,820,135) ;TextOut(hDC,780,115,lpsz1,strlen(lpsz1) ;if(i770&i495&j=100&i=180&j=375) /

28、 再来一盘for(m=0 ; m=a; m+)cm=0 ;dm=0 ;em=0 ;fm=0 ;for(m=0 ; m=14;m+)for(n=0 ; n=770&i=110&j=135)MessageBox(hWnd, 需帮助 请在黑棋下棋时单击 帮助 n 一方获胜后可单击 退 出退出程序 n 双方僵持情况下可 和棋 n 如有兴趣请 再来一盘 ,帮助, MB_OK;) 画法和前面的一样, 这里面使用了文本换行, 在每行之间用 n 将需要换行的文字隔 开,于是在单击这个按钮后,就会看到有多行文字的消息框出现。胜负判断在五子棋游戏中, 判断胜负是很重要的一项工作,最先在棋盘横向、 竖向、斜向形成

29、五颗连续相同颜色的棋子的一方为胜。(1)横向:横向比较好判断,纵坐标不变,横坐标向右递增,有五颗连续的相同颜 色的棋子即获胜,所以横坐标的范围不必是( 0,14),只搜索( 0, 10)即可。(2)纵向:与横向一样,这时横坐标不变,纵坐标向下递增,所以纵坐标的搜索范 围可以缩小到( 0,10)。(3)“ ”向:这时搜索应从左上角开始,横纵坐标同时递增,横纵坐标的搜索范 围都是( 0, 10)。(4)“”向:这时纵坐标是向下递增,但横坐标是向左递减的,所以搜索范围就 不能从左上角( 0, 0)开始,应从( 0, 4)开始,横坐标的搜索范围是( 4, 14),纵坐 标的搜索范围是( 0, 10)。下面就以“”向为例,在程序中具体实现过程:for(m=0;m=10;m+)for(n=4;n=14;n+)if(pmn=1&pm+1n-1=1&pm+2n-2=1&pm+3n-3=1&p

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论