Создание основного цикла




Написание игры Висилица

Знакомство с игрой Висилица

Втайне от пользователя компьютер выбирает какое-либо слово, и игрок должен попробовать отгадать его, высказывая свои предположения побуквенно. Каждый раз, когда игрок ошибается, компьютер дорисовывает на экране изображение фигурки под виселицей. Если в отведенное количество попыток игроку не удается отгадать слово, то повешенный гибнет.

Настройка программы

Начнем сначала. Как обычно, код открывают комментарии, в которых изложена суть программы. Затем я импортировал модуль random, который понадобится для случайного выбора слова из последовательности.

# Виселица

#

# Классическая игра "Виселица". Компьютер случайным образом выбирает слово.

# которое игрок должен отгадать буква за буквой. Если игрок не сумеет

# отгадать за отведенное количество попыток. на экране появится фигурка повешенного.

# Импорт модуля

import random

 

Создание констант

Хотя приводимый далее код растянулся на несколько страниц, он отвечает всего лишь за создание трех констант. Сначала я создал кортеж, самый большой из тех, что вы когда-либо видели: последовательность из восьми элементов, каждый из которых - строка в тройных кавычках - сам охватывает 12 строк. Эти строки - псевдографические картинки с изображением виселицы. От картинки к картинке все полнее проявляется фигурка повешенного. При каждом следующем неправильном ответе игрока будет выведена очередная картинка. Восьмое по счету изображение - последнее: на нем повешенного уже не вернуть к жизни. Если на экране появляется эта картинка, игра заканчивается. Псевдографика в моей программе хранится в кортеже HANGMAN (название переменной набрано прописными буквами, потому что это константа).

# константы HANGMAN = (""" ------ | | | | | | | | |----------""",""" ------ | | | O | | | | | |----------""",""" ------ | | | O | -+- | | | | | ----------""",""" ------ | | | O | /-+- | | | | | ----------""",""" ------ | | | O | /-+-/ | | | | | ----------""",""" ------ | | | O | /-+-/ | | | | | | ----------""",""" ------ | | | O | /-+-/ | | | | | | | | | ----------""",""" ------ | | | O | /-+-/ | | | | | | | | | | | ----------""")

 

Затем я создал константу, значение которой - максимальное количество ошибок, дозволенных игроку:

MAX_WRONG = len(HANGMAN) - 1

 

Ошибок может быть ровно на одну меньше, чем элементов в кортеже HANGMAN. Это обусловлено тем, что изображение пустой виселицы есть на экране уже тогда, когда ни одной попытки отгадать слово игрок еще не израсходовал. Поэтому в HANGMAN восемь псевдографических картинок, а игрок может ошибиться семь раз, прежде чем игра будет окончена. Здесь же я создал кортеж, из которого компьютер будет случайным образом выбирать слово для отгадывания. В него входят не очень широко известные английские слова; не бойтесь исправить код и создать свой собственный список.

WORDS = ("OVERUSED", "CLAM", "GUAM", "TAFFETA", "PYTHON")

 

Инициализация переменных

После этого я инициализировал переменные. С помощью функции random. choiсе() я выбрал случайное слово из кортежа WORDS и сделал его значением переменной word.

# инициализация переменных word = random.choice(WORDS) # слово для отгадывания

 

Еще одну строку - so_far - я создал для представления букв, уже отгаданных игроком. Начальный вид этой строки - набор дефисов, по одному на каждый символ. После того как игрок правильно отгадывает букву, дефис в той позиции (или позициях), где эта буква входит в слово, заменяется буквой.

so_far = "-" * len(word) #по одному дефису на каждую букву. которую надо отгадать

 

Я создал переменную wrong с начальным значением 0. Она будет содержать число, определяющее количество ошибок, допущенных игроком при отгадывании:

wrong = 0 # количество ошибок, которые сделал игрок

 

Наконец, каждая очередная буква, введенная игроком, попадает в список used. В самом начале этот список пуст:

used = [] # буквы, которые игрок уже предлагал

 

Создание основного цикла

Я создал цикл, работа которого продолжается до тех пор, пока игрок не совершил слишком много ошибок или не отгадал все буквы в слове:

print ("Дoбpo пожаловать в игру 'Виселица'. Удачи вам!") while wrong < MAX_WRONG and so_far!= word: print (HANGMAN[wrong]) print (" \n Bы уже предлагали следующие буквы: \n ", used) рrint(" \n Отгаданное вами в слове сейчас выглядит так: \n ", so_far)

 

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

Получение ответа игрока

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

guess = input(" \n\n Введите букву: ")guess = guess.upper() while guess in used: print ("Bы уже предлагали букву", guess) guess = input(" \n\n Bвeдитe букву: ") guess = guess.upper()used.append(guess)

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2021-02-06 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: