c++ 需要编写一个人机 石头剪刀布的程序

示例: 输入 3 S R P (代表三次游戏, s是剪刀,r是石头,p是布)
电脑固定是出石头
然后 通过判定
输出 L W T (l 是输,w是赢,t是平局)

因为要求要三个独立的class
人 电脑 裁判。

电脑的class我会写。
但是卡在了人和裁判的class了
不知道是不是应该用array来输入
这个array到底是string还是 char呢
还有main.cpp里我应该怎么使用这些function呢?
很急!

图片说明

图片说明
这是我写的human.h 和human.cpp

你得把你现有的程序贴出来才好具体回答你。
你说的array string和char都是可以实现的。

给你写了一个参考下:

#include "stdio.h"

class Machine
{
public:
    char Play()
    {
        return 'R';
    }
};

class Human
{
public:
    char Play()
    {
        char ch;
        //printf("s?r?p?\n");
        scanf("%c", &ch);
        return ch;
    }
};

class Referee
{
public:
    char Judge(char m, char p)
    {
        if (m == p) return 'T';
        if ((m == 'S' && p == 'P') ||
            (m == 'P' && p == 'R') ||
            (m == 'R' && p == 'S'))
            return 'L';
        else
            return 'W';
    }
};

int main()
{
    Machine m;
    Human p;
    Referee r;
    int n;
    char buf[100];
    scanf("%d", &n);
    for (int i = 0; i < n; i++)
        buf[i] = r.Judge(m.Play(), p.Play());
    buf[n] = '\0';
    printf("%s\n", buf);
    return 0;
}

图片说明

如果问题得到解决,请点我回答左上角的采纳。


带空格的版本

#include "stdio.h"

class Machine
{
public:
    char Play()
    {
        return 'R';
    }
};

class Human
{
public:
    char Play()
    {
        char ch;
        do {
        scanf("%c", &ch);
        } while (ch == ' ');
        return ch;
    }
};

class Referee
{
public:
    char Judge(char m, char p)
    {
        if (m == p) return 'T';
        if ((m == 'S' && p == 'P') ||
            (m == 'P' && p == 'R') ||
            (m == 'R' && p == 'S'))
            return 'L';
        else
            return 'W';
    }
};

int main()
{
    Machine m;
    Human p;
    Referee r;
    int n;
    char buf[100];
    scanf("%d", &n);
    for (int i = 0; i < n * 2; i += 2)
    {
        buf[i] = r.Judge(m.Play(), p.Play());
        buf[i + 1] = ' ';
    }
    buf[n * 2 - 1] = '\0';
    printf("%s\n", buf);
    return 0;
}

图片说明

主要就是判断输入字符是什么,电脑固定输出石头,那就不用考虑电脑,根据输入就能直接输出结果,游戏次数为3,可以定义一个函数,输入游戏次数,在函数里面实现一个for循环,每次循环输入一个字符,再输出结果就可以了,这个函数直接写在类里面就行了


#include <bits/stdc++.h>
#include <windows.h>
using namespace std;
string c[3]= {"石头","剪刀","布"};
string name[10]= {"老六","老八","小张","小孩儿","隔壁老王","嚣张的气球","小李","大壮","haha","OBB"};
void wlcome()
{
    system("cls");
    system("color 2B");
    cout<<setw(60)<<"石头剪刀布"<<endl;
    cout<<endl<<endl<<endl<<setw(30)<<"1.双人模式"<<setw(30)<<"2.人机模式"<<setw(30)<<"3.退出"<<endl;
    cout<<setw(60)<<"输入你的选择:";

}
void mode1()
{
    int player1=0,player2=0,tie=0;
    srand(time(0));
    system("cls");
    cout<<"正在匹配中,请稍候...";
    _sleep(5000);
    int a=rand()%10;
    system("cls");
    cout<<"匹配成功!";
    _sleep(1000);
    system("cls");
    cout<<name[a];
    _sleep(1000);
    system("cls");
    for(int i=1; i<=5; i++)
    {
        string d;
        int sw=rand()%3;
        cout<<"请输入你要出的拳:" ;
        do
        {
            cin>>d;
        }
        while(d!=c[0]&&d!=c[1]&&d!=c[2]);
        cout<<"你出了"<<d<<","<<name[a]<<"出了"<<c[sw]<<",";
        for(int j=0; j<3; j++)
        {
            if(c[j]==d)
            {
                switch(sw-j)
                {
                    case 2:
                        cout<<name[a]<<"赢了!"<<endl;
                        player2++;
                        break;
                    case 0:
                        cout<<"平局!"<<endl;
                        tie++;
                        break;
                    default:
                        cout<<"你赢了!"<<endl;
                        player1++;
                        break;
                }
            }
        }
    }
    cout<<"你赢:"<<player1<<endl;
    cout<<name[a]<<"赢:"<<player2<<endl;
    cout<<"平局:"<<tie<<endl;
    if(player1>player2)
    {
        cout<<"恭喜你挑战成功!"<<endl;
    }
    else if(player1<player2)
    {
        cout<<"继续坚持!"<<endl;
    }
    else
    {
        cout<<"还不错哦,继续坚持!"<<endl;
    }
}
void mode2()
{
    system("cls");
    int window=0,player=0,tie=0;
    for(int i=1; i<=5; i++)
    {
        string d;
        int sw=rand()%3;
        cout<<"请输入你要出的拳:" ;
        do
        {
            cin>>d;
        }
        while(d!=c[0]&&d!=c[1]&&d!=c[2]);
        cout<<"你出了"<<d<<","<<"电脑出了"<<c[sw]<<",";
        for(int j=0; j<3; j++)
        {
            if(c[j]==d)
            {
                switch(j-sw)
                {
                    case -2:
                        cout<<"电脑赢了!"<<endl;
                        window++;
                        break;
                    case 0:
                        cout<<"平局!"<<endl;
                        tie++;
                        break;
                    default:
                        cout<<"你赢了!"<<endl;
                        player++;
                        break;
                }
            }
        }
    }
    cout<<"你赢:"<<player<<endl;
    cout<<"电脑赢:"<<window<<endl;
    cout<<"平局:"<<tie<<endl;
    if(player>window)
    {
        cout<<"恭喜你挑战成功!"<<endl;
    }
    else if(player<window)
    {
        cout<<"继续坚持!"<<endl;
    }
    else
    {
        cout<<"还不错哦,继续坚持!"<<endl;
    }
}
int main()
{
    SetConsoleTitle("石头剪刀布");
    while(true)
    {
        wlcome();
        int n;
        do
        {
            cin>>n;
        }
        while(n>3||n<1);
        if(n==1)
        {
            mode1();
            _sleep(5000);
        }
        else if(n==2)
        {
            mode2();
            _sleep(5000);
        }
        else
        {
            return 0;
        }
    }
}

运行结果:

img

img