Скачайте программу (правой кнопкой мышки на ссылке, выберите "Сохранить как" и сохраните готовым файлов, не стоит открывать и копипастить текст).
Она реализует игру "Угадай число". В этой игре компьютер загадывает число от 1 до 50, а пользователь может предлагать гипотезы (например, число 43), программа ответит - загаданное число больше, меньше или равно тому, которое предложил пользователь. Задача игрока - как можно быстрее угадать загаданное число.
Эту программу можно запустить и поиграть.
Выполните последовательно следующие задания:
do_game()
есть закомментированная строчка #print_debug_info(max_allow_number, secret_number, checks, check_res)
.
Если убрать знак решеточки, то строчка будет выполняться, и печатать на каждом ходе отладочную информацию - это может помочь в процессе отладки программы
понимать, правильно ли все работает. Хотя, конечно, предполагается, что в финальной версии игры эта строчка закомментирована.
Собственно, задание: попробуйте раскомментировать эту строчку, посмотрите, что произойдет, закомментируйте обратно.
make_suggest
, которая получает всю информацию, которая есть у пользователя - какие предыдущие ходы делались,
какие ответы на них были даны, а какое максимальное число может быть загадано. Сейчас эта функция возвращает 0, и подсказка не печатается. Если функция
будет возвращать какое-то натуральное число, то подсказка будет печататься (посмотрите, как это будет, например, поменяв 0 в функции на что-то другое).
Сделайте так, чтобы эта подсказка генерировалась более-менее разумно по какому-то алгоритму и подсказывала пользователю, о каком числе ему стоит сейчас спросить.
make_cheat
, а ее вызов в основном теле игры пока закомментирован. Уберите комментарий с ее вызова (пока что все останется по-прежнему).
А теперь напишите код функции так, чтобы компьютер, который задумывает число, мог "читерить" - менять задуманное число в процессе игры, но так,
чтобы новое задуманное число не противоречило всем уже данным к этому моменту ответам и правилам игры, но при этом игра длилась бы как можно дольше.
Например, игра могла бы быть устроена так:
Компьютер выбирает число от 1 до 50, и загадывает 43. Пользователь проверяет число 25, и узнает, что загаданное число больше Пользователь проверяет число 43 (случайно угадал, нравится ему это число), но компьютер вместо ответа "угадал", читерит, и перезагадывает число, например, на 35. И говорит "меньше". Пользователь говорит 36, компьютер говорит "меньше". Пользователь говорит 34, компьютер волнуется, и перезагадывает число на 27, говорит "меньше". Пользователь говорит 27, компьютер перезагадывает на 26, и говорит "меньше". Пользователь говорит 26, компьютеру некуда деваться (потому что про 25 он уже говорил, что больше, а про 27 - что меньше), и он говорит "угадал".