Язык программирования Python

Курс IT-Академии Сухорукова

Апрель-июнь 2020

Этот курс закончился

Задание. Игра «21 палочка»

Разработать текстовую игру «21 палочка». Текстовая игра в данном случае — это игра, с которой игрок взаимодействует через текстовую консоль или терминал.

Правила игры

Играют двое. На столе находятся 21 палочка (вместо палочек могут быть любые предметы). Ходы делаются игроками по очереди. За один ход игрок берёт себе со стола одну, две или три палочки. Игрок, который возьмёт последнюю палочку со стола, проигрывает. Пропускать ход нельзя.

Реализация

Игра идёт между человеком и вашей программой. В начале игры программа сообщает, что на столе 21 палочка. Первый ход делает всегда человек. Ход человека заключается во вводе числа палочек, которые человек хочет взять (от 1 до 3). Программа в ответ сообщает, сколько палочек осталось, затем решает, сколько палочек берёт она, после чего сообщает, сколько палочек взяла и сколько осталось. Когда игрок (человек или программа) берёт последнюю палочку, программа сообщает, кто победил и прекращает работу.

Программа может решать, сколько палочек она берёт, любым способом. Например, брать случайное число палочек.

Замечания

  1. Необходимо предусмотреть обработку неправильного ввода: человек может ввести как неправильное количество палочек (меньше 1 или больше 3), так и вообще не число. В такой ситуации нужно сообщить человеку, что он не прав, и повторить ввод. Ни в коем случае нельзя допускать, чтобы программа делала свой ход после неправильного ввода.

  2. Проиграть может как человек, так и программа. Очевидно, что программа проигрывает, если перед её ходом осталась ровно одна палочка. Человек проигрывает в аналогичной ситуации. Однако человек (да и программа тоже) проигрывает, если он взял все оставшиеся палочки. Например, осталось 2 палочки, и человек в свой ход вводит число 2. Это немедленный проигрыш. Необходимо предусмотреть и такую ситуацию.

  3. Программа (и человек) не должна в свой ход брать палочек больше, чем осталось на столе. Это касается ситуации, когда на столе осталось две палочки. Если программа решит при этом взять три, то на столе останется минус одна палочка?

  4. Существует беспроигрышный алгоритм игры, который обеспечивает победу второго игрока (то есть программы) в любой ситуации. Попробуйте разгадать его (необязательно).

Пример работы

Ниже текст, который вводит пользователь, обозначен вот так.

Палочек осталось: 21
Сколько берёте? 2
Палочек осталось: 19
Я беру: 3
Палочек осталось: 16
Сколько берёте? 8
Можно брать 1, 2 или 3 палочки.
Сколько берёте? 1
Осталось палочек: 15

Осталось палочек: 2
Сколько берёте? 1
Осталось палочек: 1
Я беру: 1
Осталось палочек: 0
Вы выиграли.

Примерный алгоритм

  1. Количество палочек = 21
  2. Вывести количество палочек
  3. Спросить пользователя, сколько палочек он берёт
  4. Если пользователь ввёл правильное число, то пункт 5, иначе вернуться на пункт 3
  5. Вычесть из количество палочек введённое число
  6. Сообщить, сколько палочек осталось
  7. Если осталось 0 палочек, сообщить, что пользователь проиграл и закончить работу
  8. Решить, сколько палочек берёт программа
  9. Сообщить, сколько палочек берёт программа
  10. Вычесть из количества палочек это число
  11. Сообщить, сколько палочек осталось
  12. Если осталось ноль палочек, сообщить, что пользователь выиграл и закончить работу
  13. Вернуться на пункт 3