adpost'sblog

有方向有阶段的努力才能离目标更近,
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

石头剪刀布游戏

Posted on 2010-08-02 13:40  adpost  阅读(356)  评论(0)    收藏  举报
#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;
    }
}