五子棋游戏的单机版及网络版的实现 毕业论文.doc

上传人:李司机 文档编号:7037250 上传时间:2024-04-23 格式:DOC 页数:33 大小:337.95KB
返回 下载 相关 举报
五子棋游戏的单机版及网络版的实现 毕业论文.doc_第1页
第1页 / 共33页
五子棋游戏的单机版及网络版的实现 毕业论文.doc_第2页
第2页 / 共33页
五子棋游戏的单机版及网络版的实现 毕业论文.doc_第3页
第3页 / 共33页
五子棋游戏的单机版及网络版的实现 毕业论文.doc_第4页
第4页 / 共33页
五子棋游戏的单机版及网络版的实现 毕业论文.doc_第5页
第5页 / 共33页
点击查看更多>>
资源描述

《五子棋游戏的单机版及网络版的实现 毕业论文.doc》由会员分享,可在线阅读,更多相关《五子棋游戏的单机版及网络版的实现 毕业论文.doc(33页珍藏版)》请在三一办公上搜索。

1、本 科 生 毕 业 论 文题 目:五子棋游戏的单机版及网络版的实现院 系:信息科学与技术学院 计算机科学系 专 业: 网络工程 学生姓名: xxx 学 号: xxx 指导教师: xxx 摘 要 随着IT技术的发展,很多日常生活中的游戏都被搬到了计算机里供大众娱乐,尤其是博弈类的棋类游戏,如中国象棋,围棋,五子棋等,近年来人们对人工智能技术的研究成果更使得计算机在这些博弈游戏中能战胜很多玩家。本文结合五子棋这个游戏的特点,将阐述单机版五子棋的算法设计,突出人工智能在博弈方面的应用,旨在试验人工智能里的一些搜索算法,最终确定人工智能在未来各学科里的重要应用性;最后还涉及网络版五子棋的设计实现,同时

2、介绍一般网络游戏的架构。第一章简要介绍五子棋相关的状况。第二章概述了人工智能与五子棋相关的各种算法。第三章详细描述本设计所使用的人工智能算法。第四章讲述一般网络游戏的架构以及本设计中网络版五子棋的实现细则。第五章总结本次设计过程中的各种收获。关键词:五子棋; 人工智能; 博弈; 网络游戏AbstractWith the development of IT technology, a lot Games in daily life have been moved to the computer for public entertainment, especially the game of ch

3、ess-type games, such as Chinese chess, the game of Go , gobang , etc., in recent years , artificial intelligence research makes the results that computer can overcome a lot of players in these Games. In this paper, with the characteristics of Gobang ,I will describe algorithm design on stand-alone v

4、ersion of Gobang ,to highlight the application of artificial intelligence in the game , and test some search algorithms of artificial intelligence , and ultimately determine the important application of artificial intelligence in the various disciplines ; Finally the paper also involves the design o

5、f implementation Gobang online version , at the same time introduces the general architecture of online Games. Chapter I briefly introduce the relevant situation of Gobang. Chapter II provides an overview of Artificial Intelligence and Gobang related algorithms. Chapter III detailed description of t

6、he design of algorithms used in artificial intelligence. Chapter IV on the general network architecture of the Games as well as the online version of the design in the implementation details.Chapter V summarized the harvest of the designing.Keywords: Gobang;Artificial Intelligence;Game;Online Game-

7、iv -目 录第一章前言11.1五子棋的棋盘11.2五子棋的基本规则2第二章 人工智能的应用52.1人工智能的发展历史52.2人工智能研究的特点72.3人工智能的应用72.4博弈算法极大极小搜索算法9第三章 五子棋单机部分详细设计12第四章 五子棋联机部分详细设计194.1 联机网络游戏概述194.2 联机五子棋的设计20第五章 结论24参考文献29致谢30第一章 前言五子棋是我国古代的、传统的黑白棋种之一,大约在南北朝时期随围棋一起先后传入朝鲜、日本等地。五子棋在日本叫“连珠棋”,英文称之为“Gobang” 或者FIR(Five in a row的缩写) , 亦有“连五子”,“五子连”,“串

