三子连珠游戏设计vc实现全过程

上传人:F****n 文档编号:98178487 上传时间:2019-09-09 格式:DOC 页数:19 大小:159KB
返回 下载 相关 举报
三子连珠游戏设计vc实现全过程_第1页
第1页 / 共19页
三子连珠游戏设计vc实现全过程_第2页
第2页 / 共19页
三子连珠游戏设计vc实现全过程_第3页
第3页 / 共19页
三子连珠游戏设计vc实现全过程_第4页
第4页 / 共19页
三子连珠游戏设计vc实现全过程_第5页
第5页 / 共19页
点击查看更多>>
资源描述

《三子连珠游戏设计vc实现全过程》由会员分享,可在线阅读,更多相关《三子连珠游戏设计vc实现全过程(19页珍藏版)》请在金锄头文库上搜索。

1、三子连珠游戏设计 【摘要】模仿五子棋的形式,编写有一方三子或五子连成一线即获胜的程序,具体要求:1、 玩家可以设置棋盘的大小,即在游戏开始时输入一变量n(n=39),使棋盘的大小为nn。2、 本程序用if-else选择语句来判断获胜者,如果棋盘变大这将非常频繁,现要求将这一功能用循环语句实现,且适用于任意大小的棋盘。3、 加入可以悔棋的功能,要求任意方可以在对方下棋后悔改一步,即将对方当前步和本方上一步删除,本方重新下棋。关键词:三子连珠 小游戏 VC+程序目录程序功能简介3课程设计要求3程序设计思想4原程序各个功能说明4课程设计要求的实现6主要源程序及注释81主函数82.胜负条件的判定10设

2、计过程中的疑难及解答方案和设计的不足11设计过程中的疑难及解答方案11设计的不足12总结12附1:程序运行界面(棋盘4*4的三子连珠游戏)13氨氧化催化剂往往亦可用作醛类氧化催化剂,其原因是由于这两类反应通过类似的历程,形成相同的氧化中间物之故。上列反应中以丙烯氨氧化合成丙烯腈最为重要,下面即以此反应为例进行讨论。程序功能简介 该程序是TICTACTOE游戏,棋盘为3*3,3个棋子连起来即为赢。输入参数时,若输入的数字超过边界或在已有棋子的地方再输入,则提示出错,要求重新输入。课程设计要求1.将程序改写成类。2.将棋盘扩充成4*4。3.统计输赢结果并打印输出。4.选做:使游戏更生动。(输赢条件

3、相同)评定难易程度:B程序设计思想 设计一个玩家下棋的操作类,里面封装了棋盘棋子类别和输赢次数等成员数据。 操作类的函数包括有初始化棋盘下棋判断输赢等。定义一个类的对象,在调用类中函数时直接使用对象名加函数名即可。 将两个玩家定义为两个数组用于区分他们的信息,分别用O和X代表两个玩家所用棋子,然后分别对两个玩家通过已定义的类的对象调用类中的函数,完成下棋过程。 进一步改进程序:1. 程序中用if else if格式的语句来判断玩家的输赢,当棋盘增大时,三子连珠的各种可能性成倍增加,使得语句非常繁琐,所以将其改为for语句的循环结构进行判断,当棋盘增大时,只需更改循环条件结束的参数即可,可灵活使

4、用于各种尺寸的棋盘。2. 为防止用户误操作,特别是在姓名的输入时的失误,可以采用cin.getline函数读入在判断确认。3. 在完成第一步的基础上可将三子连珠扩充为标准的五子棋。原程序各个功能说明原程序的结构输出菜单及提示信息输入姓名由“O”先手下棋结束输出最终结果询问是否继续下棋“O”输入棋子所在的行列判断胜负和棋条件输出结果“X”输入棋子所在的行列不符合错误正确错误正确符合 YN1. 类的说明 类是对一组具有相同属性、相同行为的对象的抽象的描述,不占用内存空间。可以把类看作“理论上”的对象,也就是说,它为对象提供蓝图,但在内存中并不存在。从这个蓝图可以创建任何数量的对象。从累创建的所有对

5、象都有相同的成员:属性、行为或方法。这些对象才是具体的独立的个体,占用存储空间,因此,对象又称作类的实例。 下面以具体程序说明。 在头文件之后定义了一个名为CGobang的类:class CGobang char board44;/用数组来定义一个4*4的棋盘public:void Guize();/打印菜单总体情况,说明游戏规则和方法,无返回值 void Dayinqp();/打印棋盘,无返回值void Xiaqi(char*,int &,int &,char);/下棋,无返回值int Huosheng(int,int,char);/判断那个选手赢,返回值为一整形数void Choice(c

6、har &);/是否再玩,无返回值void Chongzhi();/重置棋盘,无返回值; 在这个类中,定义了一个未经说明的数组被默认为私有成员,即char board44,用它来存储玩家在下棋的过程中所输入的棋子的坐标,并以此来区分表示不同的两个玩家。另外,这个类中还说明了五个没有返回值的函数以及一个返回值为整形数的函数,对它们的定义将出现在主函数完成之后,所以本着“先定义,后调用”的原则,在类中的说明相当于自定义函数中的函数说明,这样可以使在主函数调用类中的公有函数时变得更加明了清晰。 在这个函数中,对类的对象的定义出现在了主函数第一行,即:CGobang s;/定义类的一个对象s对这个对象

