Как лучше структурировать мои классы и свойства? - PullRequest
0 голосов
/ 27 сентября 2018

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

class GameState:
    def __init__(self, n_players):
        self.n_players = n_players
        self.players = []
        for player in range(self.n_players):
            self.players.append(Player(player))
        // other properties

    // other functions

class Player:
    def __init__(self, name):
        self.name = name
        self.building = Building()
        self.workers = 3
        // other properties

class Building:

    def __init__(self):
        self.worker = False

    def action(self, player):
        if self.worker == True:
            player.workers += 1

Но теперь, если я хочу, чтобы игрок использовал действие здания, я должен сделать что-то вроде ниже.Такое чувство, что я должен быть в состоянии структурировать вещи лучше, чтобы избежать необходимости передавать экземпляр класса Player в функцию действия Building.

game = GameState(4)
game.players[0].building.action(game.players[0])

Идея состоит в том, что у каждого игрока будет экземпляр Building.класс.

1 Ответ

0 голосов
/ 27 сентября 2018

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

class Building:
    def __init__(self, player):
        self.worker = False
        self.player = player

    def action(self):
        if self.worker == True:
            self.player.workers += 1

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

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