Python: получить предыдущую запись в списке (относительно переменной, назначенной текущей позиции в списке) - PullRequest
2 голосов
/ 13 марта 2020

Я собираю очень простую текстовую игру в Python, которая содержит 5 комнат, между которыми игрок может перемещаться.

Игрок начинает играть в центральной комнате, gameMap [2].

Ниже приведен код, который указывает местоположение игрока.

gameMap = ['room0','room1','room2','room3','room4']

playerLocation = gameMap[2]

Теперь предположим, что игрок хочет переместиться влево. Это означает, что я должен присвоить playerLocation gameMap[1].

playerLocation = gameMap[1]

Всего с 5 комнатами это можно сделать достаточно легко. Но для целей масштабирования я хочу иметь возможность назначить playerLocation «текущей записи списка -1», предполагая, что он находится в диапазоне.

Эта инструкция будет выполнять назначения следующим образом:

, если playerLocation - gameMap [4], playerLocation = gameMap [3]
, если playerLocation - gameMap [1], playerLocation = gameMap [0]

Я рассмотрел возможность использования next (gameMap), но, похоже, он представлен 2 Вопросы:
1) Это не позволяет мне ссылаться на текущее местоположение игрока, так как оно должно начинаться с gameMap [0]
2) Кажется, оно не работает в обратном порядке, а там не работает похоже на функцию previous () из-за архитектуры Python. (извините, если у меня здесь неправильная терминология:).

Я искал везде, но, похоже, не могу найти никакого способа сделать это. Является ли это возможным?

Ответы [ 3 ]

1 голос
/ 13 марта 2020

Вы пытались просто иметь какой-то индекс для позиции игроков? Затем, если игрок находится в первой комнате, индекс равен 0, например, и вы можете сделать:

index = index + 1 if index + 1 < len(gameMap) else index

при движении вперед и

index = index - 1 if index > 0 else index

при движении назад.

1 голос
/ 13 марта 2020

В этом случае вы можете использовать переменную, которая используется в качестве точки, в которой находится игрок; например:

current = 0

, затем выполните все необходимые вычисления и позвоните playerLocation = gameMap[current]

Если вы хотите go вернуться на уровень, вы можете просто сделать :

current -= 1

playerLocation = gameMap[current]

Я не уверен, что пропустил часть вашего вопроса, поскольку это кажется относительно простым; поправьте меня, если я неправильно понял.

0 голосов
/ 13 марта 2020

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

Если вы хотите сохранить простоту, сделайте свою карту словарем. Там вы также можете содержать переходы между состояниями. При желании вы можете добавить под-словарь, который содержит, возможно, определяемые состоянием c доступные действия и соответствующие переходы состояний.

Не проверенный пример:

map = {
    'room0': {'next': 'room1', 'prev': 'room4', 'description': '...'},
    'room1': {'next': 'room2', 'prev': 'room0', 'description': '...'},
    'room2': {'next': 'room3', 'prev': 'room1', 'description': 'The entrance'},
    'room3': {'next': 'room4', 'prev': 'room2', 'description': '...'},
    'room4': {'next': 'room0', 'prev': 'room3', 'description': '...'},
}
current_state = 'room2'

# transitions be like
next_state = map[current_state]['next']
prev_state = map[current_state]['prev']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...