不确定如何为我正在制作的类设置递增值

  • 本文关键字:设置 不确定 c++ oop
  • 更新时间 :
  • 英文 :


我被要求使用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所指出的,该解决方案可能需要通过引用传递humanStrategyCounter被固定为零,因为在每次迭代中,您传递值并为函数Referee::refGame生成human的本地副本。

考虑修改主for循环并添加human.StrategyCounter++;

最新更新