Они еще не умерли!

Очищая несколько старых Jump Drives, я обнаружил старые проекты из первых дней учебы в колледже. Из-за некоторого любопытства я решил отправиться в путешествие по переулку памяти. Одним из проектов была текстовая игра на Python. Маленькая загадочная игра, в которой используются случайные числа и ввод данных пользователем. Хотя погружение в Python было не очень сложным, в то время это был интересный проект, и я подумал, что он станет хорошим постом для тех, кто хочет начать простую первую игру. Он также учит небольшим навыкам, которые будут полезны для любых других текстовых игр, которые вы, возможно, захотите написать.

Написание введения

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

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

def intro():
     print("Last night, you went to sleep in your own home.")
     print("Now, you wake up to an unfamiliar environment.")
     print("As your eyes flutter open, darkness greets you. Your surroundings are blind to you.")
     print("You are sat on a bed, and a wall hugs your back. Beside you is a table, whose outline you can vaguely determine.")
     print("1 - to check under the bed")
     print("2 - to check the table")

Далее мы будем читать входные данные. Однако, поскольку пользователи не обязательно соблюдают правила ввода цифр, нам необходимо проверить ввод. Нам нужно убедиться, что цифры - это целые числа, что это числа - один и два, и что значение на самом деле является целым числом.

Для этого мы будем тестировать в цикле. Мы «попробуем» преобразовать ввод в целое число, и если это не сработает, мы предложим пользователю ввести целочисленное значение. С другой стороны, если это целое число, отличное от одного или двух, это побуждает пользователя выбрать одну из этих цифр:

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

print("")
print("The note reads:")
print("My dearest participant,")
print(" If you notice, the door contains a padlock with a three digit code.")
print(" You will find this code hidden within the room, and must solve it. You shall find three numbers, and must order them correctly.")
print(" I wish you the best of luck.")
print("Sincerely, your gracious host.")
print("")
print("You examine the room and see:")

Это был последний код для вводного файла. Далее нам нужно будет настроить меню.

Написание меню

Для этого файла меню нам нужно будет передать список элементов для выбора. Мы также отправим пользователю подсказку. В цикле «for» мы распечатываем каждый элемент этого списка. Как только они у нас появятся, мы будем использовать цикл «while» для проверки ввода, как мы это делали во вводном файле. Опять же, мы предложим пользователю скорректировать ввод в соответствии с ожидаемым списком результатов.

Теперь, когда у нас есть файл меню, мы можем написать следующий файл, который будет содержать элементы внутри меню.

Создание файла searchItem

В этот файл мы должны включить все остальные элементы, которые будут задействованы в меню. Цель игры - найти скрытые цифры кода замка, поэтому в меню будут включены все элементы, которые можно найти, а также дверь с замком. Сначала мы объявим Door, куда нам нужно будет передать код, чтобы проверить, правильно ли игрок угадает. Введенный код потребует проверки каждой цифры, как и в последних двух файлах. Поскольку игра будет в цикле, нам также нужно будет разорвать цикл, отправив положительное подтверждение, если код правильный, и что-то вроде кода для продолжения цикла, если он неверен.

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

Окно было первым выбором. Как видите, большая часть кода основана на тексте, поэтому его можно изменить на все, что захотите. Следующий код будет обрабатывать выбор рюкзака.

Текст может быть сколь угодно простым или информативным. Теперь займемся секцией вазы.

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

Мы примерно наполовину закончили мой выбор предметов. Я решил сделать девять из них, но вы можете сделать меньше, если хотите.

Некоторые варианты были определенно более информативными, чем другие, но это радость от творчества.

Обратите внимание: чтобы несколько кодов не использовали одно и то же место, существует заранее определенный список, в котором можно найти каждый сегмент кода.

Почти там осталось всего два предмета. Он может содержать третий сегмент кода, но не второй или первый, как объяснялось ранее.

Это будет наш последний предмет:

Теперь мы будем готовы создать последний файл, который будет основным файлом.

Запись основного файла

В этот файл мы импортируем все остальные, а также создадим случайный код и объявим игру. Первое, что нам нужно сделать, это импортировать модуль random:

import random

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

from introduction import intro
from menu import menu
from searchItem import Door, Window, Backpack, Vase, Bucket, Painting, JewelryBox, Rug, Mirror, Bookshelf

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

Теперь мы готовы начать игру:

intro()

Наконец, мы запускаем игровой цикл. Он будет работать до тех пор, пока пользователь не найдет правильный код или не угадает его правильно. Чтобы увидеть выбор игрока, вызовите меню и поместите его в переменную. Затем выделение находится в более крупном разделе if / elif / else, в котором мы можем отправить правильные данные для пункта меню. Нам также нужно будет отправить номер выбора и местоположение кода, чтобы их можно было проверить, если этот элемент находится в правильном месте. Также нам нужно отправить сегмент кода, если он правильный. Все, что не связано с предметом, будет отправлено к двери, чтобы проверить замок. Если был возвращен правильный код возврата, указывающий, что игрок ввел правильный код замка, мы разорвем цикл. В противном случае игра продолжается.

И это последний наш собственный текстовый игровой код.

Пора поиграть в игру

Заключение

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

Читайте все мои статьи бесплатно с помощью моего еженедельного информационного бюллетеня, спасибо!

Хотите читать все статьи на Medium? Станьте участником Medium сегодня!

Ознакомьтесь с моими недавними статьями.