-1

我想知道如何获得在文件之间拆分的类以在我的主游戏循环中编辑变量。

例如,这里是我想要完成的一个非常基本的版本。

球员等级:

class Player():
    def __init__(self, name, field):
        self.name = name
        self.field = field
        self.health = 500
    def summon(self,card):
        self.field.summon(card)

字段类:

class Field():
    def __init__(self):
        self.playing_field = []
    def summon(self, card):
        self.playing_field.append(card)
        player1.health = 400

还有我的游戏文件:

from Player import Player
from Field import Field

player1_field = Field()
player1 = Player("Steve", player1_field)

test_card = ["Test Card", 300] # Name, Power
player1.summon(test_card)

这会引发错误:

NameError: global name 'player1' is not defined

在我的游戏中,我需要在文件之间拆分类,但我无法让它们相互交谈。我想知道如何声明我的播放器对象,以便可以从我的所有类中访问它们,这正在成为一个长列表。

如果您需要我编辑此问题,请说出来。提前致谢!

4

2 回答 2

0

将来我会提供完整的追溯。

Traceback (most recent call last):
  File "stuff.py", line 8, in <module>
    player1.summon(test_card)
  File "/Users/jvanvoorst/blah2/Player.py", line 7, in summon
    self.field.summon(card)
  File "/Users/jvanvoorst/blah2/Field.py", line 6, in summon
    player1.health = 400

问题是 Field 类成员函数 Summon 对 player1 一无所知。

您需要传入对播放器的引用或将播放器添加到 Field 类。如何最好地设计这取决于有多少场,多个玩家可以使用同一个场等。

于 2012-09-15T23:34:57.437 回答
0

对于您要执行的操作,请完全避免访问全局变量。您不需要它们,它们会妨碍制定正确的设计。

在 OO 设计中,对象操纵自己或其他对象。如果要Field操作,请将播放器作为 的参数或 的构造函数的Player参数传递。这取决于您尝试建模的逻辑:如果您可以将各种玩家召唤到场上,请将玩家作为.summon()Fieldsummon()

于 2012-09-16T12:31:47.607 回答