8、珠”.,“五目”,“五目碰”等多种称谓1。通过一系列的规则变化使连珠五子棋这一简单的游戏复杂化、规范化,而最终成为今天的职业连珠五子棋,同时也成为一种国际比赛棋。 1988年8 月8日,国际连珠联盟( RI F )由日 本、 俄罗斯、瑞典、亚美尼亚等九个成员国在瑞典宣告成立。五子棋在国内外发展速度相当快,预计在几年后,五子棋能在很多国家形成热门运动。 我国也不例外, 在很多热衷于五子棋事业的棋手的共同努力下,有望在不久的将来成为五子棋运动的中心。 随着我国经济社会的快速发展,人们生活水平不断提高,人们的生活观念发生改变,高质量的生活、现代化的生活方式成为人们追求的目标,休闲、 娱乐性体育活动作

9、为时尚生活的一部分, 被越来越多的人所追捧。 棋类项目作为一种智力性体育项目, 可以修身养性、 益智健心, 也可以满足人们对于休闲和娱乐的需求. 一些项目如五子棋等由于项目自身的特点和生命力, 也一直被人们所喜爱, 因此得以生存和发展, 成为许多人喜爱的休闲娱乐性棋类项目。随着时代的发展、社会的进步和人民生活水平的提高, 人们对业余体育文化生活方面的需求会不断增加, 这些“ 趣味性”棋类项目 将会越来越受到关注和重视。1.1五子棋的棋盘五子棋的棋盘如图1所示,正中一点为“天元”。棋盘两端的横线称端线。棋盘左右最外边的两条纵线称边线。从两条端线和两条边线向正中发展而纵横交叉在第四条线形成的四个点

10、称为“星”。天元和星应在棋盘上用直径约为0.5厘米的实心小圆点标出。图1 五子棋棋盘示意图以持黑方为准,棋盘上的纵轴线从左到右用英文字母AO标记。横行线从近到远用数字115标记。纵横轴上的横纵线交叉点分别用横纵线标记的名称合写成。如“天元”H8,四个“星”分别为D4,D12,L12,L4。1.2五子棋的基本规则黑白双方依次落子, 任一方先在棋盘上形成横向,竖向,斜向的连续的相同颜色的五个( 含五个以上) 棋子的一方为胜。21)连 在棋阳线和阴线的任意一条线上形成的有5 个或5 个以上的同色棋子不间隔地紧紧相连。五连:在棋盘上形成的5 个同色棋子的“ 连” 。长连:在棋盘上形成的6个或6个以上同

11、色棋子的“ 连”。2)“四”包括“活四”和“冲四”。活四:如图2所示,在棋盘某一条阳线或阴线上有同色4子不间隔地紧紧相连,且在此4子两端延长线上各有一个无子的交叉点与此4子紧密相连。图2 活四冲四:除“ 活四” 外的,再下一着棋便可形成五连,并且存在五连的可能性的局面。白棋再下一着可形成长连的局面也视为“四”,如图3所示。图3 黑棋各种不同的冲四3)“三”指活三,包括“连三”和“跳三”。 连三:在棋盘某一条阳线或阴线上有同色三子相连,且在此三子两端延长线上有一端至少有一个,另一端至少有两个无子的交叉点与此三子紧密相连。 跳三:中间仅间隔一个无子交叉点的连三, 但两端延长线均至少有一个无子的交叉

