您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 课程实验设计:基于c++面向对象的石头剪子布游戏-附源代码
1(sdut)(附源代码)基于C++设计的剪刀石头布的游戏信科1301韩玙欤1.需求分析题目的要求是要求:(1)实现人机对战的功能,(2)程序具有启动菜单和欢迎信息;(3)可以记录比赛的次数,输赢的次数其中输入形式为代表石头剪子和布三种实物的字符;我在这里选择用2代表石头,1代表剪子,0代表布。我在程序中设计了三种游戏方式,分别为,人机模式,人人模式,连胜模式,其中人机模式设置有记录,可以记录总共的胜局败局和平局,连胜模式设置了英雄榜取得更高连胜成绩的人可以更新英雄榜。(测试数据见6)2.概要设计3.详细设计程序中共有cai,caipeople,caichallenge三个类,以实现游戏中人机对战,人人对战,和连胜模式。对于猜拳过程中随机情况的使用,我选择的是调用知道,C语言中rand()函数,但是因为rand()函数是按指定的顺序来产生整数,因此每次执行上面的2语句都打印相同的两个值,所以说C语言的随机并不是真正意义上的随机,有时候也叫伪随机数。所以如果玩家可以知道多次重启游戏后可以知道电脑的前几次出拳会是什么。在判断输赢的过程中,如果玩家1赢电脑(或玩家2)则会出现关系式字符2-1=1,1-0=0,0-2=-2;所以可使用if(a1-a2=1||a1-a2=-2);平局为elseif(a1-a2==0);失败为else;其中使用了windows.h来设置字体的颜色,和窗口的大小,同时在编程过程中加入适当的字符画以达到美化的效果。(函数调用关系请看概要设计)4.调试分析算法复杂程度一般,较为简单。可采用time.h结合srand()和rand()配合使用产生随机数序列。做的不错。5.用户使用说明输入数字使用键盘输入字符,按回车运行。6.测试结果3456789107.参考文献C_Primer_Plus(第五版)中文版8.附录#pragmawarning(disable:4996)#includeiostream#includestdio.h#includeWindows.h#includetime.h#includestringusingnamespacestd;HANDLEg_hOutput=GetStdHandle(STD_OUTPUT_HANDLE);//创建句柄//设置光标位置voidSetCursor(COORDcd){SetConsoleCursorPosition(g_hOutput,cd);}voidSetCursor(intx,inty){11COORDcd={x,y};SetCursor(cd);}voidplay();voidplaypeople();voidplaychallenge();voidexplain();voidrank_1();voidrecord();voidabout();voidtime_1();voidchuquan(inta);//展示出拳charname[10];//擂主记录intbig=0;intbigger=0;classcai//普通猜拳模式{private:inti;inta;public:staticintx,y,z;voidshow(intchu){i=rand()%3;a=chu;cout你的出拳:;chuquan(a);coutVS电脑的出拳:;chuquan(i);coutendl;if(a-i==1||a-i==-2){SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);coutyouwinendl;SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|12FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);x++;}elseif(a-i==0){SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);coutpingleendl;SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);y++;}else{SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_BLUE);coutdefeatendl;SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);z++;}cout你目前:\n\twin局\t平局\t输局endl;SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);cout\tcai::x;SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);cout\tcai::y;SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_BLUE|FOREGROUND_GREEN);cout\tcai::zendl;SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);}};13intcai::x=0;intcai::y=0;intcai::z=0;classcaipeople//人人猜拳模式{private:intp1;intp2;public:voidplay(){cout\t石头:2剪子:1布:0endl;cout请玩家一输入所出拳,\n玩家二回避。endl;cinp1;system(cls);cout\t石头:2剪子:1布:0endl;cout请玩家一输入所出拳,\n玩家二回避。endl;cout*endl;cout请玩家二输入所出拳endl;cinp2;system(cls);cout\t石头:2剪子:1布:endl;cout玩家一所出拳:;chuquan(p1);cout\n玩家二所出拳所出拳:;chuquan(p2);coutendl;if(p1-p2==1||p1-p2==-2){SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);cout玩家一获胜endl;SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);}elseif(p1-p2==0){cout实力相当endl;14}else{SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);cout玩家二获胜endl;SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);}}};classcaichallenge//连胜模式{private:inta1;inta2;public://staticintvs;intno;voidplay(){no=0;cout\t;cina1;a2=rand()%3;Sleep(500);cout\t.\n;Sleep(500);cout\t.\n;Sleep(500);cout\t.\n;Sleep(500);cout\t.\n;Sleep(500);cout\t.\n;cout你的出拳:;chuquan(a1);15coutVS电脑的出拳:;chuquan(a2);coutendl;if(a1-a2==1||a1-a2==-2){cout\t再来猜我一拳!!;big++;}elseif(a1-a2==0)cout\t好汉再来一局;else{cout\t再回去修炼一下吧endl;no=-1;}}};//intcaichallenge::vs=0;caiuse;//用于静态的变量的调用voidoperate(string);caia;caipeoplea2;caichallengea3;intmain(){system(cls);system(modeconcols=34lines=40);//定义窗体大小stringch;do{SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN);cout◢██████████◣endl;16cout◢◤◢█████◣◥◣endl;cout◢◤◢█◤◥█◥◣endl;cout◥◣██◣◥◢◤endl;cout◥◣◥██████◣◢◤endl;cout◥◣◥██████◢◤endl;cout◥◣◥█◢◤endl;cout◥█◣◢█◤endl;cout◥████◤endl;cout◥◣◢◤endl;cout◥◤endl;SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);cout**********************************endl;cout*石头剪子布*endl;cout*1.进入游戏(人机对战)*endl;cout*2.进入游戏(人人对战)*endl;cout*3.挑战模式(连胜模式)*endl;cout*4.游戏说明*endl;cout*5.游戏记录*endl;cout*6.排行榜(连胜模式)*endl;cout*7.关于*endl;cout*8.查看当前时间*endl;cout*0.退出游戏*endl;cout*输入对应数字,按下回车使用其功能*endl;cou
本文标题:课程实验设计:基于c++面向对象的石头剪子布游戏-附源代码
链接地址:https://www.777doc.com/doc-5685848 .html