毕业设计(论文)基于VC的五子棋游戏软件的设计与开发

上传人:仙*** 文档编号:33888268 上传时间:2021-10-19 格式:DOC 页数:20 大小:421.03KB
收藏 版权申诉 举报 下载
毕业设计(论文)基于VC的五子棋游戏软件的设计与开发_第1页
第1页 / 共20页
毕业设计(论文)基于VC的五子棋游戏软件的设计与开发_第2页
第2页 / 共20页
毕业设计(论文)基于VC的五子棋游戏软件的设计与开发_第3页
第3页 / 共20页
资源描述:

《毕业设计(论文)基于VC的五子棋游戏软件的设计与开发》由会员分享,可在线阅读,更多相关《毕业设计(论文)基于VC的五子棋游戏软件的设计与开发(20页珍藏版)》请在装配图网上搜索。

1、基于基于 VC 的五子棋游戏软件的设计与开发的五子棋游戏软件的设计与开发摘摘 要要人工智能是近年来很活跃的研究领域之一,计算机博弈是人工智能研究的一个重要分支,它的研究为人工智能带来了很多重要的方法和理论,产生了广泛的社会影响和学术影响。五子棋本身就是一款益智休闲游戏,规则简单。五子棋不仅能增强思维能力,提高智力,而且富含哲理,有助于修身养性。本系统就以五子棋游戏作为研究课题,对五子棋的算法与规则做了研究,阐述了如何在 Microsoft Visual C+ 下用 API 函数来开发 Windows 下的游戏并给出了具体的实现。本系统以五子棋为例实现的主要功能有棋盘、棋子的输出、人机对下等。本

2、系统还有和棋、再来一盘、帮助等辅助功能。关键字:关键字:五子棋;Microsoft Visual C+; API 函数The Design and Exploitation of Gobang Game with VCAbstractArtificial intelligence is one of the brisk research areas. The chess game on computer is an important branch of the research on artificial intelligence. The researches on chess game

3、bring plenty of important methods and theories for researching on artificial intelligence, and cause broad influences on society and academe. Gobang chess game means five pieces on one line, is a sort of game, which is full of wisdom, leisure and benefits, and the rules of it are very simple. This p

4、aper focuses on the study of this chess game, and uses the Microsoft Visual C+ to explore the Windows game. This system mainly uses the function of Visual C+/API to realize the export of chessboard and checker, and people can play with computer. Moreover, this system has the assistant functions such

5、 as “Deuce”、 “ Play Again”、 “ Help” and so on.Key words: Gobang; Microsoft Visual C+; API Function目目 录录论文总页数:21 页1引言.12开发工具和应用平台.12.1MICROSOFT VISUAL C+ 的介绍.12.2WINDOWS 编程的特点.23系统需求分析.43.1系统需求.43.2功能需求.43.3系统运行环境.44五子棋算法分析.54.1五子棋的发展.54.2五子棋的规则.64.3具体算法分析.74.3.1 棋盘局势状态表示.74.3.2 棋盘中下棋的顺序表示.74.3.3 具体算

6、法.75系统流程.96系统功能实现.106.1窗口设计.106.2棋盘设计.116.3按钮功能的实现.126.4胜负判断.137系统测试与分析.147.1运行结果.147.2问题的发现与解决.17结 论.17参考文献.17致 谢.19声 明.20附 录.211 引言引言目前网络上有很多五子棋子游戏,玩法简单,娱乐性也很高。五子棋不仅能增强思维能力,提高智力,而且富含哲理,有助于修身养性。通过对五子棋的设计与开发,了解和掌握游戏开发的原理与方法。让电脑像人脑一样思考,一直是人工智能发展的最终目标。作为一门边缘学科,它有诸多的研究领域,博弈即为其中之一。博弈的参加者可以是个人、集体、某种生物或机器

7、,他们都力图用自己的“智力”去击败对手。博弈为人工智能提供了一个极好的试验场所,人工智能中的许多概念和方法都是从博弈程序中提炼出来的,人工智能中大多以下棋为例来研究博弈规律。本文以五子棋为入口,设计了一个五子棋人机对弈系统,以实现人和计算机的博弈,最终的目的是为了建立一个有具体规则的五子棋平台。人机对弈程序的要点,至少应具备以下 4 个部分:(1) 状态表示:某种在机器中表示棋局的方法,能够让程序知道博弈的状态。(2) 走法产生:产生合法走法的规则,以使博弈公正地进行,并可判断对手是否乱走。(3)搜索技术:从所有合法的走法中选择最佳的走法技术。(4) 对弈界面。本系统主要研究使用 Micros