12、点与此三子相连。4)禁手:对局中禁止使用的着法。 黑棋禁手包括“三三”,“ 四四” 和“ 长连” , 禁手只对黑棋而言。 三三:由于黑方走一着在无子交叉点上同时形成二个或二个以上黑方“ 活” 的局面,如图4所示。图4 三三禁手 四四:由于黑方走一着在无子交叉点上同时形成二个或二个以上黑方“ 四” 的局面。5 )先手对方必须应答的着法,其中“ 冲四“ 称为绝对先手。6 )四三指某一方同时具备两个先手,其中一个是“ 四” ,一个是“ 活三”.7 )三手可交换 是指黑棋下盘面第3 着棋后,白方在应白之前,如感觉黑方棋形不利于己方,可提出交换,即执白棋一方变为执黑棋一方,而黑方不可以不换。8 )五手两

13、打 是指黑棋在下盘面上关键的第五手棋时, 必须下两步棋,让白 棋在这两步棋中任选一步,然后再继续对弈。一般说来,白棋肯定拿掉对白方不利的一点, 而保留对黑方较为不利的那点让黑方行棋。第二章 人工智能的应用2.1人工智能的发展历史1. 萌芽时期(1956年以前) 17世纪,法国物理学家B.Pascal制成的机械加法器; 在其基础上,德国数学家Leibniz制成了四则运算的计算器。 1936年 英国数学家Turning提出了图灵机模型; 1938年 德国工程师Zuse研制成了第一台累计数字计算机; 1946年 美国诞生了第一台电子数字计算机ENIAC; 1945年,奥地利学者系统论的创立 1948

14、年,美国数学家N.Wiener控制论的创立; 1948年,美国数学家C.E.Shannon信息论的创立;2. 形成时期(1956-1961年) 1956年,在美国Dartmouth大学的一次历史性聚会是人工智能学科正式诞生的标志。有三个较有影响的研究团队: 心理学小组:A.Newell、J.Shaw和H.Simon等人于1957年编制出逻辑理论机LT,证明了数学原理中第2章的38条定理,1963年的新版LT证明了该章全部共52条定理。1960年,通用问题求解器GPS能求解10 种不同类课题的问题 IBM研究小组:A.Samuel研究的具有自学习、自组织和自适应能力的西洋跳棋程序,1959年,该

15、程序战胜了设计者,1962年,战胜了美国的一个州冠军。 MIT研究小组:1959年,MCCarthy发明了人工智能主要的语言LISP。1958年开发了行动计划咨询系统。1960年Minsky的论文:走向人工智能的步骤。 其他:1956年N.Chomsky的文法体系、1958年Shelffridge的模式识别系统等,都对人工智能研究产生了有益的影响。3. 发展时期(1961年以后)o 符号主义学派方面: 1965年,J.A.Robinson的归结原理,推动了定理机器证明技术的发展: 1965年,E.A.Feigenbaum研制的基于领域知识和专家知识的DENDRAL程序,能根据质谱仪的数据并利用

16、相关知识,推断出有机化合物的分子结构,达到甚至超过了化学家的水平。后来又有医学专家系统MYCIN系统、地质矿产勘探专家系统PROSPECTOR、计算机配置专家系统R1等等。 1969年,C.Green提出了基于一阶谓词演算方法。 1973年,R.F.Simmon提出语义网结构。 1972年,M.Minsky提出框架结构。 1972年,法国马赛大学A.Colmerauer等提出了逻辑程序设计语言Prolog。 1977年,E.A.Feigenbaum提出了“知识工程”的概念,人工智能的研究从以推理为中心转向以知识为中心,进入了所谓的知识期。 进入20世纪80年代后,专家系统和知识工程在理论、技术

