Диалоговые окна сообщений в компьютерной игре в догадки - PullRequest
0 голосов
/ 20 декабря 2018

Здравствуйте, я делаю игру и пытаюсь ее запрограммировать, чтобы пользователь думал о случайном числе, а программа пытается его угадать.Я должен использовать диалоговые окна сообщений (это школьный проект), и он спрашивает пользователя, является ли число слишком высоким, слишком низким или правильным, но когда число слишком мало, он угадывает числа, которые выше.В чем проблема?(Предположим, что счетчик был инициализирован как 0.)

boolean correctGuess = false; // when computer guesses incorrectly, correctGuess is false

String n = JOptionPane.showInputDialog("Is " + progNum + " too high, too low, or correct?", " ");


while(correctGuess == false)   // when the computer is guessing
{

if(n.equals("correct"))  // if the number is correct 
{
  count++;     // update number of guesses
  JOptionPane.showMessageDialog(null, "Yay! " + progNum + " was correct! It took the computer " + count + " guesses."); // correct guess, displays number of guesses
  correctGuess= true;  // computer guessed the correct number
  break;  // program stops
}
else if(n.equals("too high")) // number is too high, prog generates lower number
{
  count++;      // update number of guesses
  int max = (progNum - 1);        // guess was too high so progNum-1 is the max
  int min = 1;        // min value is progNum + 1 since progNum is too high
  progNum = generator.nextInt((max - min) + 1) + min;      // new range for progNum between 1 and progNum1 - 1
  String tooHigh = JOptionPane.showInputDialog("Is " + progNum + " too high, too low, or correct?", " "); // asks user

  if (tooHigh == null)
   return;

 }
else if(n.equals("too low")) // number is too low, prog generates higher number
{
  count++;          // update number of guesses
  int max = 100;     // generate a range of values for another random guess
  int min = (progNum + 1);      // min value is progNum + 1 since progNum is too low
  progNum = generator.nextInt((max - min) + 1) + min;      // new range for progNum between 1 and progNum1 + 1
  String tooLow = JOptionPane.showInputDialog("Is " + progNum + " too high, too low, or correct?", " ");  // asks user

  if (tooLow == null)
   return;
}

Ответы [ 2 ]

0 голосов
/ 20 декабря 2018

Пара изменений, вероятно, облегчит эту задачу.Основная проблема, я думаю, в том, что у вас есть проверка на «n» в цикле, но вы заново собираете результат в операторах if.

Вы можете переместить увеличение числа изотдельные операторы if и позволяют собирать ответы внутри цикла.

int min = 0;
int max = 100;

// loop while an incorrect guess
while (! correctGuess) {
  // do a binary search
  //  max and min are updated on each check
  int progNum = ((max - min) / 2) + min;

  // collect the response
  String n = JOptionPane.showInputDialog("Is " + progNum + " too high, too low, or correct?", " ");

  // cancel by user
  if (n == null) {
    break;
  }      

  // user made a guess
  ++count;

  if (n.equals("correct")) {
    OptionPane.showMessageDialog(null, "Yay! " + progNum + " was correct! It took the computer " + count + " guesses."); // correct guess, displays number of guesses
    correctGuess= true;  // computer guessed the correct number
    continue;  // program stops
  }
  else if (n.equals("too high")) {
    max = progNum - 1;
  }
  else if (n.equals("too low")) {
    min = progNum + 1;
  }
}

Редактировать: вы можете внимательно посмотреть, как генерируется следующее число догадок.Я бы подумал, что простой подход двоичного поиска будет более эффективным, чем выбор случайного числа в диапазоне.

Редактировать 2: Вы можете увидеть основной подход двоичного поиска по этой ссылке здесь .

0 голосов
/ 20 декабря 2018

Проблема в том, что вы никогда не обновляете.Возьмитесь за цикл while, когда вы спрашиваете, является ли он слишком высоким или слишком низким, вы сохраняете ответ пользователя в другой переменной.Вам нужно хранить ответы пользователей, как вы это делали в начале.

...