Два метода построения и отображения комнат в текстовой RPG-игре с использованием python - PullRequest
0 голосов
/ 09 марта 2020

Я очень неопытный и нашел, что эти два метода для реализации комнат в ролевых играх похожи на создание. Id, как некоторые входные данные, какой метод превосходит другой. Мне просто интересно, с какими головными болями я могу столкнуться с каждым. У них обоих, кажется, что-то есть для них. Я просто не уверен в использовании функций таким образом, я не мог найти способ сделать это с классами. Любые входные данные были бы хорошими, спасибо.

Я предпочитаю, как распечатывает этот.

   def lobby():
    #exits
    N = 'n[lounge]'
    S = 's[airlock]'
    E = 'e[wall]'
    W = 'w[wall]'
    #room description
    print('A quiet and empty lobby')
    print('There is a dusty desk in front of a bad painting.')
    print('exits-', N, S, E, W)
    d = input('go which direction?')
    if d == 'n':
        lounge()
    else:
        wall()
def wall():
    print('You cant go that way')
        #room function
def lounge():
    global lounge_action
    N = 'n[wall]'
    S = 's[lobby]'
    E = 'e[wall]'
    W = 'w[wall]'
    #Room description
    print('A few people are having drinks here.')
    #Things in the room
    print('The bartender says "Hello".')
    print('exits-', N, S, E, W)
    d = input('go which direction?')
    if d == 's':
        lobby()
    else:
        wall()
def start():
    lobby()

d = 's'
while d != 'quit':
    start()

И это другой вариант, который я видел.

rooms = {
'lobby': {
        'name': 'an empty lobby',
        'north': 'lounge',
        'south': 'airlock',
        'text': 'There is an empty desk in the room.'
                'The floors are made of cold metal.' },
'lounge': {
        'name': 'a quiet lounge',
        'south': 'lobby',
        'text': 'The bartender asks what you want.'},
'airlock':{
    'name': 'a cold landing pad',
    'north': 'lobby',
    'text': 'there is a ship parked here'
}

        }
directions = ['north', 'south', 'east', 'west']
current_room = rooms['lobby']
d = 'lobby'

while d != 'quit':
    print(current_room)
    d = input('\nWhat do you do?')
    if d in directions:
        if d in current_room:
            current_room = rooms[current_room[d]]
        else:
            print('Cant go that way')

Ответы [ 2 ]

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

"Я не мог найти способ сделать это с классами."

Способ, которым вы могли бы сделать это с классом (и лучшее решение IMHO), состоит в том, чтобы использовать класс для создания шаблона для информация, используемая в каждом местоположении, затем класс для каждого местоположения.

class Room:
    def __init__(self, name, exits, description):
        self.name = name
        self.exits = exits
        self.description = description

class Lobby(Room):
    def __init__(self):
        exit_list = {"north":Lounge, "south":Airlock}
        super().__init__("an empty lobby", exit_list, "There is an empty desk in the room.\nThe floors are made of cold metal.")

class Lounge(Room):
    def __init__(self):
        exit_list = {"south":Lobby}
        super().__init__("a quiet lounge", exit_list, "The bartender asks what you want.")

class Airlock(Room):
    def __init__(self):
        exit_list = {"north":Lobby}
        super().__init__("a cold landing pad", exit_list, "There is a ship parked here")

Затем, чтобы изменить код, который вы имеете во втором примере, чтобы реализовать это:

def main():
    current_room = Lobby()
    d = ""
    while d != 'quit':
        print(current_room.name)
        d = input('\nWhich way do you want to go?\n')
        if d in current_room.exits:
            current_room = current_room.exits[d]()
        else:
            print('Cant go that way')

Примечание: Переменная 'exit_list' - это словарь, но я взял artisti c лицензию.

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

Насколько я понимаю из вашего вопроса, вы хотели бы знать, какая реализация базовой c RPG 'лучше'. Конечно, лучше это что-то субъективное, но я бы предпочел вторую реализацию.

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

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

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

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

Если вы предпочитаете следовать учебнику, ознакомьтесь с этим удивительным гидом !

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