17、和应用方面都有长足的进步和发展。o 专家系统的建造进入了应用高级开发工具阶段。o 出现了多专家系统、大型专家系统、微专家系统等。o 专家系统和知识工程技术已应用到各种计算机应用系统中,出现了智能管理信息系统、智能决策支持系统、智能控制系统、智能CAD系统、智能CAI系统、智能数据库系统和智能多媒体系统等等。o 知识表示、不确定性推理等方面都取得了重大的进展。o 连接主义学派方面 1943年,Mcculloch和Pitts第1次提出模拟神经元 。 1957年,P.Rosenblat开发了所谓感知机(perception)的单层神经网络。 1962年,B.Windrow提出了自适应线性元件(asa

18、line),并应用于天气预报、电子线路板分析、人工视觉等许多问题。 1969年,M.L.Minsky应用数学理论深入分析了单层神经网络,证明它不能实现异或门的功能,使神经网络系统研究热潮迅速降温。 1982年,J.Hopfield提出了一种全互联的神经元网络,并于1985年成功地求解了TSP问题(几秒内求解有31个城市的TSP问题)。 1985年,Rumelhart提出了反向传播(BP)算法,解决了多层人工神经网络的学习问题,使冷落了20多年的神经网络研究又东山再起。 此后神经网络在智能控制、语言识别、图形文字识别、最优化问题求解和智能计算机等领域进行了实践并取得了一系列的成果。32.2人工智

19、能研究的特点 人工智能是一门知识的科学。以知识为对象,研究知识的获取、表示和使用。 人工智能的系统过程是,数据处理-知识处理,数据-符号。符号表示的是知识而不是数值、数据。 问题求解过程有启发,有推导。 人工智能是引起争论最多的科学之一。 问题焦点:当前人工智能的研究应该以人类的普遍思维规律为主,还是以特定知识的处理和运用为主?智能的本质是什么?机器能达到人的水平吗?总而言之,人工智能研究是非常困难的。 万能的逻辑推理体系至今没有创造出来,并不是因为人工智能专家的本事不够,而是因为这种万能的体系从根本上就是不可能有的。他最大的弱点就是缺乏知识,缺乏人类在几千年的文明史上积累起来的知识,在实际生

20、活中,人是根据知识行事的,而不是根据在抽象原则上的推理行事的。 即使就推理体系来说,它的主要技术是状态空间搜索,而在执行中遇到的主要困难就是 组合爆炸 ,事实表明,单靠一些思维原则是解决不了组合爆炸问题的,要摆脱困境,只有大量使用理性的知识。2.3人工智能的应用1、问题求解。 人工智能的第一大成就是下棋程序,在下棋程度中应用的某些技术,如向前看几步,把困难的问题分解成一些较容易的子问题,发展成为搜索和问题归纳这样的人工智能基本技术。今天的计算机程序已能够达到下各种方盘棋和国际象棋的锦标赛水平。但是,尚未解决包括人类棋手具有的但尚不能明确表达的能力。如国际象棋大师们洞察棋局的能力。另一个问题是涉

21、及问题的原概念,在人工智能中叫问题表示的选择,人们常能找到某种思考问题的方法,从而使求解变易而解决该问题。到目前为止,人工智能程序已能知道如何考虑它们要解决的问题,即搜索解答空间,寻找较优解答。 2、 自然语言处理。 自然语言的处理是人工智能技术应用于实际领域的典型范例,经过多年艰苦努力,这一领域已获得了大量令人注目的成果。目前该领域的主要课题是:计算机系统如何以主题和对话情境为基础,注重大量的常识世界知识和期望作用,生成和理解自然语言。这是一个极其复杂的编码和解码问题。3、逻辑推理与定理证明。 逻辑推理是人工智能研究中最持久的领域之一,其中特别重要的是要找到一些方法,只把注意力集中在一个大型

22、的数据库中的有关事实上,留意可信的证明,并在出现新信息时适时修正这些证明。对数学中臆测的题。定理寻找一个证明或反证,不仅需要有根据假设进行演绎的能力,而且许多非形式的工作,包括医疗诊断和信息检索都可以和定理证明问题一样加以形式化,因此,在人工智能方法的研究中定理证明是一个极其重要的论题。 4、专家系统。 专家系统是目前人工智能中最活跃、最有成效的一个研究领域,它是一种具有特定领域内大量知识与经验的程序系统。近年来,在“ 专家系统”或“ 知识工程”的研究中已出现了成功和有效应用人工智能技术的趋势。人类专家由于具有丰富的知识,所以才能达到优异的解决问题的能力。那么计算机程序如果能体现和应用这些知识