8、oft Visual C+ 以 Windows 窗体程序对五子棋游戏进行开发与设计,让大家了解用 Microsoft Visual C+ 开发 WINDOWS 小游戏的过程。2 开发工具和应用平台开发工具和应用平台2.12.1MicrosoftMicrosoft VisualVisual C+C+ 的介绍的介绍C 语言是一种高效率的计算机程序设计语言,而 Visual C+ 则是在它的基础上开发出的一套功能强大的程序设计工具。对于游戏程序,Visual C+ 可以说是最佳的开发工具。第一, Visual C+ 具有优异的运行速度。第二, Visual C+ 可以直接访问内存。Visual C+

9、 自诞生以来,一直是 Windows 环境下最主要的应用开发系统之一。Visual C+ 不仅是 C+ 语言的集成开发环境,而且与 Win32 紧密相连,所以,利用 Visual C+ 开发系统可以完成各种各样的应用程序的开发,从底层软件直到上层直接面向用户的软件。而且,Visual C+ 强大的调试功能也为大型复杂软件的开发提供了有效的排错手段。Visual C+ 是一个很好的可视化编程工具,使用 Visual C+ 环境来开发基于 Windows 的应用程序大大缩短了开发时间,而且它的界面更友好,便于程序员操作。开发环境是程序员同 Visual C+ 的交互界面,通过它程序员可以访问 C+

10、 源代码编辑器、资源编辑器,使用内部调试器,还可以创建项目文件。所谓 API 就是应用程序编程接口(Application Programming Interface), Windows API 是 Windows 系统和 Windows 应用程序间的标准程序接口。API 为应用程序提供系统的各种特殊函数及数据结构定义,Windows 应用程序可以利用上千个标准 API 函数调用系统功能。在 Visual C+中使用 Windows API 是相当容易的, 只要在项目中设定所要使用的函数库并引用正确的头文件,就可以使用 Windows API 中的函数与数据类型。根据 Windows API

11、函数完成的功能,可将其分为三类。(1)窗口管理函数:实现窗口函数的创建、移动和修改功能。(2)图形设备函数(GDI):实现与设备无关的图形操作功能。(3)系统服务函数:实现与操作系统有关的多种功能。用 Windows API 函数来编写应用程序的顺序结构为:调用 WinMain 函数开始执行定义窗口类初始化窗口类窗口的实例化通过消息循环获取消息并将消息发送给消息处理函数做出相应的操作。2.22.2WindowsWindows 编程的特点编程的特点所有的 Windows 程序都具有类似的结构和相同的“外观”,所以用户不用花很多的时间来学习新程序的用法。具有这种一致的用户界面是使用 Windows

12、 内部子模序来创建的。所有的菜单、对话框、滚动条等都具有同样的键盘的鼠标接口,Windows 自己处理这项工作,而不是交给应用程序完成。Windows 编程有以下几个特点:(1)事件驱动的程序设计 (2)消息循环与输入 (3)图形输出 (4)用户界面对象 (5)资源共享编写一个典型的 Windows 应用程序,一般需要:(1)C, CPP 源程序文件(2)H,HPP 头文件 (3)资源文件包含了应用程序所使用的全部资源定义,通常以 .RC 为后缀名。资源是应用程序所能够使用的一类预定义工具中的一个对象,包括:字符串资源、加速键表、对话框、菜单、位图、光标、工具条、图标、版本信息和用户自定义资源

13、等。Windows 消息机制:Windows 是一个消息驱动的操作系统。一个消息由一个消息名称(UINT 类型)和两个参数(WPARAM,LPARAM)构成。当用户进行了输入或者是窗口的状态发生改变时,系统会发送消息到某一个窗口。例如,当鼠标左键单击之后会有 WM_LBUTTONDOWN 消息发送。用户也可以定义自己的消息名称,也可以利用自定义消息来发送通知和传送数据。一个消息必须由一个窗口接收。在窗口的消息处理函数中可以对消息进行分析,对自己感兴趣的消息进行处理。如果希望在窗口中进行图形输出就必须对 WM_PAINT 进行处理。为了应付那些没有被响应的消息,Windows 为窗口编写了默认的

