五子棋C++实验报告.doc_第1页
五子棋C++实验报告.doc_第2页
五子棋C++实验报告.doc_第3页
五子棋C++实验报告.doc_第4页
五子棋C++实验报告.doc_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

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

文档简介

项目名称:三子连珠游戏 班 级: 09计算机一班 姓名学号:邱道英(0094000) 张海平(0094001) 蓝震宇(0094002) 完成时间:2011年06月18号 指导教师: 杨勇 28目 录 一、需求分析1.1 开发背景11.2 项目目标21.3 运行环境2二、 程序分析2.1函数分析 .22.2程序流程图. 3三、 技术路线3.1 总体方案43.2 详细设计4四、工程进度.5 五、测试报告.6六、个人小结.13七、参考文献.15附录:程序代码16一、 需求分析1.1开发背景电脑游戏行业经过二十年的发展,已经成为与影视、音乐等并驾齐驱的全球最重要的娱乐产业之一,其年销售额超过好莱坞的全年收入。互联网的出现为电脑游戏行业发展注入了新的活力,凭借信息双向交流、速度快、不受空间限制等优势,让真人参与游戏,提高了游戏的互动性、仿真性和竞技性,使玩家在虚拟世界里可以发挥现实世界无法展现的潜能,改变了单机版游戏固定、呆板、与机器对话的状况。网络游戏的这些优势不仅使其在电脑游戏行业中异军突起并在某种程度上取代了单机版游戏,而且成为网络业三大(网上金融、网上教育和网络游戏)赢利且利润优厚的领域之一。网络作为一种新兴的传播方式,主要包括三大内容:娱乐、资讯、通讯。提到网络娱乐,过去主要指的是单机版游戏,没有引入网络的概念但随着科技的发展,游戏娱乐产业也在成长目前,国内的游戏娱乐产业正处于起步阶段,特点表现为:第一,它是一种文化的传播。娱乐产业可以潜移默化地改变人的观念,当前,很多多媒体的播放已被电脑网络所取代。第二,网络游戏加强了人与人的沟通。第三,网络游戏具有一定的教育意义。网络游戏所具有的角色扮演的功能,使得玩家能通过互助更好地完成游戏中的各项任务。网络无国界,游戏在网络文化产业世界的发展中地位会越来越高。目前在国外,休闲游戏如棋类等,玩家的年龄跨度非常大,这和我国目前网游市场以青少年为主要消费人群的状况截然不同。其实,网络可以解决空间的问题,网络和生活越来越息息相关,因此,开辟适合各个年龄层的游戏产品迫在眉睫。同时,这也涉及到一个企业开发的能力。娱乐产业发展到一定程度,通过不断锻炼和经验的积累,完全可以通过融入娱乐的成分把教条的东西深入浅出地展现给消费者。就国内的发展来看,最近這两三年内国内的游戏公司如雨后春笋般的成立,所开发或代理的网络游戏更是不胜枚举。以全球游戏业界的发展来看,這几年韩国的表现最为突出,特別是在网络游戏的技术研发兴游戏制作,其所发行的网络游戏更成为全球游戏产业重要的指标之一。去年在美国洛杉矶所举行的 E3(Electronic Entertainment Exposition)展中,已经有几家的韩国厂商挤入世界第一线的游戏开发厂商之列。近几年来,由于 3D 硬体绘图技术的突破,使得即时描绘的书面越来越精致,而且3D遊戏性更多元化更逼近真实世界,因此在遊戏产业中,3D 游戏已经逐渐取代2D游戏为游戏市场的主流,即使是网络游戏,也慢慢趋向3D化。然而游戏3D化将会带来的游戏开发上的困难等问题,这些问题以后都需要逐步解决。人们面对电脑的时间越来越多,面对身边的人的时间越来越少,所以我们游戏所要达到的目的就是加大人们之间的沟通,让大家随时随地都可以体验到玩游戏的乐趣。而三子棋是一种受大众广泛喜爱的游戏,其规则简单,变化多端,非常富有趣味性和消遣性。同样的,通过这个游戏,既能在休闲时刻娱乐一下,也能在压力面临的时候放松一刻。1.2项目目标开发一个三子棋游戏。该游戏基于DOS实现,其功能可概括为:一:玩家可以设定游戏的玩法,即在游戏开始时输入变量,决定选用三子棋或者四子棋;二:玩家可以设置期盼的大小,即在游戏开始时输入一变量n(n=39),使棋盘的大小为n*n。;三:加入可以悔棋功能,要求任意方可以在对方下去后修改一步,即将对方当前步和本方上一步删除,本方重新下棋。;四:下棋方法使用输入棋盘坐标,棋盘在每次下棋后刷新屏幕。1.3运行环境软件:运行在Windows软件环境下;硬件:具有网络连接设备的PC机或笔记本电脑;最低配置:要求内存大于128M,硬盘大于1G。本系统的设计是在Windows 7 RTM 7600.16385(X86)中文旗舰版操作系统环境下,使用Microsoft Visual C+ 6.0中文版开发成功的。由于Visual C+ 6.0在不牺牲灵活性、性能和控制力度的同时,给C+带来更高水平的生产效率。除了IntelliSense Technology(智能感应技术)和Edit and Continue(即编即调)等显著缩短开发时间的新特性外,Visual C+ 6.0还为Web开发和企业开发提供更良好的支持。面向对象的程序设计Microsoft Visual C+ 6.0支持面向对象的程序设计,但它与一般的面向对象的程序设计语言(C+)不完全相同。在一般的面向对象程序设计语言中,对象由程序代码和数据组成,是抽象的概念;而Microsoft Visual C+ 6.0则是应用面向对象的程序设计方法,把程序和数据封装起来作为一个对象,并为每个对象赋予应有的属性,使对象成为实在的东西。在设计对象时,不必编写建立和描述每个对象的程序代码,而是用工具画在界面上,Microsoft Visual C+ 6.0自动生成对象的程序代码并封装起来。每个对象以图形方式显示在界面上,都是可视的。二、 程序分析2.1函数分析主函数:void main() 连珠游戏主界面,显示两个选项:A:三子棋、B:四子棋;采用do()while()语句实现;类:在public中包含一个构造函数,两个输出棋盘函数分别为print1()、print2(),一个三子棋游戏的函数(Three(),一个四子棋游戏的函数(Four(),同时还有游戏四个判断胜利的函数、悔棋函数,和获取游戏结果的函数;头文件:将类定义在名为Game一个头文件中,同时对类中的各个函数定义、初始化。2.2程序流程图开始 初始化棋盘选择玩法(三子棋或者四子棋)程序循环控制模块玩家一下棋玩家二下棋胜负判断否是结束三、 技术路线3.1总体方案3.1.1 采用的软件及开发平台在Windows 7的环境下,采用的是Microsoft公司的Visual C+作为开发平台。利用面向对象的思想实现一个连珠游戏系统,具体使用了:体现OOP的抽象、封装、多态3种关键技术,构造了基于Game的游戏系统,从而实现游戏的各种功能。3.1.2 总体方案先设计一个基本构架,然后往函数中逐步添加相应的子函数,一步步完善功能;3.2详细设计1.设置一个类Game();2.我们可以在此基础之上为类添加相应功能函数,如judge1() 、regret()等函数;3. Three()或者Four()函数调用相应的功能函数,来实现游戏的对局;4. 主函数中启用输入选项,若是选择三子棋,则调用Game类中Three()函数;如果选择四子棋,则调用Game类中Four()函数;5.进入相应的游戏玩法,可以查看对应的游戏帮助;6.游戏中途,可以选择悔棋,悔棋时,只要输入玩家想要悔棋的坐标即可;7.游戏结束后,统计游戏结果,并输出。类说明:class Gamepublic:Game(int M);void print1(); /输出棋盘(1)void print2(); /输出棋盘(2)void Three(); /三子棋双人对战void Four(); /四子棋双人对战int judge1(int ,int ); /判断三子棋中玩家1胜利int judge2(int ,int ); /判断三子棋中玩家2胜利int judge3(int ,int ); /判断四子棋中玩家1胜利int judge4(int ,int ); /判断四子棋中玩家2胜利void regret(int ,int ); /悔棋static int GetX() /获取X的值return X;static int GetY() /获取Y的值return Y;private:int N;static int X; /记录玩家一赢的次数static int Y; /记录玩家二赢的次数char game1010;int Game:X=0;int Game:Y=0;其中,“Game”类直接定义在“Game.h”中,并且Game类中的函数也都是相应的在“Game.h”中写好。并且静态变量“X”“Y”也都相应的初始化。因为这个程序并没有使用继承这一C+特性,而且只采用了一个类。但是,类中还是采用了抽象、封装、多态三种关键技术。类的说明图:privatepublicNXYgame1010print1()print2()Three()Four()judge1()judge2()judge3()judge4()GetX()GetY()Game()用于设定棋盘大小保存用户胜利信息用于棋盘的储存输出棋盘信息分别对应三子棋和四子棋的下棋函数判断完成胜利的函数获取玩家胜利信息构造函数四、工程进度当任务分配下来的第二天,我们组对我们所选的题目三子连珠游戏设计进行了讨论。也明确了各个成员的工作:组长负责编程,其他成员负责查资料和编辑实验报告。经过讨论,我们确定了这个程序所涉及的函数,查资料的也积极的参与当中。任务开始的第一个星期的周末,编程的组员开始写一些基本的代码,同时,负责查找资料的组员也上网搜索有关的资料以及其他人编写的程序,看看他们的思路是怎样的。接下来经过几天的讨论,小组最终确定思路,就开始各种功能函数的编写,通过一步步的调试与修改,程序也渐渐完善,只是在悔棋部分还有点问题。和其他小组的几位成员讨论了下,还是没有想出解决的办法。然后一直卡在那里,我们不断查阅相关的资料,看相关的代码,最后终于实现了。最后在基本要求都实现的情况下,组长想到了加入一下小功能,如分别统计玩家一、二的胜利情况,还有就是平局。胜利情况很好判断,只需要用两个全局变量,就可是实现了。但是平局判断的情况,思想是:当棋盘下满的时候仍未分出胜负,此时记为平局。我们用一个局部变量来记录棋盘中已经存在的棋子数目,然后和棋盘大小比较,这样就可以判断了。最后考虑了下,对于三子棋的游戏规则来说,因为是人人对战,只要是第一个下棋的人,那就一定赢;另外,在四子棋中,同样是人人对战,一般不会出现平均的可能性,所以最后决定去掉这项。最后是写实验报告,小组成员具体分工,有负责编辑文字的,也有流画程图的,总之大家一起努力,共同完成了实验报告。四、 测试报告5.1 阶段测试 在程序基本设计好的时候,我们对整个程序进行了一次比较系统的测试,对各个系统的主要功能也都用数据进行了检测,以确保程序的正确性,同时希望程序能够完成各种要求。以下是这次测试的具体结果:系统主界面运行该程序,首先进入的是游戏系统的主界面,该界面给出了一个选择项,三子棋或者四子棋;测试各个群组的初始化功能三子棋游戏帮助输入A选择三子棋游戏,同时选择游戏说明,了解游戏规则。同时界面回到游戏选择项。开始游戏选择“双人游戏” 模式,在弹出选项后,输入选择,进行棋谱大小的初始化,并开始游戏。初始化棋盘后,开始游戏对局,并没有采用想“AI”算法,或者其他算法,所以游戏并不是人机对局,而是用户自己对局。同时,游戏对局是输入坐标来进行的。以下是游戏部分截图(游戏中在每次下棋后刷新屏幕):悔棋为了验证悔棋功能,我们也进行了相关的数据处理和验证,部分截图如下:上图为悔棋前的截图:上图为开始悔棋到成功的截图:其他情况退出游戏四子棋游戏帮助输入B选择三子棋游戏,同时选择游戏说明,了解游戏规则。同时界面回到游戏选择项。开始游戏选择“双人游戏” 模式,在弹出选项后,输入选择,进行棋谱大小的初始化,并开始游戏。初始化棋盘后,开始游戏对局,同样的,程序并没有采用想“AI”算法,或者其他算法,所以游戏并不是人机对局,而是用户自己对局。同时,游戏对局是输入坐标来进行的。以下是游戏部分截图(游戏中在每次下棋后刷新屏幕):悔棋同样的,我们任然要测试四子棋中悔棋的功能。我们先截取悔棋前的棋盘情况:然后,输入两个0,接着是要悔棋的坐标,最后悔棋成功,并输入新的棋盘坐标,截图如下:因为程序的主体结构是一样的,所以这里就不进行其他情况的测试了。退出游戏当玩家退出游戏时,输出相关的信息。六、个人小结6.1 邱道英个人小结:这次大作业给我影响最深的是,大作业和平时编程相比,大作业完全是一个巨人一样。虽然用到了内容、知识点是一样的,虽然平时编程基本没有什么拦路虎,虽然我们有小组讨论。但是大作业还是给了我们很多难题。一个好的软件系统,是需要一个好的程序设计师。没有任何假设,这是我在这次大作业所体会到的。有一个清晰的系统的概念,这是指是针对某一项具体的描述来是一一个函数的功能,而是从整体的概念上来考虑,首先要从整个流程的构架。同样模块化的思想也很重要,每个模块完成一个特定的子功能,所有的模块按某种方法组装起来,成为一个整体,完成整个系统所要求的功能。同时提供各种接口,这样才能实现代码的复用和简洁。同时我也体会到了小组讨论的重要性,每当我有疑问的时候,总是小组的队员门一起摸索、一起进步,只有合作才能获得最大的成功,虽然不是很完美,但是已经很是满足了,我们尽了自己最大的努力,做到了自己想做的东西,然后学到了很多东西,看到了自己以前没有看到的东西,这样不已经算是很大的成长了吗?通过这次大作业,不仅仅是熟悉了以前学过的知识,而且更加灵活的掌握使用C+,锻炼了翻阅课本资料查找有用信息的能力和自学能力,丰富了自己的知识,使自己的编程能力得到了进一步的提高。最后是想说一些不足:(1) 没有采用智能算法,没有实现人机对战,同时缺少设置下棋时间,根据下棋时间或者下棋个数建立一个排行榜等功能; (2) 对于Three()和Four()函数,有很大的相同行和相似性,可以合并成一个函数来写,但是能力有限没有成功;(3) 对类的应用少,只是单纯的用一个类,没有使用继承、派生等C+特性;6.1 张海平个人小结:经验:这次的作业,给了我很多经验,像对于类的编写的完善,还有如何去深度思考一个问题,然后完美的解决它。这些都是我以前所欠缺的。因此,这次作业帮助了我很多,让我慢慢成熟起来。 教训:在编写main函数时,还有点小问题。尝试过独自解决,但是没有效果。后来在其他队友的帮助下,我终于知道了自己错在哪里。也让我明白了一个道理:团结就是力量! 收获:其实收获很多,不仅加深了我C+的认识,也让我更进一步的了解到C与C+的不同之处,以前将这些好像都好虚幻。 现在的话,有点点凝实的感觉。给我最深印象的是类的应用以及派生,觉得很方便,很实用。还有各个模块之间的调用也是很实用。在另一方面,我觉得一个团队就是如果能像一个个体一样,那么这个团队一定能够战无不胜。总之,这次的大作业,我收获挺多的。6.3 蓝震宇个人小结此次C+大作业中,让我学到很多,因为到了大学后没确定好方向,所以成绩一直不好,编程学得不精,但通过此次大作业却让我对自己的能力着实提高了不少。界面化程序,呈现在荧屏的那千行代码,让人怦然心动,此前一直都没有做过这样的作业。虽然因为自我水平的问题,我没能跟他们一块编程(感觉自己可能会帮倒忙),可是在后期整理,写文档,还有期间每次他们做好了什么都会给我试验展示一下,在这之间,我感觉自己是这个团体中的一员,也被同团员的各种性格所感动。感觉他们为了我们这个整体付出了很多的努力,去借很多的书,问一些参加了科研团队的同学一些没有学过的东西,这些都让我看到他们的闪光点,意识到了他们的可爱。通过此次的作业,让我感触最深的就是小组成员的合作。每个成功的项目必然有着强大的团队,而团队成员亲密合作恰恰是最为重要的。此次作业中,word排版,PPT制作,核心代码编辑,我和小组成员合作得很好,正是队友的团结,才促成项目的完成!总的来说,我收获了很多,感触了很多,在一个科学团队里,需要具备各种才能的人的合作,而我,正是其中的一员。参考文献Bjarn StroustrupC+程序设计语言,高等教育出版社李春葆等 数据结构教程(第三版), 清华大学出版社万常选 舒蔚等C语言与程序设计方法,科学出版社张军等 Visual C+实例精通, 机械工业出版社王艳萍 Windows程序设计,人民邮电出版社附录源程序代码类的定义:class Gamepublic:Game(int M);void print1(); /输出棋盘(1)void print2(); /输出棋盘(2)void Three(); /三子棋双人对战void Four(); /四子棋双人对战int GetFull(int ,int );/判断棋盘是否布满棋子int judge1(int ,int ); /判断三子棋中玩家1胜利int judge2(int ,int ); /判断三子棋中玩家2胜利int judge3(int ,int ); /判断四子棋中玩家1胜利int judge4(int ,int ); /判断四子棋中玩家2胜利void regret(int ,int ); /悔棋static int GetX()return X;static int GetY()return Y;private:int N;static int X; /记录玩家一赢的次数static int Y; /记录玩家二赢的次数char game1010;静态变量的初始化:int Game:X=0;int Game:Y=0;“Game.h”的定义、封装#includeclass Gamepublic:Game(int M);void print1(); /输出棋盘(1)void print2(); /输出棋盘(2)void Three(); /三子棋双人对战void Four(); /四子棋双人对战int GetFull(int ,int ); /判断棋盘是否布满棋子int judge1(int ,int ); /判断三子棋中玩家1胜利int judge2(int ,int ); /判断三子棋中玩家2胜利int judge3(int ,int ); /判断四子棋中玩家1胜利int judge4(int ,int );/判断四子棋中玩家2胜利void regret(int ,int ); /悔棋static int GetX()return X;static int GetY()return Y;private:int N;static int X; /记录玩家一赢的次数static int Y; /记录玩家二赢的次数char game1010;int Game:X=0;int Game:Y=0;void Game:print1() /输出棋盘(1)int i,j;cout ;for(i=1;iN+1;i+)cout i;coutendl;for(i=0;iN;i+)for(j=0;j=N;j+)if(j=0)couti+1 ;elsecout. ;coutendl;void Game:print2() /输出棋盘(2)int i,j;cout ;for(i=1;iN+1;i+)cout i;coutendl;for(i=1;iN+1;i+)for(j=0;j=N;j+)if(j=0)couti ;else if(gameij=O)coutO ;else if(gameij=X)coutX ;elsecout. ;coutendl;void Game:regret(int a,int b) /悔棋gameab=0;int Game:judge1(int a,int b) /三子棋中判断玩家1胜利if(gameab-1=O&gameab+1=O)|(gameab-1=O&gameab-2=O)|(gameab+1=O&gameab+2=O)return 1;/判断该行是否满足条件else if(gamea+1b=O&gamea-1b=O)|(gamea+1b=O&gamea+2b=O)|(gamea-1b=O&gamea-2b=O)return 1; /判断某该列是否满足条件else if(gamea+1b+1=O&gamea-1b-1=O)|(gamea+1b+1=O&gamea+2b+2=O)|(gamea-2b-2=O&gamea-1b-1=O)return 1; /判断该正斜列是否满足条件else if(gamea+1b-1=O&gamea-1b+1=O)|(gamea+1b-1=O&gamea+2b-2=O)|(gamea-2b+2=O&gamea-1b+1=O) return 1; /判断该反斜列是否满足条件elsereturn 0;int Game:judge2(int a,int b) /三子棋中判断玩家2胜利 if(gameab-1=X&gameab+1=X)|(gameab-1=X&gameab-2=X)|(gameab+1=X&gameab+2=X)return 1;else if(gamea+1b=X&gamea-1b=X)|(gamea+1b=X&gamea+2b=X)|(gamea-1b=X&gamea-2b=X)return 1;else if(gamea+1b+1=X&gamea-1b-1=X)|(gamea+1b+1=X&gamea+2b+2=X)|(gamea-2b-2=X&gamea-1b-1=X)return 1;else if(gamea+1b-1=X&gamea-1b+1=X)|(gamea+1b-1=X&gamea+2b-2=X)|(gamea-2b+2=X&gamea-1b+1=X) return 1;elsereturn 0;void Game:Three() /三子棋int f=0; /判断玩家int p1,p2; /下棋坐标print1();for(;)if(f=0) cout请玩家一输入下棋坐标(玩家二要悔棋请输入两个0)p1p2;if(p1=0&p2=0) cout请输入要悔棋的坐标p1p2;if(gamep1p2!=X) cout输入有误endl;continue;regret(p1,p2);else if(gamep1p2!=0) cout输入有误=1&p1=1&p2=9)gamep1p2=O;system(cls);else cout输入坐标有误,请重输入endl;continue;if(judge1(p1,p2)=1) system(cls);print2();cout玩家一胜利!endlendl;X+;break;print2();f=1;else if(f=1) cout请玩家二输入下棋坐标(玩家一要悔棋请输入两个0)p1p2;if(p1=0&p2=0)cout请输入要悔棋的坐标p1p2;if(gamep1p2!=O) cout输入有误endl;continue;regret(p1,p2);else if(gamep1p2!=0) cout输入有误=1&p1=1&p2=9)gamep1p2=X;system(cls);else cout输入坐标有误,请重输endl;continue;if(judge2(p1,p2)=1)system(cls);print2();cout玩家二胜利!endlendl;Y+;break;print2();f=0;elsecout输入有误,请重输endl;int Game:judge3(int a,int b) /四子棋中玩家一胜利判断条件if(gameab-3=O)&(gameab-2=O)&(gameab-1=O)|(gameab-1=O)&(gameab+1=O)&(gameab+2=O)|(gameab+3=O)&(gameab+2=O)&(gameab+1=O)|(gameab-2=O)&(gameab-1=O)&(gameab+1=O)return 1;/判断某一行存在4子练成一条线 else if(gamea-3b=O)&(gamea-2b=O)&(gamea-1b=O)|(gamea-1b=O)&(gamea+1b=O)&(gamea+2b=O)|(gamea-1b-1=O)&(gamea+1b+1=O)&(gamea+2b+2=O)|(gamea+1b+1=O)&(gamea+2b+2=O)&(gamea+3b+3=O) return 1;/判断某一列存在4子练成一条线 else if(gamea-3b-3=O)&(gamea-2b-2=O)&(gamea-1b-1=O)|(gamea+1b+1=O)&(gamea-1b-1=O)&(gamea-2b-2=O)|(gameab+3=O)&(gameab+2=O)&(gameab+1=O)|(gameab-2=O)&(gameab-1=O)&(gameab+1=O) return 1;/判断正斜列存在4子练成一条线 else if(gamea-1b+1=O)&(gamea-2b+2=O)&(gamea-3b+3=O)|(gamea+1b-1=O)&(gamea-1b+1=O)&(gamea-2b+2=O)|(gamea+2b-2=O)&(gamea+1b-1=O)&(gamea-1b+1=O)|(gamea+3b-3=O)&(gamea+2b-2=O)&(gamea+1b-1=O)return 1; /判断反斜列存在4子练成一条线 elsereturn 0;int Game:judge4(int a,int b) /四子棋中玩家二胜利判断条件if(gameab-3=X)&(gameab-2=X)&(gameab-1=X)|(gameab-1=X)&(gameab+1=X)&(gameab+2=X)|(gameab+3=X)&(gameab+2=X)&(gameab+1=X)|(gameab-2=X)&(gameab-1=X)&(gameab+1=X)return 1;/判断某一行存在4子练成一条线 else if(gamea-3b=X)&(gamea-2b=X)&(gamea-1b=X)|(gamea-1b=X)&(gamea+1b=X)&(gamea+2b=X)|(gamea-1b-1=X)&(gamea+1b+1=X)&(gamea+2b+2=X)|(gamea+1b+1=X)&(gamea+2b+2=X)&(gamea+3b+3=X) return 1;/判断某一列存在4子练成一条线 else if(gamea-3b-3=X)&(gamea-2b-2=X)&(gamea-1b-1=X)|(gamea+1b+1=X)&(gamea-1b-1=X)&(gamea-2b-2=X)|(gameab+3=X)&(gameab+2=X)&(gameab+1=X)|(gameab-2=X)&(gameab-1=X)&(gameab+1=X) return 1;/判断正斜列存在4子练成一条线 else if(gamea-1b+1=X)&(gamea-2b+2=X)&(gamea-3b+3=X)|(gamea+1b-1=X)&(gamea-1b+1=X)&(gamea-2b+2=X)|(gamea+2b-2=X)&(gamea+1b-1=X)&(gamea-1b+1=X)|(gamea+3b-3=X)&(gamea+2b-2=X)&(gamea+1b-1=X)return 1; /判断反斜列存在4子练成一条线 elsereturn 0;void Game:Four()int f=0; /判断玩家int p1,p2; /下棋坐标print1();for(;)if(f=0) cout请玩家一输入下棋坐标(玩家二要悔棋请输入两个0)p1p2;if(p1=0&p2=0) cout请输入要悔棋的坐标p1p2;if(gamep1p2!=X) cout输入有误endl;continue;regret(p1,p2);else if(gamep1p2!=0) cout输入有误=1&p1=1&p2=9)gamep1p2=O;system(cls);else cout输入坐标有误,请重输入endl;continue;if(judge3(p1,p2)=1) system(cls);print2();cout玩家一胜利!endlendl;X+;break;f=1;system(cls);print2();else if(f=1) cout请玩家二输入下棋坐标(玩家一要悔棋请输入两个0)p1p2;if(p1=0&p2=0)cout请输入要悔棋的坐标p1p2;if(gamep1p2!

温馨提示

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

评论

0/150

提交评论