проверить, кто победит в игре в кости

У меня есть игра в кости

int userGame()
{
cout << " User turn --- Press 2 to roll" << endl;
cin >> userInput;

if ( userInput == 2 )
{
Dice ();
cout << "The user rolled        Dice 1 =" << die1 << " and Dice 2 = " << die2 << endl;
cout << "Total = " << die1 + die2 << endl;
}

else {
cout << "Wrong input. Try again";
//userGame();
}return (die1 + die2);
}

и теперь в основном, у меня есть —

int main ()
{
// set the seed
srand(time(0));
userGame();

while (true)
{if (userGame() == 7 || userGame() == 11)
{
cout << "You won" << endl;
break;
}

else if (userGame() == 2)
{
cout << "You loose" <<endl;
break;
}

else

{
break;

}}return 0;

Игральная кость ();

#include<iostream>
#include<ctime>      // for the time() function
#include<cstdlib>    // for the srand() and rand() functions
using namespace std;
int compInput;
int userInput;
int die1 = 0;
int die2 = 0;
int Dice ()
{

// roll the first die
die1 = (rand() % 6 ) + 1;
// roll the second die
die2 = (rand() % 6 ) + 1;}

Но вывод по какой-то причине не отображается правильно. Как только он покажет, что пользователь выиграл, когда на выходе 7 и в другой раз, он просто продолжит игру.

Что я делаю с циклом в main ()?

Спасибо

0

Решение

if (userGame() == 7 || userGame() == 11)

Эта линия — ваша проблема. C ++ использует оценку короткого замыкания. В этом случае, если userGame() == 7 успешно, он не проверяет второй тайм Однако, если это не удается userGame() будет вызван снова для второй половины, то есть вы дважды поиграете перед тем, как перейти в раздел кода для if.

    while (true)
{
int result = userGame();
if (result == 7 || result == 11)
{
cout << "You won" << endl;
break;
}
else if (result == 2)
{
cout << "You loose" <<endl;
break;
}
else
{
break;
}
}
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]