基于c++的猜拳游戏.docx
《基于c++的猜拳游戏.docx》由会员分享,可在线阅读,更多相关《基于c++的猜拳游戏.docx(10页珍藏版)》请在冰豆网上搜索。
基于c++的猜拳游戏
#include之五兆芳芳创作
#include
#include
usingnamespacestd;
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\n"<cout<<"请公道安插时间,切勿沉迷于游戏!
\n"<cout<<"游戏说明:
数字1代表石头数字2代表剪子数字3代表布\n"<charisGoOn;
intinputPlay;
intinputComputer;
cout<<("猜拳游戏\n");
cout<<("游戏说明:
\n\n");
cout<<("数字1代表石头数字2代表剪子数字3代表布\n");
srand(time(NULL));
do
{
cout<<("\n请输入您要猜的:
\n");
cin>>inputPlay;
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)";
cin>>isGoOn;
}while(isGoOn=='y'||isGoOn=='Y');
cout<<"欢送下次再玩!
";
system("pause");
}
#include
#include
usingnamespacestd;
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\n"<cout<<"请公道安插时间,切勿沉迷于游戏!
\n"<baoshi(the_time_1);
cout<<"游戏说明:
数字1代表石头数字2代表剪子数字3代表布\n"<do{
cout<<"\n请问您一共想要玩几回猜拳游戏,请输入大于0的正整数(建议您至少玩十次):
"<doubletimes;
//输入的次数必须为大于0的正整数,不成为0,正数,浮点数,字符或是字符串,如果出现不法输入,下面代码是用来处理这些不法输入
while(!
(cin>>times))
{
cout<<"您的输入不正当,必须为一个数字,请重新输入:
"<cin.clear();
cin.sync();
}
if(times<=0)
{
cout<<"您的输入不正当,必须为正整数!
\n"<cin.clear();
cin.sync();
q='y';
continue;
}
elseif(times!
=int(times))
{
cout<<"您的输入不正当,必须为正整数!
\n"<cin.clear();
cin.sync();
q='y';
continue;
}
//游戏正式开始
for(inti=0;i{
cout<<"\n请输入您打算猜的拳(用数字123代替,数字1代表石头数字2代表剪子数字3代表布)"<while
(1)
{
doublet;
cin>>t;
if(cin.bad())
{
cerr<<"Sorry,出现了系统毛病,请重新运行游戏!
\n"<return1;
}
//用来处理不法输入
if(cin.fail())
{
cerr<<"Sorry!
请您必须输入一个正当的数字(1or2or3)"<cout<<"请输入您打算猜的拳(用数字123代替)"<cin.clear();
cin.sync();
continue;
}elseif(t!
=1&&t!
=2&&t!
=3)
{
cerr<<"Sorry!
请您必须输入一个正当的数字(1or2or3)\n"<cout<<"请输入您打算猜的拳(用数字123代替)\n"<cin.clear();
cin.sync();
continue;
}else
{
cout<<"第"<
if(t==1)
cout<<"您猜的拳是:
石头"<elseif(t==2)
cout<<"您猜的拳是:
铰剪"<else
cout<<"您猜的拳是:
布"<intn=win_or_loss(t);
if(n==0)
++ping;
elseif(n>0)
++win;//统计赢的次数
else
++loss;//统计输的次数
break;
}
}
if(i==times-1)
cout<<"您的猜拳次数已经达到您所设定的"<}
cout<<"请问是否还要持续本游戏(Y/other)"<cin>>q;//在玩够开始自己所设的次数后,如果仍然打算持续,则输入'y'
}while(q=='Y'||q=='y');
//对整个游戏进程做一个完整统计
sum=win+loss+ping;
gailv=win/sum;
cout<<"\n本次游戏您一共猜拳:
"<cout<<"其中一共胜利:
"<cout<<"其中一共输了:
"<cout<<"其中一共打平:
"<cout<<"您的胜率为:
"<cout<<"您的败率为:
"<cout<<"您的打平的几率为:
"<<(1-loss/sum-gailv)*100<<"%"<if(sum<10)
cout<<"由于您猜拳的次数小于10次,不具有统计学意义,所以您与电脑到底谁厉害,无法评判,请大侠重新来过!
\n"<elseif(gailv<0.4)
cout<<"您真是个菜鸟,持续努力哦!
\n"<else
cout<<"大侠好厉害啊,竟然赢了电脑,佩服佩服!
\n"<baoshi(the_time_2);
cout<<"本次游戏您一共破费了:
"<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<<"电脑游戏程序的猜的拳是:
石头"<ans=1;
break;
case0:
case3:
case6:
case9:
case12:
case15:
case18:
case21:
case24:
case27:
case30:
case33:
case36:
case39:
case42:
case45:
case48:
case51:
case54:
case57:
cout<<"电脑游戏程序的猜的拳是:
剪子"<ans=2;
break;
default:
cout<<"电脑游戏程序的猜的拳是:
布"<ans=3;
break;
}
if(t==ans)
{
cout<<"您这次和电脑打了一个平手!
"<return0;
}
switch(t)
{
case1:
if(ans==2)
{
cout<<"祝贺您!
您这次赢了电脑!
\n"<return1;
}
else
{
cout<<"哈哈!
输给电脑了!
再接再厉!
"<return-1;
}
break;
case2:
if(ans==3)
{
cout<<"祝贺您!
您这次赢了电脑\n"<return1;
}
else
{
cout<<"哈哈!
输给电脑了!
再接再厉!
"<return-1;
}
break;
case3:
if(ans==1)
{
cout<<"祝贺您!
您这次赢了电脑\n"<return1;
}
else
{
cout<<"哈哈!
输给电脑了!
再接再厉!
"<return-1;
}
break;
}
}
inlinevoidkeep_window_open()
{
cin.clear();
cout<<"Pleaseenteracharactertoexit\n";
charch;
cin>>ch;
return;
}
inlinevoidbaoshi(time_t&timeval)
{
(void)time(&timeval);
cout<<"当前北京时间为:
"<return;
}