14、窗口消息处理函数,窗口过程将负责处理那些程序中没有处理的消息。正因为有了这个默认窗口过程,程序员才可以利用 Windows 的窗口进行开发而不必过多关注窗口各种消息的处理。提到消息就必须说到窗口句柄,系统通过窗口句柄在整个操作系统中唯一标识一个窗口。发送消息时必须指定一个窗口句柄表明该消息由那个窗口接收。而每个窗口都会有自己的窗口消息处理函数,用户的输入会被正确的处理。在 Windows 操作系统中维护着一个或者多个消息队列,所有产生的消息都会被放入到队列中。系统在队列中每次取出一条消息,根据消息的接收句柄而将 该消息发送给拥有该窗口的消息循环。每一个运行的程序都有自己的消息循环,在循环中得到

15、属于自己的消息并根据接收窗口的句柄调用相应的窗口过程。窗口函数定义了应用程序对接收到的不同消息的响应,其中包括了应用程序对各种可能接收到的消息的处理过程,是消息处理分支控制语句的集合。通常窗口函数由一个或多个 switch 语句组成。每条 case 语句对应一种消息,当应用程序接收到一个消息时,相应的 case 语句被激活并执行相应的响应程序模块。窗口函数是应用程序处理接收到的消息的函数。其中包含了应用程序对各种可能接收到的消息的处理过程。在本系统中一共用到了 WM_PAINT、WM_LBUTTONDOWN、WM_LBUTTONUP、WM_DESTROY 四种消息:LRESULT CALLBA

16、CK WndProc(HWND hWnd,UINT iMessage,UINT wParam,LONG lParam)switch(iMessage) case WM_PAINT: break;case WM_LBUTTONDOWN: case 、WM_LBUTTONUP: case WM_DESTROY: default:return(DefWindowProc(hWnd,iMessage,wParam,lParam);WM_LBUTTONDOWN 是在玩家在鼠标单击左键后产生的,这时通过 GetCursorPos(&pt) 函数来判断鼠标是否处在落棋的合法点(包括按钮上) ,如果是合法的落

17、棋点,就返回棋子状态数据等参数,这时 WM_PAINT 函数在收到这些消息后就开始按照得到的参数来重绘棋盘,用户在松开鼠标后又产生 WM_LBUTTONUP 消息,电脑在通过选择最佳落棋点之后,又返回给 WM_PAINT,这样就产生了消息循环,直到接收到 WM_QUIT 消息才退出程序, PostQuitMessage 函数的作用就是向应用程序发出 WM_QUIT 消息,请求退出。DefWindowProc 函数是系统默认的处理过程,以保证所有发送到该窗口的消息均得以处理。3 3 系统需求分析系统需求分析3.13.1系统需求系统需求五子棋作为一款休闲益智游戏,它最大的优点在于游戏规则家喻户晓,

18、简单,上手快,趣味性强,所以受广大用户青睐,在各大提供棋牌类游戏的平台都可以看到玩五子棋游戏的人很多。休闲益智游戏中等级并不是最重要的追求目标,通过对游戏规则的熟悉,能很快上手掌握其操作方式,也更适合男女老幼全家共同娱乐,花费时间简短,速战速决,在短时间内感受到游戏的乐趣,完全享受气氛轻松活跃的游戏过程。此种娱乐方式既不耽误时间也能轻松调剂娱乐,充分适合现代人们的娱乐需求。更主要的是开发了人的智力,成为年轻一代最流行的游戏,据统计,五子棋游戏的玩家中,学生占了接近三分之一的比例,对学生的智力健康成长起一定作用,正所谓休闲娱乐两不误。3.23.2功能需求功能需求要求系统界面简洁,操作方便,把五子

19、棋游戏规则中最基本的规则体现出来,比如“和棋”、“重新开局”等。五子棋还有一大特点就是速战速决,电脑应在很短时间内就应做出判断,并能提供一定的帮助,违反游戏规则的时候应立即指出。在正规五子棋比赛中,都设置了“禁手”这一规则,但广大玩家之所以喜爱五子棋游戏,就是因为五子棋游戏规则简单,“禁手”这一规则很复杂,所以在本系统中,采用“无禁手”的规则,让规则简单化。3.33.3系统运行环境系统运行环境 Win 9X/Win ME/Win NT/Win 2000/Win XP/Win 2003/4 4 五子棋算法分析五子棋算法分析4.14.1五子棋的发展五子棋的发展五子棋是起源于中国古代的传统黑白棋种之

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

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

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

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

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

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

26、棋形不利于己方,可提出交换,即执白棋一方变为执黑棋一方此方法不适用于指定开局打法,而用于随意开局。采用此规定以后,黑棋就不会再使用诸如“浦月”、“花月”之类的必胜开局了。(3)“五手两打”:指黑棋在下盘面上关键的第五手棋时,必须下两步棋,让白方在这两步棋中任选一步,然后再继续下。 采用这一系列规定以后,黑棋先行就再无优势可言。 4.34.3具体算法分析具体算法分析4.3.14.3.1 棋盘局势状态表示棋盘局势状态表示要让计算机学会下棋,首先就要把下棋问题表示成计算机可理解的形式,即把五子棋问题形式化,存在计算机中,并能让搜索算法对这些数据进行操作。需要在计算机中表示的主要问题有棋盘局势状态及落

27、子的顺序等。棋盘表示主要探讨的是是什么数据结构来表示棋盘上的信息。一般说来,这与具体的棋类知识密切相关。通常,用来描述棋盘及其上棋子信息的是一个二维数组。要让计算机知道棋盘局势状态,就是要它记住棋盘中哪个位置有黑子,哪个位置有白子以及哪个位置是空点。因为五子棋的棋盘是 15 行,15 列,因此可以将棋盘状态的描述用一个 1515 的二维数组表示。本程序的数据将用如下所示的数据表示: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,

28、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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,

29、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)棋盘状态数据由一个 1515 的二维数组表示。(2)用数字“1”和“2”来表示不同的棋子,黑色棋子用“2”表示,白色棋子用“1”表示。(3)没有棋子的格子用“0”表示。4.3.24.3.2 棋盘中下棋的顺序表示棋盘中下棋的顺序表示棋局中下棋的顺序也很重要,应该是黑白双方交替下棋。本程序用 t 来判断黑白又方下棋顺序,t 为“0”时由红方下棋,t 为“1”时由黑方下棋,由于五子棋规则中黑棋先手,所以初始值 t=1,即玩家执黑先手。每次落棋后,都应改变 t 的值,t 在整个对弈过程中

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

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

