课程实验设计基于c++面向对象的石头剪子布游戏附源代码.docx
- 文档编号:9623352
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:27
- 大小:896.71KB
课程实验设计基于c++面向对象的石头剪子布游戏附源代码.docx
《课程实验设计基于c++面向对象的石头剪子布游戏附源代码.docx》由会员分享,可在线阅读,更多相关《课程实验设计基于c++面向对象的石头剪子布游戏附源代码.docx(27页珍藏版)》请在冰豆网上搜索。
课程实验设计基于c++面向对象的石头剪子布游戏附源代码
(sdut)
(附源代码)
基于C++设计的剪刀石头布的游戏
信科1301韩玙欤
1.需求分析
题目的要求是要求:
(1)实现人机对战的功能,
(2)程序具有启动菜单和欢迎信息;
(3)可以记录比赛的次数,输赢的次数
其中输入形式为代表石头剪子和布三种实物的字符;我在这里选择用2代表石头,1代表剪子,0代表布。
我在程序中设计了三种游戏方式,分别为,人机模式,人人模式,连胜模式,其中人机模式设置有记录,可以记录总共的胜局败局和平局,连胜模式设置了英雄榜取得更高连胜成绩的人可以更新英雄榜。
(测试数据见6)
2.概要设计
3.详细设计
程序中共有cai,caipeople,caichallenge三个类,以实现游戏中人机对战,人人对战,和连胜模式。
对于猜拳过程中随机情况的使用,我选择的是调用知道,C语言中rand()函数,但是因为rand()函数是按指定的顺序来产生整数,因此每次执行上面的语句都打印相同的两个值,所以说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.测试结果
7.参考文献C_Primer_Plus(第五版)中文版
8.附录
#pragmawarning(disable:
4996)
#include
#include
#include
#include
#include
usingnamespacestd;
HANDLEg_hOutput=GetStdHandle(STD_OUTPUT_HANDLE);//创建句柄
//设置光标位置
voidSetCursor(COORDcd)
{
SetConsoleCursorPosition(g_hOutput,cd);
}
voidSetCursor(intx,inty)
{
COORDcd={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);
cout<<"VS"<<"电脑的出拳:
";
chuquan(i);
cout< if(a-i==1||a-i==-2) { SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED); cout<<"youwin"< SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE); x++; } elseif(a-i==0) { SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN); cout<<"pingle"< SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE); y++; } else { SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_BLUE); cout<<"defeat"< SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE); z++; } cout<<"你目前: \n\twin局\t平局\t输局"< SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED); cout<<"\t"< : x; SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN); cout<<"\t"< : y; SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_BLUE|FOREGROUND_GREEN); cout<<"\t"< : z< SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE); } }; intcai: : x=0; intcai: : y=0; intcai: : z=0; classcaipeople//人人猜拳模式 { private: intp1; intp2; public: voidplay() { cout<<"\t石头: 2剪子: 1布: 0"< cout<<"请玩家一输入所出拳,\n玩家二回避。 "< cin>>p1; system("cls"); cout<<"\t石头: 2剪子: 1布: 0"< cout<<"请玩家一输入所出拳,\n玩家二回避。 "< cout<<"*"< cout<<"请玩家二输入所出拳"< cin>>p2; system("cls"); cout<<"\t石头: 2剪子: 1布: "< cout<<"玩家一所出拳: "; chuquan(p1); cout<<"\n玩家二所出拳所出拳: "; chuquan(p2); cout< if(p1-p2==1||p1-p2==-2) { SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED); cout<<"玩家一获胜"< SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE); } elseif(p1-p2==0) { cout<<"实力相当"< } else { SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED); cout<<"玩家二获胜"< 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"; cin>>a1; 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); cout<<"VS"<<"电脑的出拳: "; chuquan(a2); cout< if(a1-a2==1||a1-a2==-2) { cout<<"\t再来猜我一拳! ! "; big++; } elseif(a1-a2==0) cout<<"\t好汉再来一局"; else { cout<<"\t再回去修炼一下吧"< 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<<"◢██████████◣"< cout<<"◢◤ ◢█████◣◥◣"< cout<<"◢◤ ◢█◤ ◥█ ◥◣"< cout<<"◥◣ ██◣ ◥ ◢◤"< cout<<"◥◣◥██████◣ ◢◤"< cout<<"◥◣◥██████ ◢◤"< cout<<"◥◣ ◥█◢◤"< cout<<"◥█◣ ◢█◤"< cout<<"◥████◤"< cout<<"◥◣◢◤"< cout<<"◥◤"< SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE); cout<<"**********************************"< cout<<"*石头剪子布*"< cout<<"*1.进入游戏(人机对战)*"< cout<<"*2.进入游戏(人人对战)*"< cout<<"*3.挑战模式(连胜模式)*"< cout<<"*4.游戏说明*"< cout<<"*5.游戏记录*"< cout<<"*6.排行榜(连胜模式)*"< cout<<"*7.关于*"< cout<<"*8.查看当前时间*"< cout<<"*0.退出游戏*"< cout<<"*输入对应数字,按下回车使用其功能*"< cout<<"**********************************"< /*do { //HideCursor(); SetCursor(44,0); time_trawtime; structtm*timeinfo; time(&rawtime); timeinfo=localtime(&rawtime); SetConsoleTextAttribute(g_hOutput,FOREGROUND_INTENSITY|FOREGROUND_GREEN); printf("%s",asctime(timeinfo)); Sleep(1000); }while (1);*/ cin>>ch; operate(ch); system("pause"); system("cls"); }while(ch! ="0"); return0; } voidoperate(stringstr) { system("cls"); if(str=="1") play(); elseif(str=="2") playpeople(); elseif(str=="3") playchallenge(); elseif(str=="4") explain(); elseif(str=="5") record(); elseif(str=="6") rank_1(); elseif(str=="7") about(); elseif(str=="8") time_1(); elseif(str=="0") cout<<"byebye~~"< else cout<<"请输入有效数字"< } voidplay() { cout<<"石头: 2剪子: 1布: 0"< intx; do { cin>>x; a.show(x); cout<<"继续输入2,1,0可继续猜拳,输入其他按键结束战斗,返回上界面"< }while(x==0||x==1||x==2); } voidplaypeople() { intx; do { a2.play(); cout<<"输入0终止猜拳,输入其他继续进行对决"< cin>>x; }while(x! =0); } voidplaychallenge() { intx; big=0; cout<<"当前为连胜模式,如果胜利可取得继续猜拳的资格,且中途不可退出,如果猜拳失败则返回上一界面\n战斗吧! ! ! ! ! "< cout<<"请出拳"< do { a3.play(); x=a3.no; }while(x! =-1); if(bigger<=big) { bigger=big; cout<<"恭喜你创造了新的世界记录,请留下您的大名"< //for(intz;z<10;z++) //name[z]='\0'; cin>>name; } } voidexplain() { cout<<"规则: \n石头打剪刀,\n布包石头,\n剪刀剪布,\n输入2代表石头,\n输入1代表剪子,\n输入0代表布。 \n输入后按下回车\n同电脑进行猜拳。 "< SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_BLUE); cout<<"┏┓ ┏┓"< cout<<"┏┛┻━━━┛┻┓"< cout<<"┃ ┃"< cout<<"┃ ━ ┃"< cout<<"┃ ┳┛ ┗┳ ┃"< cout<<"┃ ┃"< cout<<"┃ ┻ ┃"< cout<<"┃ ┃"< cout<<"┗━┓ ┏━┛"< cout<<"┃ 必 ┃"< cout<<"┃ 胜 ┃"< cout<<"┃ ┗━━━┓"< cout<<"┃ ┣┓"< cout<<"┃ ┏┛"< cout<<"┗┓┓┏━┳┓┏┛"< cout<<"┃┫┫ ┃┫┫"< cout<<"┗┻┛ ┗┻┛"< SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE); } voidabout() { cout<<"当前版本1.0.0"< cout<<"基于c++的石头剪子布游戏"< cout<<"作者: 韩志杰"< cout<<"生产日期: 2014/7/7"< SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_RED); cout<<"へ /|"< cout<<"/\7 ∠_/"< cout<<"/ │ / /"< cout<<"│ Z_,< / /`ヽ"< cout<<"│ ヽ / 〉"< cout<<"Y `\/ /"< cout<<"<● . ● >〈 /"< cout<<"() へ ()| \〈"< cout<<">ー、_ / │//"< cout<<"/へ / /<|\\"< cout<<"\_/ (_/ │//"< cout<<"7 |/"< cout<<">―r ̄ ̄`ー―_丨"< SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE); } voidrecord() { cout<<"你目前: \n\twin局\t平局\t输局"< SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED); cout<<"\t"< : x; SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN); cout<<"\t"< : y; SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_BLUE|FOREGROUND_GREEN); cout<<"\t"< : z< SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE); } voidrank_1() { cout<<"*HERO*"; cout<<""<
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 课程 实验设计 基于 c+ 面向 对象 石头 剪子 游戏 源代码