-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クラスのメンバー関数の召喚がplayer1について何も知らないことです。

プレーヤーへの参照を渡すか、プレーヤーをFieldクラスに追加する必要があります。これを最適に設計する方法は、フィールドの数、複数のプレーヤーが同じフィールドを使用できるかどうかなどによって異なります。

于 2012-09-15T23:34:57.437 に答える
0

あなたがやろうとしていることについては、グローバルへのアクセスを完全に避けてください。それらは必要ありません。適切な設計を行う際に邪魔になります。

OO 設計では、オブジェクトはそれ自体または他のオブジェクトを操作します。Fieldを操作したい場合は、 の引数として、または のコンストラクタの引数Playerとしてプレーヤーを渡します。モデル化しようとしているもののロジックによって異なります。さまざまなプレーヤーをフィールドに召喚できる場合は、プレーヤーを の引数として渡します。summon()Fieldsummon()

于 2012-09-16T12:31:47.607 に答える