23、,也应该能解决人类专家所解决的问题,而且能帮助人类专家发现推理过程中出现的差错,现在这一点已被证实。如在矿物勘测、化学分析、规划和医学诊断方面,专家系统已经达到了人类专家的水平。成功的例子如:PROSPECTOR系统发现了一个钼矿沉积,价值超过1亿美元。DENDRL系统的性能已超过一般专家的水平,可供数百人在化学结构分析方面的使用。MY CIN系统可以对血液传染病的诊断治疗方案提供咨询意见。经正式鉴定结果,对患有细菌血液病、脑膜炎方面的诊断和提供治疗方案已超过了这方面的专家。5、智能信息检索技术。 信息获取和精化技术已成为当代计算机科学与技术研究中迫切需要研究的课题,将人工智能技术应用于这一领

24、域的研究是人工智能走向广泛实际应用的契机与突破口。 42.4博弈算法极大极小搜索算法1 . 博弈树一与或图 Grundy游戏 有一堆数目为n的钱币,由两位选手轮流进行分堆,要求每个选手每次只把其中某一堆分成数目不等的两小堆。 例如选手甲把n 分成两堆后, 轮到乙就可以挑其中一堆来分, 如此进行下去, 直到有一位选手先无法把钱币分成不相等的两堆时就得认输. 5 钱币问题分析:如果用数字序列X1Xn表示n堆钱币不同个数,再用两个说明符号Max,Min表示选手,那么(X1,Xn,M)表示某个选手的走步状态,规则if(X1,Xn,Max) and (Xi=y+z & y!=z)Then (X1,Xi-

25、1,y,z,Xi+1, ,Xn,Min)设初始状态为(7,Min)则该问题的状态空间如图5:图5 Grundy游戏的博弈树 从图可以看出,对于Min走后的每一个Ma x节点,对Ma x 而言,只要有一个Ma x 节点可以获胜,那么Ma x即可获胜, Ma x肯定选有利于自己最好的节点开始走步; 而对于Ma x扩展出的所有Mi n节点, 要确保Ma x节点获胜,必须所有Mi n 节点都是必败节点;因此对Ma x 层节点来说,是一个“ 或”的概念,而对于Mi n层节点,是一个“ 与”的概念。由此扩展出来的博弈树,称为“与或图”。2.极大极小算法 博弈程序的任务就是对博弈树进行搜索找出当前最优的一步

26、行棋。 对博弈树进行极大极小搜索, 可以达到这一目的。极大极小搜索,是因为博弈双方所要达到的目的相反, 一方要寻找的利益恰是一方失去的利益, 所以博弈的一方总是希望下一走是儿子节点中取值最大者, 而另一方恰恰相反。 这便形成了极大极小过程。 当然,程序不能也没有必要做到搜索整棵博弈树的所有节点,对于一些已经确定为不佳的走步可以将以它为根节点的子树剪掉。 而且,搜索也不必真地进行到分出胜负的棋局,只需要在一定深度范围内对局面进行评价即可。 只有搜索空间缩小到一定程度, 搜索才可以真正的进行。当搜索进行到一定深度, 用局面评价机制来评价棋局, 按照极大极小的原则选出最优,向上回溯, 给出这一局面的

27、父亲节点的价值评价,然后再继续向上回溯,一直到根节点,最优走步就是这样搜索出来的。例如:设计一个评估函数f,对所有棋局进行评估。 = 我方胜定的棋局n 0 对我方有利的棋局n, f(n) =0 和局或双方势均力敌的棋局n, 0 对我方不利的棋局n =- 我方败定的棋局n基本思想:考虑双方向前对弈若干步,然后作出决策,从可能的走法中选择对自己最有利的走法。即考虑与或树(状态空间)的若干层,我方(MAX)走棋时,选择下一层评估值最大的方向走棋,对方(MIN)的走法选择下一层评估值最小的方向走棋,最后一层的结点直接用评估函数估算,然后计算上层结点的倒推值,一般来说,考虑的层数越多,得到的倒推值就更准

