




已阅读5页,还剩41页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
西安培华学院本科毕业论文(设计) 五子棋游戏程序设计与开发题目 五子棋游戏程序设计与开发 作者姓名 指导教师 二级学院 电气信息工程学院专 业 计算机科学与技术学 号 4B062122 2010年4月15日IV五子棋游戏程序设计与开发摘 要本文论述的是采用C+语言开发的一个单机版的五子棋小游戏,包括棋盘界面的设计、游戏菜单的设计、游戏的设计、悔棋和初始化等设计。在查阅相关资料的同时,完成系统任务需求分析和系统功能描述,制订系统设计方案,采用C+语言编程实现,在完成课题设计的基础上进行论文的撰写。程序设计过程中遇到的难题,有如何实现黑白棋子循环,如何判断胜负,如何实现悔棋,如何使屏幕在下棋后不闪烁等问题,我经过认真思考和反复调试,抓住问题规律和五子棋规则,一一解决了这些问题,从而实现了游戏的基本功能。五子棋小游戏经过不断的开发和完善,已从1.0版本升级到了目前的3.0版本,基本功能已实现,但还有很大的改进空间和需要完善的功能,比如人机对弈功能和网络联机功能。关键词:五子棋;棋盘界面;游戏菜单;悔棋;初始化Gobang game design and development processAbstractAccording to my courtyard is the C+ program about Gobang Game , designs a set to be imperative based on the computer technology windows program. The Gobang program include chessboard interface, Menu, can be to retract a false move in a chess game and Initialization . Including system analysis, system function design, contact surface and related code design. This system major function by means of C+ language, Write this discourse based on the Gobang program Game.Programming problems encountered in the process, there is how Othello child circulation, how to determine the outcome, and how to undo, how to make the screen does not flicker in the game of chess and other issues, after my think better of and debug again and again, get hold of the disciplinarian of the problem, and according to the rules of Gobang, I put the axe in the helve with exert myself. I accomplished all the basic functions consequently. Gobang game through continuous development and improvement from the 1.0 version of the upgrade to the current 3.0 version, the basic function has been achieved. But there is still much room for improvement and the need to improve the functionality, such as man-machine games on online functionality and network capabilities.Key Words:Gobang;Interface;Menu;Retract;Initialization 目 录摘 要IAbstractII目 录III1 绪 论11.1 五子棋游戏介绍11.2 游戏开发背景21.3 开发环境及运行环境21.3.1 开发环境21.3.2 运行环境22 系统分析32.1 可行性分析32.1.1 技术可行性32.1.2 经济可行性32.1.3 可行性研究结论32.2 需求分析42.2.1 功能需求42.2.2 数据存储42.3 设计思想43 系统设计63.1 总体设计63.1.1 系统功能模块设计63.1.2 文件组织结构73.2 详细设计83.2.1 棋盘类设计83.2.2 程序初始化设计93.2.3 判断胜负算法93.2.4 悔棋功能设计104 系统设计编程与实现134.1 系统设计编程134.1.1 成员变量定义134.1.2 成员函数定义134.2 消息机制和主界面实现144.2.1 消息机制说明144.2.2 主界面设计145 测试与运行分析175.1 程序测试175.2 测试结果175.3 运行分析18结 论19参考文献20致 谢21附 录22附录A22附录B251 绪 论1.1 五子棋游戏介绍传统五子棋的棋子分为黑白两色,采用1919棋盘,棋子放置于棋盘线交叉点上。两人对局,各执一色,轮流下一子,先将横、竖或斜线的5个或5个以上同色棋子连成不间断的一排者为胜。因为传统五子棋在落子后不能移动或拿掉,所以也可以用纸和笔来进行游戏。五子棋,日文亦有“连五子、五子连、串珠、五目、五目碰、五格、五石、五法、五联、京棋”等多种称谓,英文则称之为“FIR (Five In A Row的缩写)、Gomoku(日语“五目”的罗马拼音)、Gobang、connect 5、mo-rphion”。捷克语piskvorky,韩语omok许多国家的人对五子棋都有不同的爱称,例如,韩国人把五子棋称为“情侣棋”,暗示情人之间下五子棋有利于增加情感的交流;欧洲人称其为“绅士棋”,代表下五子棋的君子风度胜似绅士;日本人则称其为“中老年棋”,说明五子棋适合中老年人的生理特点和思维方式;美国人喜欢将五子棋称为“商业棋”,也就是说,商人谈生意时可边下棋边谈生意,棋下完了生意也谈成了。五子棋相传起源于四千多年前的尧帝时期,比围棋的历史还要悠久,可能早在“尧造围棋”之前,民间就已有五子棋游戏。有关早期五子棋的文史资料与围棋有相似之处,因为古代五子棋的棋具与围棋是完全相同的。在上古的神话传说中有“女娲造人,伏羲做棋”一说,增山海经中记载:“休舆之山有石焉,名曰帝台之棋,五色而文状鹑卵。”李善注引三国魏邯郸淳艺经中曰:“棋局,纵横各十七道,合二百八十九道,白黑棋子,各一百五十枚”。这段虽没明讲是何种棋类,但至少知道远古就以漂亮的石头为棋子。因而规则简单的五子棋也可能出自当时,并是用石子作棋子。亦有传说,五子棋最初流行于少数民族地区,以后渐渐演变成围棋并在炎黄子孙后代中遍及开来。在古代,五子棋棋具虽然与围棋相类同,但是下法却是完全不同的。正如辞海中所言,五子棋是“棋类游戏,棋具与围棋相同,两人对局,轮流下子,先将五子连成一行者为胜。”1.2 游戏开发背景五子棋游戏深受我们宿舍人喜爱,茶余饭后舍友总是相互切磋几盘,他们用方格作业本当棋盘,拿红黑颜色笔画在方格本子上画圈当棋子。为了使同学们不再浪费纸张,提高环保意识,也为了改变这一落后的游戏方法,我在Windows系统环境下利用Visual C+ 6.0软件,使用C+语言,设计了这个五子棋游戏程序,使同学们脱离了用纸笔游戏的方式。同时它能自动判断输赢,规范了游戏规则,使大家能够更好的享受五子棋给我们带来的乐趣。1.3 开发环境及运行环境1.3.1 开发环境(1)Intel CORE2 Duo CPU T5870 2.00GHz,3.96GB内存,250GB硬盘;(2)Microsoft Windows XP Professional;(3)Microsoft Visual C+ 6.0;(4)Microsoft Visual Studio 2005; (5)Microsoft Developer Network for Visual Studio.NET 2005。1.3.2 运行环境(1)Intel Pentium 3及以上处理器,32M以上内存,4G以上硬盘;(2)Microsoft Windows 9X/NT操作系统;(3)800*600或以上的屏幕分辨率。2 系统分析2.1 可行性分析2.1.1 技术可行性一个完整的游戏程序具有以下优越性:提供给玩家一个人性化的、可玩性高的娱乐程序,可以丰富玩家们的生活。为了适应新形势的发展,进行了这一游戏程序的初步设计工作,也可以说是做一个初步的探索,希望它能够在娱乐休闲时发挥便捷、人性化的作用,丰富人们的课余文化和娱乐生活。该五子棋游戏程序是以Windows API传统编程在Visual C+ 6.0为平台,以造福广大玩家为目的,对游戏程序进行科学的实现和加工。2.1.2 经济可行性经济可行性主要依据是成本/效益分析,该程序的目标是以最低的成本,在最短的期限内开发的游戏程序。程序能减少很多不必要资源的使用,不用像以前那样用冗余的纸张来娱乐、消遣。大大节省了能源。并且计算机的存储与快速运行功能大大提高了游戏的效率。方便快速的操作,可减少游戏玩家等待的时间,又减少因游戏娱乐而造成的大量资源的使用,并且操作非常简单,可减少许多不很必要的麻烦,这无论从物质上还是精神上都具有相当大的效益。目标程序开发需求比较低,加上具有成熟的软硬件环境,所以在软硬件的支出上比较低。而且,目标程序并不是十分的复杂。当程序开发完实际运行后,将很大程度上提高广大玩家的积极性,在为使用者带来便利的同时,也为程序的进一步推广创造了条件。这带来的经济回报将远超过支出,并且最重要的是该游戏的开发可以使我们对程序的开发有全面的认识。从经济角度考虑,此五子棋游戏程序设计开发可行。2.1.3 可行性研究结论依据以上因素,本五子棋游戏设计与开发项目不仅方便快捷、高效,而且使用效益比较好,从而使本程序开发者相信该系统开发出来之后将取得的成功。综上所述,此项目在技术、经济上是完全可行的。2.2 需求分析五子棋游戏程序是一个新兴的、集信息科学、系统科学及计算机科学为一体的综合性学科,研究的是玩家娱乐活动的全过程,以便有效的研发程序,提供各类决策信息,辅助广大游戏玩家在茶余饭后闲暇时的消遣。五子棋游戏程序它具备娱乐消遣、悔棋、判断输赢等功能。2.2.1 功能需求(1)对游戏程序的设计;黑白棋子交替先手,在上一局中赢方在下一局中具有先行的权力。(2)对游戏胜负的判断;根据每个棋子颜色标志位的颜色,搜索是否有5个连续相同的,若有,则为胜利。(3)悔棋;在进行悔棋之后,对该棋子进行初始化。(4)音效设置; (5)实时计分;一目了然游戏的进行情况。2.2.2 数据存储数据存储主要用在悔棋功能中,用以记录棋子信息,以便保存游戏的棋子记录,以便用于悔棋操作。其中List链表用于存储棋子显示信息,二维数组用于存储棋盘十字交叉点信息。2.3 设计思想 在窗体中通过鼠标左键画圆圈的一个简单示例,启发制作一个五子棋程序。在画圆示例中,主要通过两个系统消息驱动程序执行,即WM_LBUTTONDOWN和WM_POINT。(1)WM_LBUTTONDOWN:单击鼠标左键的消息X = LOWORD(lParam); /鼠标坐标xY = HIWORD(lParam); /鼠标坐标y InvalidateRect(hWnd,NULL,1); /系统刷新函数 在鼠标单击左键的消息中,定义了X与Y两个变量,分别用来存储当前鼠标光标在屏幕上的纵横坐标点。其中,系统消息字lParam的高字节存储的是纵坐标,低字节存储的是横坐标;另一个系统消息字wParam存储的是一个整数,表示的是当前鼠标按键状态,如单击与双击。InvalidateRect函数用来传递到WM_POINT消息模块。(2)WM_POINT:图形绘制消息BOOL Ellipse(HDC hdc,X-30,Y-30,X+30,Y+30)WM_POINT消息是用于绘制窗口显示图形。Ellipse函数是绘制椭圆图形的API函数,其中,HDC是当前窗口的句柄,X-30、Y-30与 X+30、Y+30两个坐标点在窗体上确定了一个矩形区域,矩形区域的内切圆就是显示出来的结果。如下图2.1所示。(X-30,Y-30)(X+30,Y+30)图2.1 Ellipse函数示意图通过上面的方法就可以在窗体上利用鼠标在指定区域画出一个圆圈,此实例是五子棋程序设计的基本思路。按照这个思路,我们将五子棋棋盘添加到窗体上,将鼠标光标换为棋子,将棋盘进行必要的初始化,对棋子进行实例化,即可实现五子棋的基本程序。在此思想的指导下,就可以通过棋子结构的属性信息,以及棋盘十字交叉点中的属性进行程序的设计与开发,使其满足五子棋的要求与功能。3 系统设计系统设计的基本目的就是回答“程序应该如何实现?”这个问题。通过这个阶段的工作将划分出组成系统的物理元素程序、文件、数据库、人工过程和文档等等,但是每个物理元素仍然处于黑盒子级,这些黑盒子里的具体内容将在以后仔细设计。设计阶段的另一项重要任务是设计软件的结构,也就是要确定系统中每个程序是由哪些模块组成的,以及这些模块相互之间的关系。3.1 总体设计3.1.1 系统功能模块设计对各个功能进行集中、分块,按照结构化程序设计的要求,得到如图3.1所示的系统功能模块图。欢乐五子棋我要悔棋重新开始重新计分双人游戏开始游戏游戏设置游戏帮助音效开关游戏帮助联系作者程序说明图3.1 程序功能模块图由上图可知,五子棋游戏程序主要有三个功能:开始游戏,游戏设置,游戏帮助。开始游戏模块,主要是开始游戏与设置开始游戏的方式双人游戏与重新开始。游戏设置模块,涵盖了一些设置游戏的一般功能,其中主要的有悔棋和计分,游戏辅助功能音效开关,设置游戏进行过程中音效的开关。系统帮助模块,主要是对系统进行的进一步的功能介绍、版本信息、程序说明等文字介绍性的信息,帮助游戏玩家进一步对五子棋游戏程序的了解。欢乐五子棋程序最初是在Win32应用程序项目建立,以Windows消息与API函数实现简单Window窗体点击鼠标画圆圈的基础上一步步完善,改进现在的五子棋游戏,在架构设计上参考了Abstract Factory(抽象工厂)模式,以实现对两个不同模块进行一般化的控制。3.1.2 文件组织结构欢乐五子棋的文件组织结构如下图3.2 所示。图3.2 五子棋程序文件组织结构其中,ALL.H_引入所用到的头文件;ChessBoard.H_声明棋盘类;resource.H定义资源标识ALL.H_未用;ChessBoard.CPP_棋盘初始化与判断胜负算法;HappyGobang.CPP_主文件;icon1.ico_图标文件;Sqrict1.rc_资源定义文件;BITBMP1.bmp_棋盘位图;Gobang.bnp_主界面位图。3.2 详细设计3.2.1 棋盘类设计在五子棋游戏设计与开发的过程中,首先需要解决一个问题,那就是如何将棋子下到棋盘相应的十字交叉点上?想要解决这个问题,我们首先需要建立一个自定义数据结构,棋子的结构体(struct Chess),用来定义黑白棋子的相关属性及信息。棋子的属性包括:当前棋子坐标的坐标位置,用来判断棋子是否落下的落点标识,黑白颜色标志以及用来设置落点标志,黑白颜色标志,取得落点标志,黑白颜色标识四个方法。有了棋子类型的结构,我们就可以构建一个19*19规格的棋盘,这个棋盘我们可以通过一个类来封装。在棋盘类中,我们首先建立一个19行19列的二维数组,用来构建相同规格的棋盘。这个二维数组当然是上面已经说明的棋子类型,以后在棋盘上下过的棋子都会标记在这个二维数组中。在棋盘类中我们同时还定义了List链表,胜负判断方法,棋盘初始化方法等内容。棋子和棋盘的确立,使得我们解决上面的疑问变得很容易。我们只要在WM_LBUTTONDOWN消息中取得当前鼠标光标横纵坐标值(x,y),将其代入相应公式就可简单换算相应棋盘十字交叉点所属区域,并将此点的落子标志进行有子设置,通过刷新函数,调用WM_POINT消息便可在相应十字坐标点画出该棋子。如图3.3所示:图3.3 棋盘类示意图3.2.2 程序初始化设计程序初始化就是将棋盘上所有十字交叉点的落子标志Tag,颜色标识color,位置信息Seat进行初始化。也就是将棋盘类中二维数组chessboardij中的各个属性值进行初始设置。如图3.4所示:图3.4 棋盘初始化示意图3.2.3 判断胜负算法五子棋中胜负的判断规则很简单,因为五子棋又叫“五连珠”,顾名思义就是五个相同颜色的棋子哪一方玩家先连成一串,则为胜利。“五连珠”的方向可以是水平方向、垂直方向、正对角线方面与负对角线方向共四个方向。在程序中我们可以通过每下一步棋,对棋盘进行一次遍历,以便检测在这四个方向上有没有颜色标识相同的五个棋子连在一起,如果有,则返回相应结果。至此,胜负判断已完毕。如图3.5所示:图3.5 胜负判断示意图能够取得游戏胜利的四个方向,如图3.6所示:图3.6 胜负判断方向示意图3.2.4 悔棋功能设计悔棋功能的实现分为二部分,首先是如何悔棋之后,使前一步棋子消失;然后是如何实现悔棋之后进行该棋子初始化。第一个问题设计思想是通过STL中的List链表,将每一步棋子信息顺序存入List链表中,在绘制窗口时,从List中提取该棋子信息并绘制,如果进行悔棋操作,则删除上一步棋子信息,然后再次按照List中的棋子信息进行绘制,就能实现悔棋棋子消失的效果。具体流程图,如图3.7所示:鼠标左键点击下棋棋子存入LIST链表窗口绘制LIST中的棋子信息是否悔棋将信息插入LIST链表从LIST链表中尾部删除是否图3.7 悔棋功能流程图第二个问题,如何实现悔棋之后的初始化。我的设计思想是,悔哪步棋子,就初始化哪一步棋子的信息,那么我们必须将每一步棋子的信息记录下来,在悔棋时,提取出来然后进行悔棋,我在窗口创建前,定义了一个xArray16*162的二维数组,用来在棋子进入List链表中存储棋子二维坐标位置。以便实现棋子位置信息和颜色信息的初始化操作。具体流程图,如图3.8所示:鼠标左键点击下棋是否悔棋将十字点坐标存入数组从数组中提取坐标初始是否图3.8 悔棋功能流程图续Chessboard.h中定义链表容器:.list chesspoint; /利用LIST存取棋子信息,实现悔棋功能.HappyGobang.cpp中实现逻辑功能:在WM_LBUTTONDOWN单击鼠标左键下棋的消息中:InitChessBoard.chesspoint.push_back(InitChessBoard.chessboardij);/push_back将棋子信息存入List链表中的最后一个if (px255) /将二维数组坐标值i和j存入xArray数组中, xArraypx0 = i; /将棋子二维坐标i值存入二维数组第一列xArraypx1 = j; /将棋子二维坐标j值存入二维数组第二列px+; /存完之后px后移elsepx = 0; /棋子最后为16*16个,超过后将px置为0在WM_PAINT绘制窗口消息中,将List链表中的棋子信息通过iter迭代子一一找出并绘制在棋盘上,相关代码如下:for(i=0;i17;i+)for(j=0;jGetTag() = 1 & iter-GetColos() =1 ) /绘制黑色棋子BitBlt(bufferDC,iter-seat.x-10,iter-seat.y-10,20,19,hdcMem,cxSource-20,19,SRCCOPY);else if(iter-GetTag() = 1 & iter-GetColos() = 2 ) /绘制白色棋子BitBlt(bufferDC, iter-seat.x-10, iter-seat.y-10, 20, 19, hdcMem,cxSource-20, 0, SRCCOPY );4 系统设计编程与实现4.1 系统设计编程4.1.1 成员变量定义(1)HWND hWnd; /定义一个全局窗口句柄(2)HACCEL hAccel; /定义快捷键表句柄为型态HANDLE(3)HMENU hMenu; /定义一个菜单句柄(4)static int over=0; /模式切换0为空闲,1为人机,2为双人(5)static HINSTANCE hInstance; /当前实例句柄(6)HDC hdc; /定义窗口设备句柄4.1.2 成员函数定义(1)void Init(); /棋盘初始化函数说明:自定义Init()函数,用来创建窗口时,初始化棋盘坐标。void ChessBoard:Init()for(int i=0; i17; +i)for(int j=0; j17; +j)chessboardij.seat.x = 22*(j+1)+15;chessboardij.seat.y = 22*(i+1)+91;chessboardij.tag = 0;chessboardij.colos = 0;(2)int judge(HINSTANCE &hInstance,HWND &hwnd); /判断胜负函数说明:judge() 方法,传入当前实例句柄与窗体句柄,每下一步棋子都会调用judge()方法进行胜负判断。返回一个整型数,1为黑方胜利,2为白方胜利。4.2 消息机制和主界面实现4.2.1 消息机制说明消息机制是windows程序中核心内容,windows各种窗口程序正是通过各种消息事件来传递信息,在五子棋中主要包含了鼠标单击事件,按钮点击事件,菜单选择事件以及各种窗体消息WindowsMessage消息:WM_COMMAND、WM_CREATE、WM_LBUTTONDOWN、WM_POINT系统消息,通过这些消息windows系统给窗口发送这些消息,以便执行相应的操作。比如,鼠标左键单击消息(WM_LBUTTONDOWN)系统在探测到这一事件后,执行其中的定位棋子屏幕坐标和判断黑白棋子的操作后屏幕刷新(InvalidateRect)执行窗口绘制WM_POINT消息,将棋子画到窗口上,可以说消息机制驱动了操作者与系统的互动,同时又提供了系统本身机制的运行。4.2.2 主界面设计(1)棋盘界面的设计五子棋小游戏中棋盘界面采用的是一张BMP格式的资源图片,如图2-3所示,它包括了棋盘界面与棋子样式,这张图片在窗口创建时(WM_CREATE)整体加载到程序中,相关代码:hBitmap = LoadBitmap(hInstance, (LPCTSTR)IDB_BITMAP1); 在窗口绘制消息(WM_PAINT)时,通过Windows API函数BitBlt()方法截取出所需要的部分绘制到窗口中。相关代码如下:BitBlt(bufferDC, 0, 75, cxSource-20, cySource, hdcMem, 0, 0, SRCCOPY);其中,cxSource与cySource是整张图片在加载时用GetObject()方法取得的长度与宽度的尺寸信息。五子棋游戏程序的棋盘界面素材如下图4.1所示:图4.1 棋盘素材效果图(2)游戏菜单的设计五子棋游戏中的菜单设计采用传统Windows窗体下拉菜单风格,如下图4.2所示。菜单包括一级菜单:开始游戏、游戏设置、游戏帮助;二级菜单:双人游戏、重新开始、退出游戏、我要悔棋、重新计分、音效开关、作者简介、游戏帮助、三级菜单:打开音效和关闭音效。程序游戏菜单设计如下图4.2所示:图4.2 菜单效果图(3)记分牌与状态栏设计为了增加游戏的可玩性与实用性在主界面中加入了状态栏与积分牌区域,状态栏主要是显示当前游戏状态包括目前游戏所进行的局数和提示由哪一方进行下棋操作,以及显示每一局游戏的结果;记分牌则记录了双方玩家目前的胜负情况。这一部分的增加提高了游戏可玩性与美观程度。逻辑上是通过建立2个表示黑方胜利局数和白方胜利局数的变量blackWin和whiteWin分别在一方获胜之后进行自加累计,然后通过itoa将整形装换为字符串,用TextOut显示在窗口上,总局数显示则是通过将winBlack和winWrite加起来得到总局数,界面效果如下图4.3所示:图 4.3 状态栏和记分牌效果图5 测试与运行分析5.1 程序测试与开发过程类似,测试过程也必须分步骤进行,每个步骤在逻辑上是前一个步骤地继续。大型软件系统通常由若干个子系统组成,每个子系统又由许多模块组成。因此,大型软件系统的测试的基本层次主要有:(1)单元测试单元测试的用例从单元详细设计中导出。在单元测试中可以采用功能性测试和结构性测试两种。(2)集成测试 在这个测试步骤中所发现的往往是概要设计的错误。(3)系统测试 在这个测试步骤中所发现的往往是需求规格说明的错误。一般来说,系统测试是功能性测试,不是结构性测试。5.2 测试结果按照以上步骤,程序测试结果如下:(1)双人游戏测试内容:判断是否能开始双人游戏操作:玩家单击菜单“开始游戏双人游戏”结果:开始双人游戏结论:测试成功(2)重新开始测试内容:判断是否能重新开始新游戏操作:玩家单击菜单“开始游戏重新开始”结果:重新开始游戏结论:测试成功(3)悔棋功能测试内容:判断是否在游戏中悔棋操作:玩家单击菜单“游戏设置我要悔棋”结果:悔棋结论:测试成功(4)重新计分测试内容:判断在开始数轮游戏后,是否能刷新结果,重新计分操作:玩家单击菜单“开始游戏重新计分”结果:游戏分数、局数清零结论:测试成功5.3 运行分析经测试本程序能够在window95/2000/XP/7操作系统中稳定运行,但在游戏可玩性方面还有不足和改进,比如本程序仅支持双人游戏模式,为了增加可玩性,后期可增加人机对弈模式,即AI模式。实现人与电脑对弈。在网络功能上可通过增加局域网内联网C/S模式。结 论通过毕业设计对大学四年所学知识体系,进行了一次很好的归纳总结。一个项目从整体构思,到详细设计。都是在不断完善和改进的过程中进行的。这种“由简到繁,逐步推进”的方法不仅是编写一个程序或者一个段代码,更是做任何事情的一般道理。从如何用鼠标将圆圈图案画到屏幕上,到如何判断胜负,从如何传递一个指针,到如何向窗口发送一个消息,解决了各种各样的问题,使我对Windows程序设计有了更加深刻理解和认识。我体会最为深刻的一点是系统架构和设计模式的重要性。即使是对于一个并不大的程序,代码的组织都是非常重要的,因为这关系到日后的维护以及扩展。这个游戏之中,有关网络Socket编程或者博弈树算法的知识都可以直接从无所不包的Internet上获取,甚至可以直接获得一个完整的五子棋人机对弈算法的源代码级模块。但是对于系统的架构,却完全是自己的事情,几千上万行的代码需要通过合适的方法组织起来,使程序员编写代码更加有条理,更加符合软件工程的标准,这才是最重要的。参考文献1 微软公司. MSDN Library Visual Studio 6.0M.美国:Mirosoft Company,1998.2 Charles Petzold.Windows程序设计M.北京:北京大学出版社,2000.3 Bruce Eckel.Think in C+M.北京:机械工业出版社,2005.6.4 Nicolai M.Josuttis.Visual C+标准程序库M.湖北:华中科技大学出版社,2002.4.5 侯俊杰. 深入浅出MFC(第2版)M.湖北:华中科技大学出版社,1999.6 侯捷.STL源码剖析M.湖北:华中科技大学出版社,2007.7 Jesse Liberty. 21天学通C+ M.北京:人民邮电出版社,2005.1.8 Scott Meyers 著.Effective C+ 中文版 2nd Edtion湖北.华中科技大学出版社,2001.9.9 Bruce Eckel. C+编程思想(第I卷) M.北京:机械工业出版社,2006.1.10 Nicolai M.Josuttis 著,侯捷,孟岩(译). C+标准程序库M. 湖北.华中科技大学出版社,2005.3.致 谢感谢我的父母,没有您们的包容和支持,就不会有我的今天。感谢我的导师李忍东老师,您认真的指导使得我能完成毕业设计。感谢王京老师,您无私的帮助使得我能顺利的完成论文的撰写。感谢我的C+老师杨和平老师,在您的教授下让我掌握了C+语言以及常用的数据结构,将我领进代码世界。感谢北京神州航天软件技术有限公司,为我无偿提供了开发环境。感谢231宿舍的所有兄弟,尤其是曹铭和王亮,谢谢你们在我离校期间为我所作的一切。感谢陈晶华同学,谢谢你在程序测试期间提供的修改意见。感谢Rockstar Games公司,你们的Grand Theft Auto: Vice City伴我度过了下班后的无聊时光。附 录附录A头文件代码:ChessBoard.h#ifndef CHESSBOARD_H#define CHESSBOARD_H#includeall.hstruct ChessPOINT seat;/棋点坐标int tag;/棋子落点标志int colos;/黑白标志void settag(int n)tag = n;void setcolos(int n)colos = n;int GetTag()return tag;int GetColos()return colos;class ChessBoardpublic:void Init(); /棋盘初始化void ReInit(); /悔棋后重新初始化int Judge(HINSTANCE &hInstance,HWND &hwnd); /判断胜负 Chess chessboard1919; /二维数组构建棋盘list chesspoint; /利用LIST存取棋子信息,实现悔棋功能;#endifResource.h#define IDI_ICON1 101#define IDR_MENU1 102#define IDD_DIALOG1 103#define IDD_DIALOG2 104#define IDD_DIALOG3 105#define IDD_DIALOG4 106#define IDR_ACCELERATOR1 107#define IDB_BITMAP1 111#define IDB_BITMAP2 115#define IDB_BITMAP3 116#define IDC_BName118#define IDC_EDIT1#define IDC_EDIT2#define IDC_EDIT3#define ID_MENUITEM40001 40001#define ID_MSINGER 40001#define ID_MENUITEM40002 40002#define ID_MDOUBLE 40002#define ID_MENUITEM40003 40003#define ID_MRESTART 40003#define ID_MENUITEM40004 40004#define ID_MEXIT 40004#define ID_MENUITEM40005 40005#define ID_MHOUJUE 40005#define ID_MENUITEM40006 40006#define ID_MHELP 40006#define ID_MREPEN 40007#define ID_MREPENT 40007#define ID_MBACKCOLOR 40008#define IDM_MDOUBLE 40009#define ID_MABOUT 40011#define ID_MRESET 40012#define ID_TEXT 40019#define ID_MMUSI/ Next default values for new object#ifdef APSTUDIO_INVOKED#ifndef APSTUDIO_READONLY_SYMBOLS#define _APS_NEXT_RESOURCE_VALUE 116#define _APS_NEXT_COMMAND_VALUE 40013#define _APS_NEXT_CONTROL_VALUE 1006#define _APS_NEXT_SYMED_VALUE 101#endif#endif附录B源文件代码:Chessboard.cpp#includeALL.H#includeChessBoard.hvoid ChessBoard:Init()/棋盘初始化for(int i=0; i17; +i)for(int j=0; j17; +j)chessboardij.seat.x = 22*(i+1)+15;chessboardij.seat.y = 22*(j+1)+91;chessboardij.tag = 0;chessboardij.color = 0;/-判断胜负算法int ChessBoard:Judge(HINSTANCE &hInstance,HWND &hWnd)int i;int j;/水平方向判断胜利/for(i=0; i15; +i)for(j=0; j15; +j)if(chessboardij.color = 1 & chessboardij+1.color = 1& chessboardij+2.color = 1& chessboardij+3.color = 1& chessboardij+4.color = 1)return 1;else if(chessboardij.color = 2 & chessboardij+1.color = 2& chessboardij+2.color = 2& chessboardij+3.color = 2& chessboardij+4.color = 2)return 2;/垂直方向判断胜利/for(i=0; i15; +i)for(j=0; j15; +j)if(chessboardij.color = 1 & chessboardi+1j.color = 1& chessboardi+2j.color = 1& chessboardi+3j.color = 1& chessboardi+4j.color = 1)return 1;else if(chessboardij.color = 2 & chessboardi+1j.color = 2& chessboardi+2j.color = 2& chessboardi+3j.color = 2& chessboardi+4j.color = 2)return 2;/正对角线方向判断胜利/for(i=0; i15; +i)for(j=0; j15; +j)if(chessboardij.color = 1 & chessboardi+1j+1.color = 1& chessboardi+2j+2.color = 1& chessboardi+3j+3.color = 1& chessboardi+4j+4.color = 1)return 1;else if(chessboardij.color = 2 & chessboardi+1j+
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年井下作业技术规范与操作流程模拟题集
- 2025年智能中英文多平台软件采购合作协议
- 2025年综合交通枢纽安全管理责任追溯与应急处理协议
- 2025年国产科幻题材电影投资与全球版权销售合同
- 财务年度责任担保合同样本
- 2025年综合性商业体装修工程解除合同确认书
- 2025年度政府机关网络安全事件响应托管合同范本
- 2025年安能物流专项合作协议:冷链物流与跨境电商合作合同
- 2025年智能车库租赁代理及车位托管一体化服务合同
- 2025年绿色金融创新证券投资顾问合作协议
- 枢纽经济:区域经济发展新动能
- 积极心理学全套课件
- 临床实验中不良事件的管理
- 如何开展课题研究
- 炼钢厂电工应知应会考试题库500题(含各题型)
- bc-6800产品中心医院
- GB/T 5069-2007镁铝系耐火材料化学分析方法
- GB/T 40565.2-2021液压传动连接快换接头第2部分:20 MPa~31.5 MPa平面型
- GB/T 11446.10-1997电子级水中细菌总数的滤膜培养测试方法
- 旅游区奖惩制度管理办法
- 儿童生长发育监测课件
评论
0/150
提交评论