#includeiostream#includestdlib.h#includetime.husingnamespacestd;voidshow(intinput){switch(input){case1:cout(出的是石头!);break;case2:cout(出的是剪刀!);break;case3:cout(出的是布!);break;default:;}}voidcompare(intinputPlay,intinputComputer){if(inputPlay==1&&inputComputer==2||inputPlay==2&&inputComputer==3||inputPlay==3&&inputComputer==1){cout(\n玩家胜!\n);}elseif(inputPlay==inputComputer){cout(\n平局!\n);}else{cout(\n电脑胜!\n);}}intmain(){cout欢迎您玩石头-剪子-布游戏(游戏作者:张龙)版本1.0\nendl;cout请合理安排时间,切勿沉迷于游戏!\nendl;cout游戏说明:数字1代表石头数字2代表剪子数字3代表布\nendl;charisGoOn;intinputPlay;intinputComputer;cout(猜拳游戏\n);cout(游戏说明:\n\n);cout(数字1代表石头数字2代表剪子数字3代表布\n);srand(time(NULL));do{cout(\n请输入您要猜的:\n);cininputPlay;if(inputPlay=0&&inputPlay=3){cout(您);show(inputPlay);inputComputer=rand()%3;cout(电脑);show(inputComputer);compare(inputPlay,inputComputer);}else{cout(您输入有错误!\n);cout(\n数字1代表石头数字2代表剪子数字3代表布\n);}cout\n您需要继续么?(y/n);cinisGoOn;}while(isGoOn=='y'||isGoOn=='Y');cout欢迎下次再玩!;system(pause);}#includeiostream#includectimeusingnamespacestd;intwin_or_loss(int);//判断输赢的子函数voidbaoshi(time_t&);//给出当前系统时间的子函数voidkeep_window_open();//让程序运行完毕后,窗口不立马消失intmain(){time_tthe_time_1,the_time_2;charq;intwin(0),loss(0),ping(0);doublegailv(0),sum(0);cout欢迎您玩石头-剪子-布游戏(游戏作者:张龙)版本1.1\nendl;cout请合理安排时间,切勿沉迷于游戏!\nendl;baoshi(the_time_1);cout游戏说明:数字1代表石头数字2代表剪子数字3代表布\nendl;do{cout\n请问您一共想要玩几次猜拳游戏,请输入大于0的正整数(建议您至少玩十次):endl;doubletimes;//输入的次数必须为大于0的正整数,不可为0,负数,浮点数,字符或者是字符串,如果出现非法输入,下面代码是用来处理这些非法输入while(!(cintimes)){cout您的输入不合法,必须为一个数字,请重新输入:endl;cin.clear();cin.sync();}if(times=0){cout您的输入不合法,必须为正整数!\nendl;cin.clear();cin.sync();q='y';continue;}elseif(times!=int(times)){cout您的输入不合法,必须为正整数!\nendl;cin.clear();cin.sync();q='y';continue;}//游戏正式开始for(inti=0;itimes;++i){cout\n请输入您打算猜的拳(用数字123代替,数字1代表石头数字2代表剪子数字3代表布)endl;while(1){doublet;cint;if(cin.bad()){cerrSorry,出现了系统故障,请重新运行游戏!\nendl;return1;}//用来处理非法输入if(cin.fail()){cerrSorry!,请您必须输入一个合法的数字(1or2or3)endl;cout请输入您打算猜的拳(用数字123代替)endl;cin.clear();cin.sync();continue;}elseif(t!=1&&t!=2&&t!=3){cerrSorry!,请您必须输入一个合法的数字(1or2or3)\nendl;cout请输入您打算猜的拳(用数字123代替)\nendl;cin.clear();cin.sync();continue;}else{cout第i+1次猜拳游戏;if(t==1)cout您猜的拳是:石头endl;elseif(t==2)cout您猜的拳是:剪刀endl;elsecout您猜的拳是:布endl;intn=win_or_loss(t);if(n==0)++ping;elseif(n0)++win;//统计赢的次数else++loss;//统计输的次数break;}}if(i==times-1)cout您的猜拳次数已经达到您所设定的times次\nendl;}cout请问是否还要继续本游戏(Y/other)endl;cinq;//在玩够开始自己所设的次数后,如果仍然打算继续,则输入'y'}while(q=='Y'||q=='y');//对整个游戏过程做一个完整统计sum=win+loss+ping;gailv=win/sum;cout\n本次游戏您一共猜拳:sum次endl;cout其中一共胜利:win次endl;cout其中一共输了:loss次endl;cout其中一共打平:ping次endl;cout您的胜率为:gailv*100%endl;cout您的败率为:loss/sum*100%endl;cout您的打平的概率为:(1-loss/sum-gailv)*100%endl;if(sum10)cout由于您猜拳的次数小于10次,不具有统计学意义,所以您与电脑到底谁厉害,无法评判,请大侠重新来过!\nendl;elseif(gailv0.4)cout您真是个菜鸟,继续努力哦!\nendl;elsecout大侠好厉害啊,竟然赢了电脑,佩服佩服!\nendl;baoshi(the_time_2);cout本次游戏您一共花费了:the_time_2-the_time_1秒\nendl;keep_window_open();return0;}//游戏核心代码,判断输赢intwin_or_loss(intt){time_tthe_time;structtm*tm_ptr;intrec_sec;//电脑的猜拳最好的办法是设定一组完全的随机数,但是一般很难设计出完全的随机数,因此想了一个很巧妙的方法,取玩游戏时的系统时间的秒,根据当前的秒,电脑给出相应猜出的拳//这样用一种相对比较随机的方法,即便玩游戏的人知道了随机数的规律,也很难完全获胜the_time=time((time_t*)0);tm_ptr=gmtime(&the_time);rec_sec=tm_ptr-tm_sec;intans;//switch中主要分了三种情况,第一种是60以内的素数,然后又添加了几个其他的,凑够20;第二种是能被3除开的,然后再添加几个凑成20个;剩下的为第三种switch(rec_sec){case2:case8:case5:case7:case11:case13:case17:case19:case23:case29:case31:case37:case41:case43:case47:case53:case59:case22:case38:case56:cout电脑游戏程序的猜的拳是:石头endl;ans=1;break;case0:case3:case6:case9:case12:case15:case18:case21:case24:case27:case30:case33:case36:case39:case42:case45:case48:case51:case54:case57:cout电脑游戏程序的猜的拳是:剪子endl;ans=2;break;default:cout电脑游戏程序的猜的拳是:布endl;ans=3;break;}if(t==ans){cout您这次和电脑打了一个平手!endl;return0;}switch(t){case1:if(ans==2){cout恭喜您!您这次赢了电脑!\nendl;return1;}else{cout哈哈!输给电脑了!再接再厉!endl;return-1;}break;case2:if(ans==3){cout恭喜您!您这次赢了电脑\nendl;return1;}else{cout哈哈!输给电脑了!再接再厉!endl;return-1;}break;case3:if(ans==1){cout恭喜您!您这次赢了电脑\nendl;return1;}else{cout哈哈!输给电脑了!再接再厉!endl;return-1;}break;}}inlinevoidkeep_window_open(){cin.clear();coutPleaseenteracharactertoexit\n;charch;cinch;return;}inlinevoidbaoshi(time_t&timeval){(void)time(&timeval);cout当前北京时间为:ctime(&timeval)\nendl;return;}