7、的定义的目的是,在下面不同玩家的下其中的不同操作中,可以直接通过这个对象来分别调用类中的任意公有成员函数,这样就避免了通过类名来调用函数时可能出现的冗长。可以说,在这个程序里,这个对象s起到了把主函数与类连接起来的桥梁作用。课程设计要求的实现一、类的封装。 首先,在源程序代码中出现的主要函数程序有:void PrintBoard(); / 打印棋盘void PrintInfo(); /输出游戏提示信息void PrintStats(int, int, int); / 输出统计的胜负信息void IfError(int&, int&); / 判断输入时候有错void ChoiceOfChar(c

8、har&); / 询问用户是否在玩一局void PromptTurnO(int&, int&); / 选择“O”的玩家下棋(先走)void PromptTurnX(int&, int&); / 选择“X”的玩家下棋(后走)char board33; / 棋盘在我的程序中的主要函数程序为:void Guize();/打印菜单总体情况,说明游戏规则和方法,无返回值void Dayinqp();/打印棋盘,无返回值void Xiaqi(char*,int &,int &,char);/下棋,无返回值int Huosheng(int,int,char);/判断那个选手赢,返回值为一整形数void Ch

9、oice(char &);/是否再玩,无返回值void Chongzhi();/重置棋盘,无返回值以此来对比说明。源代码中的关于打印棋盘以及规则提示的说明的函数没有变动。去掉了关于输出统计胜负信息的函数,在主函数体中用三个一组的条件自增变量代替,这样减少了复杂的函数调用,说明以及定义,精简了程序,并且达到了预想的目的。由于对玩家输入是否有错的判断在玩家每次确定下棋之后必须进行,所以如果像源代码一样把玩家下棋的函数和判断是否有误分开定义的话,在没下一步棋之后都要重复调用判断函数,显得十分复杂,所以把源代码中的判断是否有错的函数与玩家下棋合并在 void Xiaqi(char*,int &,int

10、 &,char)中,对它们的定义在后面的类的成员函数的定义中一起定义,这样可以减少很多不必要的麻烦,起到了精简程序的作用。源代码中把连个玩家分别定义为两个函数,用以区别先后手,然后在定义一个数组char board33(由于源代码中显示的是3*3的棋盘,所以数组定义为board33)来表示棋盘。在这点我做了比较大的改动,首先是定义了一个类中的私有成员数组,用以记录每位玩家所下棋子的坐标,这样既可以通过用不同的指针变量来指向键盘的方法来区分不同的玩家,亦可以同时用它表示整个棋盘。这样使程序得到了进一步的精简。void CGobang:Xiaqi(char*player1,int & x,int

11、& y,char c)cout该player1下棋了,请输入:endl;coutx;cout y;while(x4|y4|x1|y1| !=boardx-1y-1)/输入数字超过边界或在已有棋子的地方再输入/ !=boardx-1y-1表示已有棋子cout对不起,您的输入有误,请重新输入!endl;coutx;cout y;boardx-1y-1=c;/在x行,y列处下O或X由于需要重复使用空棋盘,我又增加了一个重置棋盘的函数void Chongzhi()来进行每次开始下棋时的棋盘清空重置。void CGobang:Chongzhi()for(int Row=0;Row4;Row+)for(i

12、nt Column=0;Column4;Column+)boardRowColumn= ;完成对主要函数的改动之后,把它们封装到类CGobang中即可。二、将棋盘扩充为4*4在类的封装中已经详细的将我改动过的棋盘说明了,所以,要把棋盘扩充为n*n只需把定义过的私有成员数组boardnn中的n改为所需数字即可。即,定义board44,就完成了对棋盘4*4的扩充。三、统计输出结果并打印输出。同样,在类的封装中也已说明我对记录胜负结果以及输出的方法,下面给出源代码:记录胜负结果:int FirstWin=0,SecondWin=0,Draws=0,x,y,N;在每次获胜、失败以及和棋的判断完成之后,

13、令FirstWin SecondWin Draws分别依情况自增,达到记录胜负次数的目的。打印输出:/输出游戏输赢次数coutplayer1赢了FirstWin次endl;coutplayer2赢了SecondWin次endl;cout和Draws次endl;cout谢谢使用。endl;cout任意键继续。endl;即在主函数结束时输出已记录的数值即可完成。主要源程序及注释1主函数void main ()/主函数CGobang s;/定义类的一个对象s s.Guize();/通过已定义的类的对象s调用Guize函数,提示玩家如何进行游戏char player120,player220;/定义两个玩家的姓名变量,分别用两个数组储存int FirstWin=0,SecondWin=0,Draws=0,x,y,N;/说明变量,并对部分变量付初值,以待计算输赢结果char choice=Y;cin.ignore(20,n);/输入输出流,前面如果有输入把输入行所有字符 /取空,以便后面的输入从新的一行开始cout请输入第一个玩家姓名:;cin.getline(pla

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 教学/培训

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号