五子棋游戏的设计与实现毕业设计_第1页
五子棋游戏的设计与实现毕业设计_第2页
五子棋游戏的设计与实现毕业设计_第3页
五子棋游戏的设计与实现毕业设计_第4页
五子棋游戏的设计与实现毕业设计_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

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

文档简介

毕业论文(设计)题目五子棋游戏的设计与实现姓名王勇学号1109064029所在院系数学与计算机科学学院专业班级信息与计算科学1101班指导教师拓守恒完成地点陕西理工学院2015年5月18日五子棋游戏的设计与实现作者王勇(陕理工学院数学与计算机科学学院信息与计算科学专业1101班,陕西汉中723000)指导教师拓守恒摘要五子棋是起源于我国古代的黑白棋种之一,是一种简单的娱乐性较强的大众游戏,深受广大玩家的喜爱,但同时作为比赛,五子棋游戏还有着深奥的技巧。本系统的实现采用了C语言的模块化的程序设计方式,用VISUALC60软件来实现程序的编译运行。实现黑白两方分别落子,通过棋盘上方的棋盘动态信息提示,轮流落子,本系统中游戏的每一个功能在程序中都是一个相对独立的模块,比如,棋盘模块,棋子模块,选择游戏模式模块,悔棋模块等等在程序中都是独立的,但它们之间通过逻辑关系的链接又构成了一个可以使游戏正常运行的程序。为实现游戏的双人对战模式和人机对战模式,并使得游戏尽量的简单化,本系统需要达成以下目标设计一个简洁的游戏初始界面制定合法规则,使游戏能公正的进行,并且可以断定胜支持人机对战模式,可以是电脑通过人工智能和合法规则选出最优落子位置可以悔棋,在玩家落子落错位置时,可按下悔棋键进行悔棋。关键词五子棋,游戏设计,C语言,双人对战,人机对战,人工智能DESIGNERANDIMPLEMENTATIONOFGOBANGGAMEAUTHORWANGYONGGRADE11,CLASS1,MAJORININFORMATIONANDCOMPUTINGSCIENCE,MATHEMATICSANDCOMPUTERSCIENCEDEPTSHAANXIUNIVERSITYOFTECHNOLOGY,HANZHONG723000,SHAANXITUTORTUOSHOUHENGABSTRACTGOBANGISONEOFTHEBLACKANDWHITEKINDOFORIGINATEDINANCIENTCHINA,ISASIMPLEANDENTERTAININGSTRONGERMASSGAMES,LOVEDBYTHEMAJORITYOFPLAYERS,BUTATTHESAMETIMEASTHEGAME,GOBANGGAMEWITHPROFOUNDSKILLSTHEIMPLEMENTATIONOFTHISSYSTEMHASADOPTEDCOFMODULARPROGRAMDESIGNMETHOD,USINGVISUALC60SOFTWARETOREALIZETHEPROGRAMCOMPILERRUNNINGIMPLEMENTATIONOFBLACKANDWHITETWOPARTIESMOVELATER,RESPECTIVELY,BYTHEBOARDATTHETOPOFTHEDYNAMICMESSAGEBOARD,TAKETURNSTOMOVELATER,THISGAMEINTHESYSTEMEACHFUNCTIONINTHEPROGRAMISARELATIVELYINDEPENDENTMODULES,SUCHAS,THEBOARDMODULE,PAWNMODULE,SELECTGAMEMODEMODULE,BACKMODULEANDSOONINTHEPROGRAMAREINDEPENDENT,BUTTHELINKTHROUGHTHELOGICALRELATIONSHIPBETWEENTHEMANDFORMACANMAKETHENORMALOPERATIONOFTHEGAMEPROGRAMINORDERTOREALIZETHEDOUBLEMODEANDMANMACHINEGAMEMODE,ANDMAKETHEGAMEASFARASPOSSIBLETHESIMPLIFICATION,THESYSTEMNEEDSTOACHIEVETHEFOLLOWINGGOALSDESIGNASIMPLEGAMEOFINITIALINTERFACE;THELEGALRULES,CANMAKETHEGAMEFAIR,ANDYOUCANCALL;SUPPORTTHEMANMACHINEMODE,CANBEACOMPUTERBYARTIFICIALINTELLIGENCEANDLEGALRULESTOSELECTTHEOPTIMALMOVELATER;CANTAKEBACK,FALLINTHEPLAYERSMOVELATERFAULTLOCATION,CANPRESSTHEBACKBUTTONTOBACKKEYWORDSGOBANG,GAMEDESIGN,THECPROGRAMMINGLANGUAGE,DOUBLEAGAINST,THEMANMACHINEAGAINST,ARTIFICIALINTELLIGENCE(AI)目录1绪论111引言112研究的背景及意义1121研究背景1122研究意义113基本目标及主要内容12系统开发环境的介绍及选择121C语言122开发及运行环境23需求分析231总体需求分析232可行性分析2321技术可行性分析2322经济可行性分析2323操作可行性分析233功能分析24概要设计341五子棋特点与规则342流程图343双人模式544人机模式545智能算法546悔棋流程647输赢判断65详细设计651画出游戏界面652画出棋子853设置棋局规则10531落子规则10532悔棋规则11533输赢规则1154实现双人对战1255悔棋功能1256判断输赢1457退出游戏1658实现人机对战16581先手设置界面16582电脑智能落子17583可以悔棋、退出21584显示输赢2159各模块之间的衔接216总结24致谢25参考文献261绪论11引言随着社会经济和科学技术的发展,计算机已经深入到人们日常工作和生活的方方面面,各种各样的程序软件也逐渐进入大众的生活,比如在闲暇时间的娱乐生活也开始变得被网络电子游戏等所充斥。而五子棋则是最受人们欢迎的一款益智类棋局游戏,它的简单性,娱乐性,竞技性注定它是一款火爆的游戏。12研究的背景及意义121研究背景五子棋游戏软件可以分为两种一种是网络五子棋游戏软件,另一种是单机五子棋游戏软件。我设计的是单机版的五子棋游戏软件,这款软件可以供人们在闲暇时间随时随地进行娱乐,并提高自己的棋艺,实用性较强。游戏的行棋顺序为黑先、白后,黑棋第一子从天元开始相互依次落子,任一方先在棋盘上形成横向或竖向或斜向的连续的颜色相同的五个以上含五个棋子则该方为胜。该系统所实现的功能主要有三大功能游戏选项、游戏设置、帮助。122研究意义五子棋是起源于中国古代的传统黑白棋种,当今社会在不同的地域对五子棋也有不同的称呼,其也是一种必须动用脑力的益智类游戏,所以五子棋可以增强思维能力,提高智力。其中蕴含古典哲学的高深学问“阴阳易理”哲理,有利于修身养性,它因为简单易学的特点,所以为人民群众所喜爱,但作为一项高水平的国际比赛,它也有深奥技巧。13基本目标及主要内容本系统是根据传统五子棋游戏的功能编写,实现了双人对战和人机对战。主要需实现如下目标(1)VISUALC60环境的下的C语言编程(2)五子棋棋盘的设计(3)五子棋棋子的设计(4)黑白双方轮流落子的实现(5)棋局的悔棋功能(6)棋局进行时的退出功能(7)胜负的判定(8)人工智能算法分析2系统开发环境的介绍及选择21C语言C语言诞生于1972年的美国,在次之前还有A语言(其创造设计者是一位女性)和B语言。现在C语言成为了世界上使用最广泛的,最流行的高级程序设计语言之一。随着经济与科技的发展,微型计算机日渐普及,这导致了C语言的版本的多样化,出现了一些不一致的语言特点。为了改变这种情况,美国国家标准研究所制定推广了一套ANSI标准,作为现行的C语言标准。常用的编译软件有MICROSOFTVISUALC。C语言绘图能力强,具有很好的可移植性,并具备很强的数据处理能力,因此适于编写系统软件。它是数值计算的高级语言。由文献14可知。22开发及运行环境编程语言C语言操作系统WINDOWS7开发工具MICROSOFTVISUALC603需求分析31总体需求分析五子棋游戏是一款很符合现代人的休闲特点的益智类游戏,其是我国古代围棋的的衍生物,本系统主要分为两部分双人人对战和人机对战。双人对战模式实现的功能选择双人对战,游戏界面,实现双人轮流落子,棋盘动态信息显示,判断输赢,重新开始游戏。人机对战模式实现的功能选择人机对战,设置先手,实现玩家与电脑轮流落子,棋盘动态信息显示,判断输赢,重新开始游戏。32可行性分析321技术可行性分析计算机硬件和软件技术的飞速发展,为游戏系统的开发提供了设备条件。当前在网络上有许多的五子棋软件可供参考借鉴,而且我自己也熟练地掌握了C语言在MICROSOFTVISUALC60环境下的基本应用,因此本游戏的开发技术上是完全可行的。322经济可行性分析该游戏适用于所有人群,开发该游戏的费用主要包括开发阶段的费用以及今后的运行、维护费用。五子棋游戏简单易学,为人民群众喜闻乐见。该游戏功能强大,界面简单,用户在使用方面不存在任何障碍。其开发具有很强的经济性。323操作可行性分析本游戏适用于WINDOWS操作系统之上,对于该游戏的推广使用提供了很好的平台。该游戏使用C语言编写,具有很强的移植性,使其可以运行很方便。在操作上主要凭借使用WINDOWS键盘操作,方便简单。使用前只要对用户进行简单的说明即可。33功能分析该款游戏主要是由以下五个模块组成图31游戏功能图五子棋游戏人机对战双人对战悔棋功能退出功能判断输赢4概要设计41五子棋特点与规则五子棋是两方之间进行的竞技活动,专用棋盘为1515,五连子的方向为横、竖、斜;任一方在棋盘上形成横向、竖向、斜向的连续的相同颜色的五个(含五个以上)时即为该方胜利;在棋盘上以对局双方均不可能形成五连为和棋。黑白双方依次落子,由黑方先下,由于先下一方在局面上占优,所以五子棋规则分为禁手和无禁手两种。禁手规则禁手是针对先行的黑棋而言,以限制黑棋的先行优势为目的。对局中如果黑棋违反禁手规则将被判负。以中国五子棋竞赛规则为例,有三三禁手(黑棋一子落下时同时形成两个或两个以上的活三,此子必须为两个活三共同的构成子)、四四禁手(黑棋一子落下同时形成两个以上的冲四或活四)、长连禁手(黑棋一子落下形成一个或一个以上的长连)。无禁手指不对黑棋的先行优势做任何限制。本系统采用的是无禁手规则。42流程图游戏开始后,运行过程如下图41所示图41游戏运行流程图当系统运行后,首先看到的是一个选择游戏模式(双人,人机)的界面,根据要求选择后,有两种情况,第一种是双人模式,根据游戏的设定先黑方落子,然后白方落子,而系统此时需要更新棋盘的状态和判断是否产生输赢,若是产生则游戏结束,若没有产生输赢,则判断是否棋盘已经落满棋子,若已经落满棋子,则判定为和棋,否则另一方落子,如此循环,直到产生输赢或和棋;另一种是人机模式,选择该模式后,会看到设置界面,可以选择谁是先手,有两种选择电脑先手、玩家先手,若电脑先手则根据设定,电脑执黑子先下,之后白方落子,此时因为选择了电脑先手,所以电脑落子时优先进攻,只有在进攻的权值小于防守的权值时优先防守,(此处涉及到电脑的人工智能,此部分的设计概要详见本章节的电脑智能落子部分),每当棋盘落子后电脑立即更新棋盘的电脑落子是否是否玩家落子(白)任意方向有五子相连或棋盘落满任意方向有五子相连或棋盘落满是电脑先手电脑落子人机对战否开始游戏双人对战是白方落子游戏结束否是黑方落子任意方向有五子相连或棋盘落满任意方向有五子相连或棋盘落满否否否是是是玩家落子(黑)任意方向有五子相连或棋盘落满任意方向有五子相连或棋盘落满否具体信息并判断是否已经产生输赢若是产生则游戏结束,若没有产生输赢,则判断是否棋盘已经落满棋子,若已经落满棋子,则判定为和棋,否则另一方落子,如此循环,直到产生输赢或和棋,玩家先手,则玩家执黑子先落子,然后电脑落白子,此时电脑落子优先防守,其他部分与电脑先手一样。43双人模式此模式较为简单是后面实现人机模式的铺垫。首先用循环语句和制表符画出整个棋盘,然后利用绘图函画出棋子,然后制定自己的落子规则(包含输赢规则),并用循环语句实现黑白子的轮流下子,如此就实现了双人对战的目的。44人机模式本系统中此功能的实现是在双人模式已经实现的情况下实现,只是把双人模式中的其中一个人换成电脑操作(电脑落子算法参照45智能算法),在每次落子之后,调用判断输赢函数判断是否产生输赢或和棋,如果产生则游戏结束,如果没有产生则继续游戏,直到产生输赢或和棋,或退出游戏为止。45智能算法电脑博弈模仿人类下棋,传统算法使用的是博弈树。两人游戏,甲有很多位置选择落子,乙也有很多相对应的下法,如果所有的方式列表就构成一棵树,就是搜索树,也被称为博弈树。树的根节点先手的第一步位置,下面的走棋方法构成树的子节点,直到游戏结束。此处的五子棋棋盘是1515的,搜索空间是一个巨大的数字。博弈算法的任务是在这些呈几何级数上升的子节点中选出最优的节点,从而赢得比赛。整个算法分为搜索和估值两部分,估值是评估所有可能的落子位置的评价,选择评价最高的位置为最终落子位置。本系统的估值函数为单点估值函数。单点估值函数的基本思想是评估当前的静态情况下,遍历棋盘,对棋盘的每个非空的位置的四个方向进行分析评估横向、竖向、两条对角线,统计每一个棋型的数量(连五型、冲四型、活四型、活三型、死三活二型),不同的棋型根据实际情况中玩游戏时的经验确定一个不同的权重值,最后还有位置分数的加权不仅要考虑空点对自己的价值,也要考虑其对对方的价值,如此就获得了棋盘上的空点的估值。单点估值函数只能估计一个空点的价值,对当前的棋局,把所有的空点对己方的有利程度总和和不利程度总和相关就可得出全局价值。由文献5614可知。本系统中设定了以下几种棋型和相应的权值表41防守棋型及其相应权值表棋型连五型冲四型活四型活三型死三活二型权值2000001100600024020表42进攻棋型及其相应权值表棋型连五型冲四型活四型活三型死三活二型权值2000000200024000850125根据不同棋型的权值可以计算出棋盘的各点的价值之和,用VIJ表示点(I,J)的总价值,用AIJ表示点(I,J)的进攻价值,用DIJ表示点(I,J)的防守价值,用DT表示防守优先级数,AT表示进攻优先级数,其中防守和进攻优先级数是电脑在比较点(I,J)的进攻总价值和防守总价值后赋予的,给总价值大的类型设定优先级数为2,而价值小的则为1。则点(I,J)的进攻总价值为该点的所有进攻棋型的和,计算方法为;IJA该点的防守总价值为该点的所有防守棋型的和,计算方法为。IJD则该点的总价值为。TDIJDTAIJAIJV用此方法就可遍历棋盘上的所有的空点的总价值,然后比较所有总价值的大小,总价值最大的点即为对自己最有利的点。46悔棋流程悔棋是棋局类游戏的必须的功能,在游戏时,如果有人悔棋时,立即调用悔棋功能函数,本系统中由于棋盘上的所有的交点都有一个二维数组的一组数据与之相对应,而且每次落子后会有一个二维数组记录相应的信息(步数,棋子颜色),因此此功能的实现依靠的是C中的循环函数。47输赢判断本模块功能的实现依靠的是单点估值函数的思想,即每次落子之后,遍历以该点为坐标原点以5为半径的棋盘的交点,分析原点的四个方向(横向、竖向、两条对角线),判断是否有连五型棋型,若有则产生输赢,若没有则遍历整个棋盘,查看是否棋盘已经下满,若已下满则判定为和棋,否则继续游戏。5详细设计51画出游戏界面本模块是整个游戏系统的平台性模块,之后所有的功能都将依附该模块来体现,主要需实现棋盘的绘制与游戏说明。本游戏系统选择的是1515的棋盘,利用制表符字符串打印输出棋盘,并且特别标出天元位置,与四方星位。游戏的说明主要有棋局动态信息显示,如何移动光标,如何实现落子,如何悔棋以及退出。利用SWITCH语句,当光标坐标(X,Y)中X0,Y0则画出棋盘的左上角“”,Y14则画出棋盘的右上角“”,014CURSORX14RENEWCHESSBOARD,CURSORX1,CURSORYRENEWCHESSBOARD,CURSORX,CURSORYBREAKCASE75/左CURSORYIFCURSORY14CURSORY14RENEWCHESSBOARD,CURSORX,CURSORY1RENEWCHESSBOARD,CURSORX,CURSORYBREAKCASE134/退出QUITTRUERETURNTRUEELSEIFC13/下子ELSEIFCU|CU/悔棋REGRETTRUERETURNTRUE53设置棋局规则本模块实现的是游戏的规则,包括落子规则,悔棋规则,输赢规则。531落子规则本系统的实现整体上采用的是无禁手五子棋游戏规则。落子规则包括落子位置与落子顺序。落子位置其实是对第一颗棋子的限定,即第一颗棋子必须落在棋盘的天元(也就是棋盘的最中间),而后只规定了必须落在棋盘的位点之上,不能落在空白处,而落子顺序其实是从第一次下子开始的,且第一颗棋子必须是黑子,之后黑白棋就开始轮流落子,直到产生输赢为止。本系统中涉及到的五子棋的基本棋型有防御棋型和进攻棋型两类,具体有连五型,活四型,冲四型,活三型,死三活二型五种,具体如下图53连五型(黑棋)图54活四型(黑棋)图55冲四型(黑棋)图56活三型(黑棋)图57死三活二型(黑棋)532悔棋规则悔棋规则应用于游戏的整个过程,在游戏产生输赢之前的任意时候,只要玩家按下悔棋热键,就可进行悔棋,且本系统中不限制悔棋步数。具体实现见55悔棋功能。533输赢规则本系统的输赢规则是基于无禁手五子棋的输赢规则,即对黑子没有任何限制,只要形成连五型棋子就判定为胜利,当棋盘上无法落子时仍然没有产生输赢,则判定为平局。具体实现见56判断输赢。54实现双人对战本模块实现的是两个人类玩家在一台电脑上进行游戏,本部分不涉及电脑的AI,只需要电脑提供一个平台(显示器的功能),本部分的实现较为简单,在以上两个模块即画出棋盘模块和画出棋子模块功能实现的基础上,两个玩家就可以自由的进行游戏,双方通过依次控制电脑键盘上的方向键移动光标到自己认为合理的地方落子。每当棋盘上有棋子落下以后,电脑需立即判断是否已经产生输赢,如果没有产生输赢则在棋盘动态信息显示处显示该黑(或白)方下子,如果已经产生输赢则在盘动态信息显示处显示白(或黑)方胜利此时按任意键即可重新开始游戏。55悔棋功能本模块的创建是根据现实中玩五子棋游戏时的实际存在的情况而编写的,当玩家下棋后,发现不是最佳的位置,或者是棋子没有落在自己想要落的位置,发生偏离,此时就需要用到本模块的功能悔棋功能。本游戏系统中,悔棋的功能实现主要是通过数组CHESSBOARD15来完成的,当系统接收到悔棋的消息时调用悔棋函数VOIDBEBACKNODECHESSBOARD15,INTSTEP,在双人模式和人机模式中悔棋的方式是一样的,当棋盘上的棋子少于3个时,按下悔棋键时,由于本系统的默认设置(即第一颗棋子为黑棋,且位置必须在天元位置),所以系统判定此时想悔棋的是白棋,故而去掉一颗白棋,棋盘为开始游戏的初始界面,即棋盘上只有天元位置有一颗黑棋,此时光标也回到刚刚白棋的位置。当棋子多余3个时,按下悔棋键后,由于系统无法判定是白棋想悔棋,还是黑棋想悔棋,故而一次撤销两步,即当该黑棋落子时,按下了悔棋键,会撤销两步,即撤销了白棋刚刚走的一步和黑棋刚刚走的那一步,光标也回到刚刚黑棋的位置。此时如果是黑棋想悔棋则黑棋重新落子在其他不同于刚刚撤销的那个位置,白棋则见招拆招,而如果是白棋想悔棋则黑棋把棋子下在原来的位置,此时白棋就可以重新落子在其他的位置,以此来实现悔棋8。本游戏系统中没有限制悔棋的步数,可以无限制悔棋,直到第一步。具体实现程序如下(仅部分主要代码)VOIDBEBACKNODECHESSBOARD15,INTSTEP/悔棋INTI,J,TEMPX,TEMPYIFSTEP1RETURN/如果才开始,直接返回IFSTEP2/如果下了多于两步FORI0I14|Y14RETURNFALSERETURNTRUEINTLINENODECHESSBOARD15,INTDIRT,INTX,INTY,INTCOLOR/判断颜色为COLOR的点X,Y,在DIRT方向上有多少相连的同色棋子INTIFORI0CHESSBOARDXDIRECTIONDIRT0YDIRECTIONDIRT1STEP0IXXDIRECTIONDIRT0YYDIRECTIONDIRT1IFINSIDEX,YRETURNIRETURNIBOOLWINNODECHESSBOARD15,INTX,INTY,INTCOLOR/判断是否有人赢棋IFLINECHESSBOARD,0,X,Y,COLORLINECHESSBOARD,1,X,Y,COLOR3RETURNTRUEIFLINECHESSBOARD,2,X,Y,COLORLINECHESSBOARD,3,X,Y,COLOR3RETURNTRUEIFLINECHESSBOARD,4,X,Y,COLORLINECHESSBOARD,5,X,Y,COLOR3RETURNTRUEIFLINECHESSBOARD,6,X,Y,COLORLINECHESSBOARD,7,X,Y,COLOR3RETURNTRUERETURNFALSE产生平局时GOTOXY0,0/如果下了225步还没人赢棋则平局PRINTF“GOTOXY0,0/光标回到原点位置PRINTF“平局“图510判断输赢白棋赢图511判断输赢黑棋赢57退出游戏该模块的功能为,在游戏进行的任意时候,只要按下退出热键(F12),就可以退出游戏,直接退到游戏的初始界面,但是当游戏退出后,再次开始游戏时,为新的一局游戏,不能接着上次的继续玩,即没有设置保存功能8。IFQUITRETURN/如果按了退出热键则返回58实现人机对战该模块功能的实现是在实现画出棋盘模块、画出棋子模块、设置棋局规则模块、悔棋功能模块、判断输赢模块而的基础之上而实现的。实现了上述模块以后,开始设计并实现人机对战功能。本游戏系统中此模块主要分为了以下几个功能模块1设置先手功能2电脑智能落子功能3可以悔棋、退出4显示输赢581先手设置界面在打开本游戏系统之后,选择人机对战之后利用SYSTEM“MODECONCOLS64LINES24“窗体函数设置窗口大小,然后用SYSTEM“COLOR2B“函数设置窗体背景颜色为绿色,然后在窗体中打印出窗口内容,即设置先手,1玩家先手,2电脑先手和3返回上级菜单,当从键盘上输入1,即本局游戏选择玩家先手,开始游戏电脑优先防御;当从键盘上输入2,即本局游戏选择电脑先手,开始游戏电脑优先进攻;当从键盘上输入3,即返回上一层目录菜单,不进行游戏9。具体实现程序如下(仅部分主要代码)/对手是电脑/SHOWSUBMENU/选择谁是先手VOIDSHOWSUBMENU/打印子菜单SYSTEM“CLS“SYSTEM“MODECONCOLS48LINES21“/设置窗口大小SYSTEM“COLOR2B“/设置窗体背景色PRINTF“NNN设置先手N“PRINTF“NN1玩家先手NN“PRINTF“2电脑先手NN“PRINTF“3返回上级菜单N“PRINTF“N请选择13“TEXTCOLORTEXTS图512设置先手界面582电脑智能落子(1)电脑先手在系统运行之后选择人机对战模式后,选择电脑先手,开始游戏根据游戏的设置,电脑第一次落的黑子在天元位置,且电脑落子时以进攻优先。本模块采用的是评估权值的方法,当电脑落子时,首先调用进攻棋型函数,通过函数来计算当黑子(电脑落子)落下后,该子所在位置的八个方向的权值大大小,若进攻值的最大值比较大时,就在权值最大的位置落子,然后玩家落子,如此循环,实现棋局的进行,若是进攻值的最大值比较小时,就调用防守棋型函数,然后计算棋盘上的所有位置的防守权值的大小,然后比较最大进攻值与最大防守值得大小,在值比较大的位置落子,即为最优落子位置,若是进攻值与防守值大小相等,则优先进攻,即在进攻值最大的位置落子。(2)玩家先手在系统运行之后选择人机对战模式后,选择玩家先手,开始游戏根据游戏的设置,玩家第一次落的黑子在天元位置,然后电脑以落子时优先防御为准则立马响应并在棋盘上落子。本模块采用的是评估权值的方法,当电脑落子时,首先调用防守棋型函数,通过函数来计算棋盘上的所有位置的防守权值的大小,若防守值的最大值比较大时,就在权值最大的位置落子,然后玩家落子,如此循环,实现棋局的进行,若是防守值的最大值比较小时,就调用进攻棋型函数,然后,然后比较最大进攻值与最大防守值的大小,在值比较大的位置落子,即为最优落子位置,若是进攻值与防守值大小相等,则优先防守,即在防守值最大的位置落子8。具体实现程序如下(仅部分主要代码)INTATTACKTREND,DEFENTTREND/攻击防御平衡权值BOOLMACTH1NODECHESSBOARD15,INTX,INTY,INTDIRT,INTKIND,INTCOLOR/匹配在颜色为COLOR的点X,Y,在DIRT方向上的第KIND种防守棋形,成功返回TRUE,否则返回FALSE/INTKCHARCCHARPPSTRCHRQX1KINDQX,XFORK0K0ELSEIFCHESSBOARDXYSTEP0C1ELSEC0IFC0IFCQX1KINDQXKRETURNFALSERETURNTRUEINTVALUE_QX1NODECHESSBOARD15,INTX,INTY,INTDIRT,INTCOLOR/计算颜色为COLOR的点8个方向上的防守权值之和INTIFORI0I0ELSEIFCHESSBOARDXYSTEP0C1ELSEC0IFC0IFCQX2KINDQXKRETURNFALSERETURNTRUEINTVALUE_QX2NODECHESSBOARD15,INTX,INTY,INTDIRT,INTCOLOR/计算颜色为COLOR的点8个方向上的进攻权值之和INTIFORI0I0CONTINUEFORK0K0CONTINUEFORK0KMAXI/如果防守价值的最大值比较低ATTACKTREND1DEFENTTREND1/AI优先进攻ELSE/否则ATTACKTREND1DEFENTTREND2/AI优先防守FORI0I2I2ELSEIFI2I1COLORCOLOR12然后调用VOIDBEBACKNODECHESSBOARD15,INTSTEP即可实现悔棋。结果如图551和图552。584显示输赢当棋盘上有棋子落下以后,电脑需立即判断是否已经产生输赢,如果没有产生输赢则在棋盘动态信息显示处显示该黑(或白)方下子,如果已经产生输赢则在盘动态信息显示处显示白(或黑)方胜利此时按任意键即可重新开始游戏。具体实现程序如下(仅部分主要代码)IFWINCHESSBOARD,CURSORX,CURSORY,COLOR12GOTOXY0,0/光标回显PRINTF“GOTOXY0,0/光标回显IFCOLOR1MESSAGEBOXGETHWND,“白棋赢“,“注意“,MB_OKELSEMESSAGEBOXGETHWND,“黑棋赢“,“注意“,MB_OKGETCHRETURNGOTOXY0,0/如果下了225步还没人赢棋则平局MESSAGEBOXGETHWND,“和棋“,“注意“,MB_OK结果如图561和图562。59各模块之间的衔接每个模块程序编写完成之后相互之间是独立的,需要把它们按逻辑结构联系在一起,以形成一个整体,使之可以运行完善由。文献1112可知。具体实现程序如下(仅部分主要代码)VOIDMAIN/主函数SYSTEM“TITLE欢乐五子棋王勇制作“/设置标题SRANDUNSIGNEDTIMENULL/初始化随机种子FORSHOWMENU/输出主菜单SWITCHGETCHOOSE1,3CASE1VSFALSEBREAK/对手是计算机CASE2VSTRUEBREAK/对手是人CASE3PRINTF“N“/退出游戏RETURNBOOLVSHUMAN/对手是否是人VOIDVSBOOLHUMAN/对局主要函数INTI,JSYSTEM“MODECONCOLS44LINES22“设置窗体大小INTCOLOR1/黑棋先走INTLASTX,LASTY/光标的上一个位置INTCOMPUTER/电脑执黑还是执白NODECHESSBOARD15150,0/棋盘IFHUMAN/对手是电脑SHOWSUBMENU/选择谁是先手SWITCHGETCHOOSE1,3CASE1COMPUTER0ATTACKTREND1DEFENTTREND1/电脑先手则优先进攻BREAKCASE2COMPUTER1ATTACKTREND1DEFENTTREND2/电脑后手则优先防御BREAKCASE3RETURN/返回上级菜单FORI0I1/第一子必须下在棋盘中央IFCOLORCOMPUTER|HUMANGETMOVECHESSBOARD/该人走棋ELSE/该电脑走棋LASTXCURSORXLASTYCURSORY/记录光标位置AICHESSBOARD,/电脑走棋RENEWCHESSBOARD,LASTX,LASTY/更新棋盘IFQUITRETURN/如果按了退出热键则返回IFREGRET/如果按了悔棋热键则调用悔棋函数BEBACKCHESSBOARD,I/调用悔棋函数IFI2I2ELSEIFI2I1COLORCOLOR12ELSE/如果没有按热键,则在光标位置下子CHESSBOARDCURSORXCURSORYSTEPICHESSBOARDCURSORXCURSORYCOLORCOLORRENEWCHESSBOARD,CURSORX,CURSORYCOLORCOLOR12IFWINCHESSBOARD,CURSORX,CURSORY,COLOR12GOTOXY0,0PRINTF“GOTOXY0,0IFCOLOR1MESSAGEBOXGETHWND,“白棋赢“,“注意“,MB_OKELSEMESSAGEBOXGETHWND,“黑棋赢“,“注意“,MB_OKGETCHRETURNGOTOXY0,0/如果下了225步还没人赢棋则平局MESSAGEBOXGETHWND,“和棋“,“注意“,MB_OK6总结经过几个月的努力实验,终于及时完成了本次的毕业设计与论文,至此已经完成了任务书的全部要求,成功的实现了游戏的开始,游戏的设置与游戏帮助等问题。不过由于时间有些短暂,所以整个设计仍然存在一些问题与不足,如进行游戏是没有设置背景音乐等,不过还是有一些体会的。在此次毕业设计中,我意识到把理论知识转化成实际操作的重要性,因为即使你再怎么博学,如果无法转换成实际的成果,别人就不会知道你,认可你。另外想要做好一件事,有时候你必须先会做其他的事情,比如在此次设计中,若想要实现人机对战模式就必须先实现画出棋盘,棋子,制定棋局规则,判断输赢等功能。有时候当你遇到你无法解决的困难时,你需要打破常规方法,另辟蹊径,从其他角度多番尝试,总会有方法实现的。致谢即将毕业了,大学四年匆匆而过,回想往昔,不禁莞尔,四年时间,说长不长上,但是这四年却是我们一生中最重要的一个四年,四年中我们告别了稚嫩的青涩年华,渐渐走向了成熟。四年里我们学会了很多,比如如何更好的把自己学到的知识应用于实际,如何更好的与他人相处,如何更好的待人接物,还有很多或许是你自己都没有发现的,但确实已经改变的地方,这四年我们每个人都有了一颗玲珑心,虽不能面面俱到,但已经可以处理一些不是特别繁琐的事情。在此,首先我要感谢我的毕业设计指导老师拓守恒老师。感谢他能在百忙之中挤出时间来审查,批阅我的论文。还有那些教过我们的所有的老师,你们严谨的教学态度,一丝不苟的作风一直都是我们工作与生活的标榜。还有我要感谢那些与我一起走过这四年的人,感谢陪伴了我四年的同学、朋友,感谢你们的陪伴和你们为我提出的建议与意见,你们的支持、鼓励还有帮助,让我度过了一个充实的大学四年。本次我的毕业设计论文是在拓守恒拓老师的细心指导之下完成的,导师渊博的知识,严谨的治学态度,幽默诙谐的教导方式,平易近人的生活态度深深的影响着我,这使我确立了坚定的学术目标,掌握了基本的研究思路与研究方法,更使我明白了很多的道理。本篇论文从选题到答辩完成,所有的步骤都有导师的功劳,导师细细地讲解了每一步的要点要求,倾注了大量的汗水。遂再次谨向导师表示崇高的敬意和衷心的感谢本论文的完成离不开所有老师和同学的帮助,没有他们的帮助与支持,我自己独立一个人很难达到要求,在此愿所有同学答辩顺利完成,所有老师工作顺利,生活愉快。但愿人长久,情谊存永远。参考文献1谭浩强,C程序设计3版北京清华大学出版社20052谭浩强,C程序设计北京清华大学出版社,20043郑阿奇、丁有和,VISUALC应用教程北京人民邮电出版社4潘爱民MICROSOFTVISUALCNET技术内幕(第6版),清华大学出版社,1999年10月5汪晓平、钟军VISUALC网络通信协议分析与应用实现,人民邮电出版社,2001年1月6刘宗田、邢大红、孙慧杰C编程思想,机械工业出版社,2002年10月7JESSELIBERTY著21天学通C,人民邮电出版社,2003年5月8侯捷、孟岩C标准程序库,华中科技大学出版社,2006年11月9CHARLESPETZOLDWINDOWS程序设计,北京大学出版社,2002年1月10易君VISUALCNET网络编程,中国铁道出版社,2003年5月11李英军深入浅出MFC(第2版),机械工程出版社,2001年2月12王咏刚MSDNFORVISUALSTUDIO60,电子工业出版社,2003年6月13朱战立,数据结构使用C语言西安交通大学出版社,2005年1月14王为青刘变红C语言高级编程实例剖析人民邮电出版社1996年现在,我把自己20多年来的班主任工作经验,总结如下,一并赠送给您,希望能帮到您让每一个学生都有辉煌的明天我的治班方略我很欣赏一句话,那就是“教师的工作是托起明天的太阳”。是啊,我们今天的一切工作,不就是为了每一个学生都能拥有一个辉煌的未来吗那么,如何为孩子未来的发展打下良好的基础是值得每一位教师,尤其是班主任教师的深思。因为班主任是学校具有特殊身份的教育者。作为班级的教育者和组织者,在班集体的发展和学生的健康成长中起着十分重要的作用。我从参加工作至今,二十多年来一直担任班主任工作,回忆这些年带班所走过的每一步,品味着工作带给我的欣慰和快乐,更加坚定了我做一名优秀班主任的信念和决心。经过多年的实践探索和学习思考,我的治班理念已经逐渐明朗,那就是“以情育人,用爱心点燃学生心灵的火花;活动育人,用丰富多彩的活动促进学生全面发展”。一位教育家曾经说过“犹如没有水,就不能称其为池塘一样,没有感情,没有爱,也就没有教育。”工作二十多年来,我从没有放弃过教师自身素质的培养,从教中学,从学中教,乐此不疲。用我的真诚、爱意透视学生纯洁而又丰富的内心世界,唤起学生对爱和真诚的追求,感染学生、浸润学生渴望理解的心田,用充满爱的语言去抚慰一颗颗幼小的心灵。一、关爱学生,用爱撑起一片蓝天、沟通是教育的前提。师生之间如果缺乏了解和沟通,感情就会有隔膜,教育就无从展开。沟通应从了解开始。苏联著名教育家乌申斯基说过“如果教育家希望从一切方面去教育人,那么就必须从一切方面去了解人。“因此,我在班级管理工作中,经常通过不同方法与学生交流,在交流中了解每个同学的家庭情况、性格特点、爱好、健康状况及学习变化。例如,我在与如今所带班级学生的交流中得知班内三名同学生活在单亲

温馨提示

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

评论

0/150

提交评论