28、确。3.极大极小法过程描述a) T:=(s,MAX), OPEN:=s, CLOSED=();b) LOOP1: IF OPEN=() THEN GO LOOP2;c) N:=FIRST(OPEN), REMOVE(n,OPEN), ADD(n,CLOSED)d) IF n可以直接判定胜、负或平局 THEN f(n) =或 -或0 ELSE EXPEND(n)ni,ADD(ni,T) IF d(ni)k THEN ADD(ni,OPEN), GO LOOP 1; ELSE 计算f(ni), GO LOOP1 /到达深度ke) LOOP2 :IF CLOSED=() THEN GO LOOP3

29、ELSE n =FIRST(CLOSED);f) IF (nPMAX)且(f(nciMIN)有值) THEN f(np)=max(f(nci),REMOVE(np ,CLOSED) /若MAX所有子节点均有值,则该MAX取其极大值 IF (nPMIN)且(f(nciMAX)有值) THEN f(np)=min(f(nci),REMOVE(np ,CLOSED /若MIN所有子节点均有值,则该MIN取其极小值g) GO LOOP2h) LOOP3: IF f(s) NIL THEN EXIT(END M(MOVE,T)算法补充说明:o 分两个阶段计算f(s) 用宽度优先法生成规定深度的全部博弈树

30、,然后对其所有端节点计算其静态估计函数值。 从底向上逐级求非端节点的倒推估计值,直到求出初始节点的倒推值f(s)为止。o 根据f(s)即可取得较好的走步o 等对手响应后,再以当前状态为初始状态,重复调用该过程即可。- 23 -第三章 五子棋单机部分详细设计在本次“五子棋单机部分“程序的编写中,运用了博弈树进行搜索,在选取最优的走步时使用极大极小分析法,考虑到搜索的时间复杂度和空间复杂度,在程序中只进行了2步搜索,即计算机在考虑下一步的走法时,只对玩家进行一步的推测。(程序中的棋盘规格为15*15) 下面对具体做法进行描述:3.1数据结构定义:棋盘定义:int board1515;在15*15的

31、棋盘上,获胜的情况总共有572种, 表 1 获胜的情况* 如表1中的第一行“*“所代表的格子就是一种获胜组合。 计算机和玩家的获胜组合情况bool ctable1515572,bool ptable1515572,来表示棋盘上的各个位置都在那种获胜组合中。计算机和玩家在各个获胜组合中所填入的棋子数int win2572,如有一方在某一获胜组合的棋子数达到5个,该方即获胜。Bool player:是否轮到玩家下棋Bool computer:是否轮到计算机下棋Bool start:游戏是否开始Bool pwin:玩家是否获胜Bool cwin:计算机是否获胜CPoint m_pplastpos;/

32、玩家走的前一步棋CPoint m_pclastpos;/计算机走的前一步棋 为便于说明程序的主要算法,这里先说本程序中估价函数的选取方法:e=p1+p2;p1为下完当前这步棋时计算机的得分;p2为下完当前这步棋时玩家的得分(p2其实为负),这样做即考虑了进攻的因数,由考虑了防守的因数,两个方面都进行了考虑,防止计算机只考虑进攻而忽略防守,同时也防止计算机只考虑防守而忽略进攻,从而达到比较好的情况。3.2主要流程描述 其程序流程如下:(1)初始化棋盘:判断哪方先开始,(2)初始化计算机和玩家的获胜组合情况bool ctable1515572,bool ptable1515572void Init

33、ializeBoard(),里面设置好ctable ptable win 等变量(3)给出下了一个子后的分数:根据各个获胜组合里拥有的不同棋数来给不同的分数int GiveScore(int type, int x, int y)int i,score=0;for(i=0;i572;i+)/计算机下if(type=1)if(ctablexyi)switch(win1i)case 1:score+=5;break;case 2:score+=50;break;case 3:score+=100;break;case 4:score+=10000;break; default:break;/人下e

34、lseif(ptablexyi)switch(win0i)case 1:score-=5;break; case 2: score-=50; break; case 3: score-=500; break; case 4: score-=5000;break; default:break;return score;(4)核心程序 ,(5)即计算机如何运用极小极大法分析,(6)选取最优走法,(7)在程序中极小极大法即体现在两个while循环前后及之间的内容,其估价函数的体现在ctemp+pscore中 void ComTurn()/bestx,best为当前最佳位置,i,j是人能下的各种位置;

35、pi,pj是计算机能下的各种位置Int bestx,besty,i,j,pi,pj,ptemp,ctemp,pscore=10,cscore=-10000,ctempboard1515,ptempboard1515;int m,n,temp120,temp220;/暂存第一步搜索的信息if(start)if(board77=2)bestx=7;besty=7;elsebestx=8;besty=8;start=false;else/寻找最佳位置GetBoard(ctempboard,board);while(SearchBlank(i,j,ctempboard)/进行第一步查找n=0;psco

36、re=10;GetBoard(ptempboard,board);/获取当前棋盘状态ctempboardij=3;/标记已被查找ctemp=GiveScore(1,i,j);for(m=0;mptemp)/此时为玩家下子,运用极小极大法时应选取最小值pscore=ptemp;for(m=0;mcscore) /此时为计算机下子,运用极小极大法时应选取最最大值cscore=ctemp+pscore;bestx=pi;besty=pj;boardbestxbesty=1;if(m_pclastpos.x!=-1&m_pclastpos.y!=-1)/画前一棋子if(!m_bwfirst)DrawB

37、lackChess(m_pclastpos.x,m_pclastpos.y);elseDrawWhiteChess(m_pclastpos.x,m_pclastpos.y);if(!m_bwfirst)DrawNowBlack(bestx,besty);elseDrawNowWhite(bestx,besty);m_pclastpos.x=bestx;m_pclastpos.y=besty;for(i=0;i572;i+)/修改计算机下子后,棋盘的变化状况if(ctablebestxbestyi&win1i!=7)win1i+;if(ptablebestxbestyi)ptablebestxb

38、estyi=false;win0i=7;computer=false;player=true;(8)玩家下棋:(其中坐标(9)加减目的是调整图片的位置和棋盘对齐) void OnLButtonDown(UINT nFlags, CPoint point) int x,y,tx,ty;/ TODO: Add your message handler code here and/or call defaultif(player&point.x=535&point.y=36)tx-=36;while(ty=36)ty-=36;tx+=x/36;ty+=y/36;if(tx18)x=x/36+1;el

39、sex=x/36;if(ty18)y=y/36+1;elsey=y/36;if(boardxy=2)boardxy=0;/设为玩家的棋子if(m_pplastpos.x!=-1&m_pplastpos.y!=-1)if(!m_bwfirst)DrawWhiteChess(m_pplastpos.x,m_pplastpos.y); else DrawBlackChess(m_pplastpos.x,m_pplastpos.y);if(!m_bwfirst)DrawNowWhite(x,y);elseDrawNowBlack(x,y);m_pplastpos.x=x;m_pplastpos.y=y

40、;for(int i=0;i572;i+)/修改玩家下子后棋盘状态的变化if(i=80)i=80;if(ptablexyi&win0i!=7)win0i+;if(ctablexyi)ctablexyi=false;win1i=7;player=false; computer=true;CDialog:OnLButtonDown(nFlags, point);(10)程序流程的部分控制:void OnTimer(UINT nIDEvent) / TODO: Add your message handler code here and/or call defaultIsWin();/是否已有一方获胜if(pwin)/玩家获胜KillTimer(0);MessageBox(恭喜,您真厉害!);player=false;computer=false;m_binit=true;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号