2012-09-15 41 views
-1

我想知道如何獲得在文件之間分割的類來編輯我的主遊戲循環中的變量。Python:多文件類

例如,這裏是我試圖完成的一個非常基本的版本。

Player類:

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

Field類:

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 

我已經在我的遊戲中得到了一點,我需要在文件之間分割類,但是我在使它們彼此交談時遇到了麻煩。我想知道如何聲明我的播放器對象,以便可以從我的所有類中訪問它們,這正在變成一個長長的列表。

如果你需要我編輯這個問題,請這麼說。提前致謝!

+0

這不是好的課堂設計。您已將'Field'永久綁定到'Player'的單個實例。爲什麼不讓'Field'把玩家當成一個變量,例如'Field.add_player'? – nneonneo

+2

你的問題不是導入的概念,而是關於合理的面向對象設計和實現的問題。你正在編程一些東西,希望它不會對你正在做什麼有合理的想法而工作。不是試圖理解你想做什麼,而是在類方法中設置player1.health = 400是毫無意義的廢話。 –

+0

我在編程時絕對沒有想到,編程方面我很新,所以我很抱歉,如果這看起來浪費你的時間。我的目標是擁有2+球員,全部擁有Field類的關聯實例和UsedCard類等。我想要能夠調用Player實例的方法,例如player1變量。健康的事情只是爲了證明我不知道如何調用player1的任何方法或setter方法(我認爲這就是名字)。我的真正用處是我有一個Input Handler類,它需要調用方法player1或2 –

回答

0

對於你想要做的,避免訪問全局。你不需要他們,他們會設法找出正確的設計。

在OO設計中,對象操縱自己或其他對象。如果你想讓Field操作Player,請將玩家作爲參數summon()或作爲Field的構造函數的參數傳遞。這取決於你試圖建模的邏輯:如果你可以召喚不同的玩家到場上,傳遞玩家作爲參數summon()

+0

謝謝,這幫助我掌握了OO設計。有沒有辦法讓我更私人地給你發消息?就我的設計而言,我知道自己在寫作方面? –

+0

對不起,但我沒有那種時間。但是,如果你對你制定的問題進行一些思考,很多其他人都願意提供幫助。 – alexis

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類。如何最好地設計這取決於有多少領域,可以有多個球員使用相同的領域,等等。