2017-04-30 47 views
0

我真的不確定我是否正確地攻擊了這個方法,但是我使用networkx製作了一個圖來在我正在工作的遊戲中使用地圖上。遊戲有效,但現在它沒有定位系統。我在一個類中創建了圖形對象,我希望類單元格繼承圖形'G',以便我可以將它分配給地圖變量。我終於知道它不發送錯誤,但是當我打印地圖變量時,它不打印圖形。 我如何知道G是否分配給地圖變量,這是做這件事的最好方法?我樂於接受建議。使用父類中的networkX圖作爲另一個類中的變量

class Graph(BaseGameEntity): 
def __index__(self): 
    G = nx.Graph() 
    G.add_edges_from([(1,2),(2,3),(3,4),(4,5),(5,6),(6,7),(7,8),(6,9),(9,10),(10,11), 
      (11,12),(10,13),(13,14),(14,15),(15,16),(16,17),(15,18),(18,19),(19,20), 
      (18,21),(21,22),(22,23),(23,24)]) 
    G.node[1]['building'] = 'Home' 
    G.node[12]['building'] = 'Store' 
    G.node[24]['building'] = 'Mine' 
    G.node[8]['building'] = 'Bank' 
    G.node[17]['building'] = 'Saloon' 
    G.node[20]['building'] = 'Jail' 
    G.node[2]['Mugger'] = 'Mean Mugger' 
    G.node[7]['Path'] = 'Rocky Path' 
    G.node[11]['Rock'] = 'Big Rock' 
    G.node[16]['Mugger'] = 'Nice Mugger' 
    G.node[23]['Path'] = 'Flooded Path' 
    G.node[3]['Surprise'] = 'Money' 
    G.node[4]['Rock'] = 'Small Rock' 
    G.node[5]['Path'] = 'Rocky Path' 
    G.node[6]['Path'] = 'Rocky Path' 
    G.node[9]['Surprise'] = 'Money' 
    G.node[10]['Surprise'] = 'Health' 
    G.node[13]['Path'] = 'Rocky Path' 
    G.node[14]['Path'] = 'Rocky Path' 
    G.node[13]['Rock'] = 'Medium Rock' 
    G.node[15]['Path'] = 'Rocky Path' 
    G.node[18]['Surprise'] = 'Money' 
    G.node[19]['Surprise'] = 'Health' 
    G.node[21]['Path'] = 'Smooth Path' 
    G.node[22]['Path'] = 'Rocky Path' 

class Cell(Graph): 
    def __init__(self, game, objects, blocked, position, coords, map, graph): 
     super().__init__() 
     self.objects = {} 
     self.blocked = False 
     self.position = (0,0) 
     self.map = graph.G 
     print(map) 

回答

0

我不知道你想做什麼,但我看到你的代碼中有幾個問題。

首先,您實施方法__index__,但實際中很少有用例。即使你的意思是,它也必須返回結果,但是你沒有使用return聲明。

假設你返回G,它不會幫助你,因爲nx.Graph不可散列,而映射鍵必須是可散列的。

我看不出如何解決這個問題,因爲我不明白你的意思。


另一種可能是,你並不想執行__index__(一個不起眼的方法來改變[]運營商的行爲),但__init__(對象的構造函數)。 在這種情況下,您必須用__init__替換名稱__index__,並將它分配爲Gself(例如,在函數結尾的self.G = G)。

相關問題