该程序将与用户一起玩游戏,名为Odds and Evens。计算机将播放Evens,人类用户将玩Odds。对于一轮游戏,每个玩家选择[1,10]范围内的整数。玩家独立选择他们的号码:在选择自己的号码之前,玩家都不知道其他玩家的号码。如果数字的总和是偶数,则Evens(计算机)赢得那一轮;如果数字的总和是奇数,则赔率(人类)赢得那一轮。游戏继续进行与用户想要玩的一样多轮;用户通过输入非#或[1,10]之外的数字来结束游戏。在游戏结束时,该程序总结了分数。
我无法正确循环此问题。随机化数字电脑选择不起作用在游戏中的每一轮,电脑选择相同的数字。另外我不知道如何让程序总结得分。非常感谢帮助,因为我有另外一个与此类似的家庭作业问题! 这是我的代码:
#include <iostream>
#include <cmath>
#include <cstdlib>
#include <string>
#include <iomanip>
#include <ctime>
using namespace std;
bool die(const string & msg);
int main(){
srand(static_cast<unsigned>(time(0)));
unsigned num1 = 0, num = 0, sum = 0;
bool userTurn = true;
cout << "Welcome to the Odds and Evens game!";
num = rand() % 10 + 1;
while (num){
if (userTurn){
cout << " Your # in [1,10] is ";
cin >> num1;
}
else {
cout << "My number is " << num;
sum = num1 + num;
if (sum % 2 == 0){
cout << " I win!";
}
else {
cout << " You win!";
}
}
userTurn = !userTurn;
}
}
bool die(const string & msg){
cout << "Fatal error: " << msg << endl;
exit(EXIT_FAILURE);
}
答案 0 :(得分:1)
随机选择PC选择的数字并不像游戏中的每一轮那样选择相同的数字。
当计算机轮到你时,你没有代码重新设置num
的值。
行后
userTurn = !userTurn;
添加
if ( !userTurn )
{
num = rand() % 10 + 1;
}
此外,我不知道如何让该计划总结得分。
保留两个计数器,指示人赢了多少次以及计算机赢了多少次。
int computerWinCount = 0;
int humanWinCount = 0;
然后,更新循环使用:
if (sum % 2 == 0){
cout << " I win!";
++computerWinCount;
}
else {
cout << " You win!";
++humanWinCount;
}
while
循环的条件是你的程序永远不会终止。将其更新为以下内容。
while (true) {
if (userTurn){
cout << " Your # in [1,10] is ";
cin >> num1;
// If the user entered a number that is not
// within range or the user did not input a number,
// then break out of the loop.
if ( !cin || num1 < 1 || num1 > 10 )
{
break;
}
}
else {
cout << "My number is " << num;
sum = num1 + num;
if (sum % 2 == 0){
cout << " I win!" << endl;
++computerWinCount;
}
else {
cout << " You win!" << endl;
++humanWinCount;
}
}
userTurn = !userTurn;
if ( !userTurn )
{
num = rand() % 10 + 1;
}
}
要报告摘要,请在main
。
cout << "Number of times I won: " << computerWinCount << endl;
cout << "Number of times you won: " << humanWinCount << endl;
答案 1 :(得分:0)
下面:
num = rand() % 10 + 1;
while (num){
... // never change num
}
你看到了问题吗?计算机玩家随机选择num
,但只选择一次。只需将另一个num = rand() % 10 + 1;
放入主循环中。
(此外,您似乎没有办法让用户终止游戏。)
答案 2 :(得分:0)
所以你想要一个简单的循环来完成以下事情。
直到用户选择的选项不是1到10
才会发生这种情况之后你要显示分数。
这是一个完整的例子。
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int main(){
int mynum, compNum, myScore(0), compScore(0);
srand(time(NULL));
cout << "Welcome to the Odds and Evens game!" << endl;
cout << "Your # in [1,10] is ";
while ((cin >> mynum) && mynum > 0 && mynum <= 10){
compNum = rand()%10 + 1;
if ((mynum + compNum)%2){
cout << "You win" << endl;
++myScore;
} else {
cout << "Computer Wins" << endl;
++compScore;
}
cout << "Your # in [1,10] is ";
}
cout << "You won " << myScore << " games" << endl;
cout << "The computer won " << compScore << " games" << endl;
return 0;
}
您计算机号码不变的问题是由于您没有在循环中更新其值。
如果你想跟踪得分,你可以简单地保留两个整数来记录用户赢了多少次以及计算机赢了多少次。然后在结束时(在while循环之后)cout他们的每个分数。
总体而言,您的代码非常接近。 您只需要确保更新计算机在while循环中的猜测,以及当您决定谁赢得该人得分的圆形增量时。
原始代码中的整个循环条件将始终评估为true。 num将始终为1到10.您将在while循环条件中使用用户输入。
我的代码中的while条件将执行以下操作: 获得用户的输入。 cin&gt;&gt;如果cin无法读取数字,mynum将评估为false。如果它确实读了一个数字,那么条件将检查该数字是否在1到10之间。