我被要求使用C++中的类在人类玩家和计算机玩家之间创建一个石头、纸、剪刀游戏。
一切都是直截了当的,除了他们希望人类玩家有一个策略,它会循环通过这个策略来玩游戏。用户可以输入策略的持续时间,然后输入这些策略之后的内容。因此,例如,如果用户输入4 R P S S,这意味着人类的策略是先玩石头,然后玩纸,然后玩剪刀,然后如果被要求玩更多,则循环回到开始。在这种情况下,电脑将始终播放摇滚乐。这里有一个裁判级别,将决定获胜者。这种情况下的输出看起来像4 T L W W。T=平局,L=失败,W=获胜
为计算机制作.h和.cpp文件是直接的,因为它将始终播放Rock。
我的问题是StrategyCounter卡在0上,而StrategyCounter++;在Human::getMove((中不会递增。
请记住,我不能更改函数的参数。
这是主文件:
int main()
{
Referee ref;
HumanPlayer human;
ComputerPlayer computer;
for (int i=0 ; i<5; i++){
cout<< ref.refGame(human, computer)<< " ";
}
}
参考.cpp
Referee::Referee(){
}
char Referee::refGame(HumanPlayer human,ComputerPlayer computer){
char s = human.makeMove();
if (s == 'R'){
score = 'T';}
else if (s == 'P'){
score = 'W';}
else if (s == 'S'){
score = 'L';
}
return score;
}
Human.cpp
HumanPlayer::HumanPlayer(){
int r;
cin>>r;
k = r;
cout<< k << " ";
StrategyCounter = 0;
for (int i=0; i<k; i++){
cout << "What the next move?: ";
cin>>Strategy[i];
}
}
char HumanPlayer::makeMove(){
// he should have the startegy here to get results
if (StrategyCounter > k){
StrategyCounter = 0;
}
cout<<StrategyCounter<<endl;
char HumanMove_p;
HumanMove_p = Strategy[StrategyCounter];
StrategyCounter++;
HumanMove = HumanMove_p;
return HumanMove;
}
Human.h
class HumanPlayer
{
public:
HumanPlayer();
int k;
int StrategyCounter;
char *Strategy = new char[k];
char HumanMove;
char makeMove();
};
正如anatolig所指出的,该解决方案可能需要通过引用传递human
。StrategyCounter
被固定为零,因为在每次迭代中,您传递值并为函数Referee::refGame
生成human
的本地副本。
考虑修改主for循环并添加human.StrategyCounter++;