32、五个位置上,有四颗为红棋,另外一颗为空,这时就不用考虑玩家的棋局,直接就可以获胜。能直接获胜的棋型有、,还包括通过四三来形成的活四,包括有、。二,电脑搜索棋盘里黑棋是否有一步获胜的棋,这时就应该让玩家的“活四”变“死四”,这是红棋威胁级别最高的,应立即做出反应。有直接威胁的棋型有、。对于这种棋型,其实玩家已经获胜。三,电脑搜索棋盘里红棋是否有可形成活四的棋型,进一步冲四,这时就应该主动进攻,这种棋型包括、。这样的棋只需两步方可获胜,威胁级别仅次于上面两种。四,电脑搜索棋盘里黑棋是否有可形成活四的棋型,若有,就有阻止冲四,让玩家的“活三”变死三,这时就体现了电脑的防守策略,这种棋型包括:、。其中

33、在封堵后还具有威胁性,所以在电脑没有进攻机会时,也应该考虑这样的棋型的威胁性,因为可以利用这种棋型来造四三来获胜。五,电脑搜索棋盘里红棋是否有可形成活三的棋型,这是获胜的过渡棋,在整个棋局中非常重要,这样的棋型越多,红棋造活三的机会就越多,是获胜的关键。这种棋型包括:、,由于需要三步获胜,所以优先级比较低。表是获胜情况分析表,优先级是按所需步数和落棋的顺序来决定的,在获胜所需步数相同的情况下,电脑所执的红棋优先级高于黑棋。表 1 获胜情况分析表棋盘上的情况:获胜所需步数优先级电脑已有任意组活四或已有任意组死四一1玩家已有任意组活四或已有任意组死四一2电脑已有任意组活三或已有多于一组的死三二3玩

