#include <locale>
#include <iostream>
#include <cstdlib>
using namespace std;
string SystemGameResult (int rndNumber);
int IsWoner(int a,int b,int &sucessNumber,int &EqualNumber);
string PrintResultInfo(int s);
/*
石头剪刀布游戏
powerby:http://www.adpost.cn
输入 R:代表石头
S:代表剪刀
P:代表布
*/
int main()
{
//setlocale (LC_ALL, "");
//随机数 0:石头 1:剪刀 2:布
int rndNumber;
int gamesNumber;
int sucessNumber=0,EqualNumber=0;
char gamerInput;
gamesNumber = 0;
string noteInfo = "请输入一个字符,r:石头,s:剪刀,p:布,0:退出:";
srand ( (unsigned) time (NULL));
cout << noteInfo << endl;
while (true) {
gamesNumber++;
cin >> gamerInput;
rndNumber = rand() % 3;
if (gamerInput == '0')
break;
switch (tolower (gamerInput)) {
case 'r':
cout << "您出:"<<SystemGameResult(0)
<<",系统出:" << SystemGameResult(rndNumber)
<< " "<<PrintResultInfo(IsWoner(rndNumber,0,sucessNumber,EqualNumber)) << endl;
break;
case 's':
cout << "您出:"<<SystemGameResult(1)
<<",系统出:" << SystemGameResult(rndNumber)
<< " "<<PrintResultInfo(IsWoner(rndNumber,1,sucessNumber,EqualNumber)) << endl;
break;
case 'p':
cout << "您出:"<<SystemGameResult(2)
<<",系统出:" << SystemGameResult(rndNumber)
<< " "<<PrintResultInfo(IsWoner(rndNumber,2,sucessNumber,EqualNumber)) << endl;
break;
default:
cout << "输入错误,请输入一个字符,r:石头,s:剪刀,p:布,0:退出:" << endl;
break;
}
}
cout<<"共玩了"<<gamesNumber<<"次,"
<<"赢了 "<<sucessNumber<<" 次,"
<<"输了 "<<gamesNumber-sucessNumber-EqualNumber<<" 次,"
<<"平了 "<<EqualNumber<<" 次"
<<endl;
return 0;
}
/*
谁胜利
a:玩家
b:系统
A-B:
0:平
-1,2:胜
1,-2:输
@return:
0:平 1:胜 2:输 -1:异常数据
*/
int IsWoner(int a,int b,int &sucessNumber,int &EqualNumber)
{
int v = a-b;
if(v==0)
{
EqualNumber++;
return 0;
}
if(v==1 || v==-2) {
sucessNumber++;
return 1;
} else if(v==-1 || v==2)
return 2;
else return -1;
}
//打印结果信息
string PrintResultInfo(int s)
{
switch(s) {
case 0:
return "平了!\n";
break;
case 1:
return "你胜利了!\n";
break;
case 2:
return "你输了!\n";
break;
default:
return "异常性况!\n";
break;
}
}
string SystemGameResult (int rndNumber)
{
switch (rndNumber) {
case 0:
return "石头";
break;
case 1:
return "剪刀";
break;
case 2:
return "布";
break;
default:
return "异常数据";
break;
}
}