我正在尝试使用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 action函数。
game = GameState(4)
game.players[0].building.action(game.players[0])
这个想法是,每个玩家都有一个Building类的实例。
答案 0 :(得分:0)
在不知道游戏确切格式的情况下很难提出其他建议。如果每个建筑物一次只与一个玩家相关联,则可以将其添加到初始化中并直接引用。
class Building:
def __init__(self, player):
self.worker = False
self.player = player
def action(self):
if self.worker == True:
self.player.workers += 1
或者,如果每个玩家只会拥有一个与之关联的建筑物,那么动作功能应该应该在玩家类别中,而不是建筑物中。