34、家已有一组死三和任意组的活二三4玩家已有任意组活三或已有多于一组的死三三5玩家已有一组死三和任意组的活二三65 系统流程系统流程五子棋的规则如下:(1)棋盘:采用 1515 的棋盘。(2)下法玩家执黑先手,电脑执白后手,轮流在棋盘上选择一个无子的交叉点落子。无子的交叉点又被称为空点。(3)输赢判断:黑、白双方有一方的 5 颗棋子在横、竖或斜方向上连接成一线即为该方赢。(4)对于五子棋可分为禁手和无禁手两类,本游戏采用无禁手,这样就对执黑方很有力,获胜的机率非常大。可用 1515 的二维数表示棋盘内各点状态 (空、白子、黑子) ;五子棋游戏规则简单,在每次玩家或电脑落棋后,都要去判断是否游戏是否

35、分出胜负,如没有,另一方才能继续下棋。一局游戏结束后,可以选择再来一盘,这时将棋盘数据清空,又开始新的棋局。系统流程如图 2 所示。图 2 系统流程图6 系统功能实现系统功能实现6.16.1窗口设计窗口设计根据 Windows API 函数来编写应用程序的顺序结构:调用 WinMain 函数开始执行定义窗口类初始化窗口类窗口的实例化通过消息循环获取消息并将消息发送给消息处理函数做出相应的操作。我们首先应该创建一个窗口,生成一个窗口主要有两步:定义窗口类和初始化窗口类。首先用 InitWindowsClass 来定义一个窗口类,窗口类事实上是 struct 结构体,内部有 10 个分量,他们是用

36、来于初始化窗口类对象而用的。根据函数里声明的各个参数来执行,它在里面定义了窗口类对象、声明了窗口的类对象名称、应用程序实例句柄、消息处理函数名、光标样式和窗口背景等,其它的都设置为初始值。函数关键语句:BOOL InitWindowsClass(HINSTANCE hInstance) WndClass.hbrBackground=(HBRUSH)(CreateSolidBrush(RGB(240,240,240); WndClass.hCursor=LoadCursor(NULL,IDC_ARROW);WndClass.hInstance=hInstance;WndClass.lpfnWnd

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

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

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

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

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

42、=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 将需要换行的文字隔开,于是在单击这个按钮后,就会看到有多行文字的消息框出现。6.46.4胜负判断胜负判断在五子棋游戏中,判断胜负是很重要的一项工作,最先在棋盘横向、竖向、斜向形成五颗连续相同颜色的棋子的一方为胜。(1)横向:横向比较好判断,纵坐标不变,横

43、坐标向右递增,有五颗连续的相同颜色的棋子即获胜,所以横坐标的范围不必是(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

44、+)if(pmn=1&pm+1n-1=1&pm+2n-2=1&pm+3n-3=1&pm+4n-4=1&g=1)MessageBox(hWnd,黑棋赢,结束,MB_OK);g=0;else if(pmn=2&pm+1n-1=2&pm+2n-2=2&pm+3n-3=2&pm+4n-4=2&g=1)MessageBox(hWnd,红棋赢,结束,MB_OK);g=0;一方获胜后,会弹出消息框,提示一方获胜游戏结束,并将 g 置为 0,这时游戏就不能再继续,对下棋、 “和棋”等起了屏蔽作用。在 if 语句里面有 g=0 这个条件,是限制游戏结束后重复判断胜负,只要一方获胜,就不能对棋盘做任何操作,只有对

45、按钮采取操作有效。7 系统测试与分析系统测试与分析7.17.1运行结果运行结果本系统在 Visual C+ 6.0 下调试通过,调试成功后,打开 debug 目录下five.exe,开始运行五子棋游戏。我就从界面、按钮功能、胜负的判断几个方面来测试系统。1 界面:该窗口具有最大化、最小化关闭按钮,系统菜单,标题栏,边框,背景色为银白色,棋盘大小为 1515,背景为灰色。图 3 游戏界面2 画棋子:本系统能够在棋盘方格的交叉处画棋子,棋子半径为 10。图 4 画棋子3 判断胜负:当棋盘上“一” 、 “” 、 “” 、 “”四个方向有同一种颜色的五颗棋连成同一条直线时,系统会弹出提示消息框表示已经分出胜负。图 5 胜负判断4 “和棋”按钮:在游戏过程中,可以单击“和棋”按钮,来中断棋局。图 6 和棋

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

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

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


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