Случайные значения в экземпляре класса, которые не сохраняются - PullRequest
0 голосов
/ 13 октября 2018

Я новичок в python и хочу написать простую текстовую приключенческую игру.Игрок заходит в таверну и общается с гостями.Действие игры разворачивается в фэнтезийной обстановке, где проводятся несколько гонок.Я хочу случайным образом генерировать каждого гостя, а затем взаимодействовать с ними в таверне.Вот мой упрощенный код:

import random
class guest:
    def __init__(self,race,name,mood):
        self.race = race
        self.name = name
        self.mood = mood

def humannames():
    human_names_choice = ('Mark','Joe','Bill')
    return random.choice(human_names_choice)

def orcnames():
    orc_names_choice = ('Ug','Orok','Ushnar')
    return random.choice(orc_names_choice)

def humanmoods():
    human_moods_choice = ('entertained','disgusted','pleased')
    return random.choice(human_moods_choice)

def orcmoods():
    orc_moods_choice = ('drunk','pissed off','angry')
    return random.choice(orc_moods_choice)

guest_human = guest('human',humannames(),humanmoods())
guest_orc = guest('orc',orcnames(),orcmoods())

allguests = [guest_human,guest_orc]
guest1 = random.choice(allguests)

print('You meet a ' + guest1.race + ' named ' + guest1.name + '. He seems ' + guest1.mood) 

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

Логично, что guest1.name и guest.race никогда не меняются.Если я напечатаю последний оператор 5 раз подряд, я получу те же результаты, потому что значения установлены в начале.Это хорошо для меня, потому что эти вещи никогда не должны меняться.С guest1.mood, однако, это сложнее.У гостя в таверне не всегда одинаковое настроение, оно меняется со временем.

Вопрос: Как я могу сохранять неизменными guest1.name и guest.race, но получать новое случайное настроение каждый раз, когда игрок встречает того же гостя снова позже?

Заранее спасибо!

1 Ответ

0 голосов
/ 13 октября 2018

Вы можете добавить change_mood метод к вашему guest классу.Это означает, что вы можете изменить настроение в любое время.

class guest:
    def __init__(self,race,name,mood):
        self.race = race
        self.name = name
        self.mood = mood

    def change_mood(self):
        self.mood = random.choice(('entertained','disgusted','pleased'))

Затем вы можете изменить настроение следующим образом.

print('You meet a ' + guest1.race + ' named ' + guest1.name + '. He seems ' + guest1.mood) 
guest1.change_mood()
print('You meet a ' + guest1.race + ' named ' + guest1.name + '. He seems ' + guest1.mood)

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

class Guest:
    def __init__(self):
        self.name = random.choice(self.names)
        self.mood = random.choice(self.moods)

    def change_mood(self):
        self.mood = random.choice(self.moods)

class Human(Guest):
    race = 'human'
    names = ('Mark', 'Joe', 'Bill')
    moods = ('entertained', 'disgusted', 'pleased')

class Orc(Guest):
    race = 'orc'
    names = ('Ug', 'Orok', 'Ushnar')
    moods = ('drunk',' pissed off', 'angry')

Затем вы можете использовать классы следующим образом:

guest1 = Orc()
print('You meet a ' + guest1.race + ' named ' + guest1.name + '. He seems ' + guest1.mood)

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

class Guest:
    races = {
        'human': {
            'names': ('Mark', 'Joe', 'Bill'),
            'moods': ('entertained', 'disgusted', 'pleased'),
        },
        'orc': {
            'names': ('Ug', 'Orok', 'Ushnar'),
            'moods': ('drunk',' pissed off', 'angry'),
        },
    }

    def __init__(self, race):
        self.race = race
        self.name = random.choice(self.races[race]['names'])
        self.mood = random.choice(self.races[race]['moods'])

    def change_mood(self):
        self.mood = random.choice(self.races[self.race]['moods'])

Кроме того, вместо того, чтобы хранить данные гонки в классе, вы можете сохранить их в отдельном файле JSON или в другом месте, изатем загрузите данные из файла методом __init__.

...