示例: 输入 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;
}
}
}
运行结果: