Игра «Виселица»

«Виселица» — игра на угадывание слов. Компьютер загадывает слово. Игроку известны первая и последняя буквы, а также количество букв. Игрок угадывает слово по буквам. Если буква есть в слове, то открываются все ее вхождения. Если буквы нет, то к виселице дорисовывается часть человека. Если слово открыто полностью, игрок побеждает. Если набрано максимальное количество ошибок и человек на виселице нарисован полностью, игрок проигрывает.

Пример интерфейса игры:

  +---+
  |   |
  O   |
 /|\  |
 / \  |
      |
=========
sh..p
.bc.efg.ijk.m.o.qrstuvwxy.
You lose

В примере мы видим последнюю стадию — игрок не смог угадать слово и проиграл. Перед нами:

  1. Полностью нарисованный человек.

  2. Слово, в котором часть букв закрыто и отображается точками.

  3. Алфавит, в котором вместо использованных букв отображаются точки.

Перед началом работы нужно ответить на вопросы:

  1. Какие структуры данных будут полезны при реализации игры?

  2. Какие подзадачи можно выделить, глядя на пример интерфейса?

  3. Посмотрите на заготовку кода. Расскажите, какие объекты уже созданы. Назовите их типы.

После реализации основной функциональности проверьте, как приложение реагирует на некорректный ввод.

Примеры некорректного ввода:

  1. Пользователь вводит букву в верхнем регистре.

  2. Пользователь вводит не букву (цифру или спецсимвол).

  3. Пользователь многократно вводит уже использованную букву (присутствующую или отсутствующую в слове).

  4. Пользователь вводит несколько букв сразу.

Как вы считаете, какое поведение было бы ожидаемым в данном случае? Доработайте приложение таким образом, чтобы оно было более устойчиво в некорректному вводу.

Доработайте приложение так, чтобы у пользователя была возможность назвать слово целиком.

Заготовка: hangman.py

HANGMANPICS = ['''
  +---+
  |   |
      |
      |
      |
      |
=========''', '''
  +---+
  |   |
  O   |
      |
      |
      |
=========''', '''
  +---+
  |   |
  O   |
  |   |
      |
      |
=========''', '''
  +---+
  |   |
  O   |
 /|   |
      |
      |
=========''', '''
  +---+
  |   |
  O   |
 /|\  |
      |
      |
=========''', '''
  +---+
  |   |
  O   |
 /|\  |
 /    |
      |
=========''', '''
  +---+
  |   |
  O   |
 /|\  |
 / \  |
      |
=========''']


words = ('ant baboon badger bat bear beaver camel cat clam cobra cougar '
         'coyote crow deer dog donkey duck eagle ferret fox frog goat '
         'goose hawk lion lizard llama mole monkey moose mouse mule newt '
         'otter owl panda parrot pigeon python rabbit ram rat raven '
         'rhino salmon seal shark sheep skunk sloth snake spider '
         'stork swan tiger toad trout turkey turtle weasel whale wolf '
         'wombat zebra ').split()


import random
import string


def main():
    pass


if __name__ == '__main__':
    main()

Домашнее задание

Зарегистрироваться в сервисе https://checkio.org/. Решать задачи в своем темпе. На занятиях сообщать, какие задачи решены.