Простой подход к этому состоит в том, чтобы создать структуру данных для хранения всех игровых локаций, а затем сохранить позицию игрока, которая является своего рода индексом в этой структуре. Я пытаюсь сделать этот ответ действительно простым, поэтому я опускаю более сложные детали, которые, возможно, могут сделать это более эффективным.
Может быть, начать с простого списка мест, и целочисленный индекс в этом списке:
# index 0 index 1 index 2 index 3
locations = [ "Rocky End of The Beach", "On The Beach", "Edge of The Forest", "In The Forest" ]
player_location = 0
Итак, на старте игроку может быть показано locations[ player_location ]
, что будет "Rocky End of The Beach".
Аналогично locations
, возможно, может быть список объектов, которые лежат в каждом месте:
objects = [ [ ], [ "Knife" ], [ "Coconut", "Banana" ], [ ] ]
Очевидно, у нас есть список списков, поэтому, если player_location
было 2
, доступные объекты были бы [ "Coconuts", "Bananas" ]
Итак, чтобы показать описание местоположения игроку, теперь это комбинация местоположения и объектов:
def showLocation( player_location ):
global locations, objects
# show the location description
print( locations[ player_location ], end='. ' )
# show the location's objects
if ( len( objects[ player_location ] ) > 0 ):
print( "There is: " )
for item in objects[ player_location ]:
print( item, end=", " )
print("") # end-of-line
Итак, на позиции «пляж» (player_location
is 1
), этот текст местоположения станет:
На пляже. Существует: Нож
Еще один список выходов может контролировать, каким образом игрок может двигаться из текущего местоположения, и другой список, указывающий, какой «ключ» необходим. Поэтому, если игрок находится в местоположении 0
, он может перейти к 1
= пляж, 2
= край леса. Если игрок «на пляже», он может вернуться только к индексу = 0 (каменистый конец) и т. Д. c.
exits = [ [ 1, 2 ], [ 0 ], [ 0, 2 ], [ 1 ] ] # numbers of joined locations
keys = [ [ ], [ ], [ ], [ "Knife" ] ] # objects needed to enter
keys
указывает, какой предмет должен быть в владение до того, как им позволят войти в это место. Так что для первых 3 локаций, объект не нужен. Но чтобы войти в лес (доступ к которому можно получить только через «край леса»), игроку необходимо иметь «Нож».
Система простых списков, подобных этой, может определять набор правил о вашем местоположении. , тогда тот же самый код может попросить у игрока команды. Команда сравнивается с местоположением. Так, например, «получить банан» работает только в том случае, если в списке objects
есть элемент «банан» с этим конкретным индексом player_location
.
Начните с простого набора данных правил, возможно, даже только названия локаций, и просто продолжайте добавлять к нему все новые и новые функции.
Написание псевдокода:
# Do Forever:
# Show player the location description
# Get input from player
# if a movement command
# if player has key-object to move, or no object needed
# change the `player_location` index
# else
# Show "You need object XXX" to player
# if a get/drop command and item valid
# change the player & location objects list