【发布时间】:2015-09-14 17:25:46
【问题描述】:
我制作了一个石头剪刀布的 C++ 程序,但我很难让它循环。在程序中,它计算输赢(不计算平局),当它平局时,它会一直持续到赢/输。当发生赢/输时,任一变量(玩家赢的 pWins 或玩家输的 pLosses)都会增加。它询问用户是否想再玩一次,如果用户说不,程序结束并显示分数。
我的问题是如何让程序在平局和用户选择继续游戏的情况下循环。我知道我应该放一些do-whiles,但我不知道怎么写。
if( pInput == ROCK && cInput == ROCK )
{
std::cout << "You tied with me!" << std::endl;
}
else if( pInput == ROCK && cInput == SCISSORS )
{
std::cout << "Drats! You win!" << std::endl;
}
else if( pInput == ROCK && cInput == PAPER )
{
std::cout << "Hah! Here comes the Hug of Death!" << std::endl;
}
else if( pInput == SCISSORS && cInput == SCISSORS )
{
std::cout << "Looks like we tied!" << std::endl;
}
else if( pInput == SCISSORS && cInput == ROCK )
{
std::cout << "Hah! I smashed you, so I win!" << std::endl;
}
else if( pInput == SCISSORS && cInput == PAPER )
{
std::cout << "Drats! You win!" << std::endl;
}
else if( pInput == PAPER && cInput == PAPER )
{
std::cout << "Drats! We tied!" << std::endl;
}
else if( pInput == PAPER && cInput == SCISSORS )
{
std::cout << "Hah! I win, because I'm a scissor!" << std::endl;
}
else if( pInput == PAPER && cInput == ROCK )
{
std::cout << "Drats! You gave me the Hug of Death!" << std::endl;
}
std::cout << "You won " << pWins << " times, and lost " << pLosses << "times.";
}
【问题讨论】:
-
使用查找表和
switch语句会容易得多。这两个选择可以组合成一个值,例如state = pInput << 2 | cInput。然后,您可以使用单数switch测试与所有合理结果对所有可能的匹配项进行测试。至于循环,你用过for或while吗? -
很难在没有看到其余代码的情况下提出有用的建议。
-
pWins和pLosses设置在哪里?同样,您有pTies变量吗?看起来你想要一个pTied变量(只是一个bool)。任何时候结果为平局,将其设置为 true;任何时候结果不是平局,将其设置为假。然后,您只需将整个内容包装在while循环中。while (pTied) { ... }. -
我同意@RSahu - 您显示的代码与您的问题无关!向我们展示一些需要循环的东西(如果你觉得 if-else 语句的巨大悲惨列表需要循环,假装它们都在一个函数中,这样我们就不会被那个可怕的怪物分心) .
-
只需将
while (true)放在整个事情周围。在循环的底部,询问用户是否想再次播放。如果他们说不,请使用break退出循环。