{
int i,game = 0,guess,count = 0;
int rando;
srand (time(0));
rando = rand() % 50 + 1;
cout << "****Welcome To The Game****\n";
cout << "1: Start the game\n";
cout << "2: End the game\n";
cin >> game;
while (game != 2 && count != 11)
{
cout << "Enter a number between 1 and 50: ";
cin >> guess;
count++;
if (guess == rando)
{
cout << "you got it!\n";
cout << "would you like to play again?\n";
cin >> game;
}
else if (guess < rando)
{
cout << "too low, try again " << endl;
}
else if (guess > rando)
{
cout << "Too high, try again" << endl;
}
if (count == 11)
{
cout << "too many guesses. the number was: " << rando << "." << endl;
cout << "would you like to play again?\n";
cin >> game;
}
if (game == 2)
{
cout << "@@@ Thank you. See you next time.@@@\n";
}
}
return 0;
}
когда я запускаю игру, она генерирует новый номер каждый раз, когда я запускаю программу, но не когда я прошу снова сыграть. Я пытался вставить его в то время, но это портит код. как выполнить второй вариант в первом предложении?
Когда вы хотите снова сыграть, вы все еще находитесь в цикле while. Либо вам нужно вырваться из него и начать всю игру заново, либо вам нужно поставить генерацию числа в цикл.
Похоже, вам нужно немного отшлифовать свой код, но также, если вы используете отладочный выпуск в Visual Studio rand, это не так уж и случайно, чтобы помочь вам в отладке.
@NathanOliver, когда я добавляю строку кода внутри цикла, программа работает неправильно. когда я добавил его, например, я мог угадать 12 и получить ответ «слишком низкий», даже если число было 4.
Отладка и выпуск @CodeGorilla не являются детерминированным фактором в prng среды выполнения VC; заполнение является. Если не задано (srand( something entropic )
), действие среды выполнения по умолчанию в отладке и выпуске оба эквивалентно srand(1)
, и это не относится к VC; это часть языкового стандарта. Проблема ОП в том, что они рисуют только одно случайное число.
@ 30for30 Мой хрустальный шар говорит мне, что вы поместили его не в то место в петле. Это должно быть только в конкретных предложениях if, касающихся запуска новой игры. в вашем коде есть два таких случая: if (guess == rando)
и if (count == 11)
Похоже, у вас есть один цикл, который контролирует как «неоднократное угадывание, пока я не выиграю или не исчерпаю догадки», и, «неоднократное воспроизведение раундов, пока я не решу выйти». Вам нужно генерировать новое случайное число каждый раз, когда происходит последнее, но сохранять его неизменным между итерациями первого. Это сложно, пока обе петли смешаны вместе, как у вас здесь. Разделите его на внешний цикл для того, чтобы сыграть еще один раунд или выйти, и внутренний цикл для угадывания, и тогда у вас будет единственное место, где вы можете изменить значение цели.
Вопросы по отладке обычно должны содержать минимальный воспроизводимый пример проблемы, которая включает в себя функцию main
и все #include
директивы.
@NathanPierson спасибо за помощь в разработке программы. Я планирую попробовать совершенно новый подход с циклом for вместо while и разделения, как вы сказали.
@WhozCraig, когда я использую ваш ответ, есть ли способ сбросить счетчик до 0 каждый раз, когда игра снова запускается?
int randomGame()
{
int gameMenuChoice = 0;
srand(time(0));
std::cout << "****Welcome To The Game****\n";
std::cout << "1: Start the gameMenuChoice\n";
std::cout << "2: End the gameMenuChoice\n";
std::cin >> gameMenuChoice;
while (gameMenuChoice != 2)
{
const int rando = rand() % 50 + 1;
int guess = 0;
for (int count = 0; count < 11 && guess != rando; ++count)
{
std::cout << "Enter a number between 1 and 50: ";
std::cin >> guess;
if (guess < rando)
{
std::cout << "too low, try again \n";
}
else if (guess > rando)
{
std::cout << "Too high, try again\n";
}
}
if (guess == rando)
{
std::cout << "you got it!\n";
}
else
{
std::cout << "too many guesses. the number was: " << rando << ".\n";
}
std::cout << "would you like to play again?\n"; // I think people will enter Y for yes here.
std::cin >> gameMenuChoice;
}
std::cout << "@@@ Thank you. See you next time.@@@\n";
return 0;
}
Я разделил ваше меню и циклы игровой рутины и немного упростил логику.
Вам нужно получать новое случайное число каждый раз, когда вы хотите сыграть в новую игру. У вас есть строка кода, которая выполняет цикл внутри?