对于学校项目,我试图将棋盘游戏转换为Python游戏
我正在翻译的游戏是“股票代码”,它涉及买卖6只股票。可以玩的玩家数量是2-8。我制作一个可变玩家计数的方式是创建一个玩家类,并初始化一个玩家对象并在游戏开始时将其添加到一个列表中。
class player:
money = 5000
stocks = {'Gold': 0, 'Tech': 0, 'Oil': 0, 'Grain': 0, 'Industry': 0, 'Bonds': 0}
我使用
创建列表for i in range(0, playersTotal):
newPlayer = player()
playerList.append(newPlayer)
问题在于,当玩家买卖股票并调整价值时,请说:(假设玩家0有0金币)
playerList[0].stocks['Gold'] += 1000
每个玩家的每个字典都以相同的方式更新
print(playerList[1].stocks['Gold'])
>>>1000
我不知道为什么字典会更新列表中的所有玩家对象,因为当调整money属性时它会保持独立:(如果两个玩家都有0钱)
playerList[0].money += 1000
print(playerList[1].money)
>>> 0
如何将字典分开?
答案 0 :(得分:3)
那是因为您的stocks
是static
,您应该将其作为instance
变量而不是static
变量,请尝试这样做:
class player:
def __init__(self):
self.money = 5000
self.stocks = {'Gold': 0, 'Tech': 0, 'Oil': 0, 'Grain': 0, 'Industry': 0, 'Bonds': 0}
由于您的stocks
变量为static
,因此所有实例都使用相同的stocks
,因此当您从任何实例更新其值时,它会针对所有实例进行更新实例,因为变量是为所有实例共享的。
<强>输出强>
>>> for i in range(0, 10):
... newPlayer = player()
... playerList.append(newPlayer)
...
>>> playerList[0].stocks['Gold'] += 5000
>>> playerList[0].stocks['Gold']
5000
>>> playerList[1].stocks['Gold']
0