2016-04-12 7 views
0
class GameBoard(object): 

    def __init__(self,blackp='X',whitep='O',counter=0): 
      self.board 

    def boardinit(self): 
      self.board=[['+' for row in range(17)]for col in range(17)] 
      def setboarder(self): 
        for hor in range(17): 
          self.board[0][hor]= board[16][hor]='--' 
        for side in range(17): 
          self.board[side][0]=board[side][16] = '|' 
        return board 
      self.board = setboarder(self.board) 

Ich frage mich, wie eine Matrix Spielbrett mit der OOP zu initialisieren, ich das Beispiel gefunden ist aus: https://github.com/ChenghaoQ/Pyex/blob/master/2048.py, in diesem Fall, in dem der Code den erklärt self.field?‚list‘ Objekt hat kein Attribut ‚Board‘ (Matrix)

+0

Ist das Ihre wahre Einrückung? Wenn ja, ist das das Problem. Sie haben eine ** interne Funktion ** zu 'boardinit' definiert, damit es nicht als erstes Argument" self "bekommt. Es bekommt, was du passierst, das ist "self.board", was bedeutet, dass dein 'self.board' darin' self.board.board' heißt. –

+0

@ Two-BitAlchemist Du solltest dies die Antwort – sabbahillel

+0

@ Two-Bit Alchemist machen , meinst du ich muss das setboard aus dem boardinit (selbst) bewegen oder einfach das verschieben? oder wie man die self.board in den setboarder() übergibt, wenn die Einrückung beibehalten wird –

Antwort

1

Sie setzen self.board.board nach der Übergabe an die innere Funktion. Dies ist ein besserer Ansatz, der schneller läuft und weniger fehleranfällig ist:

def boardinit(self): 
    board=[['+' for row in range(17)]for col in range(17)] 
    # Set border 
    for hor in range(17): 
     board[0][hor]= board[16][hor]='--' 
    for side in range(17): 
     board[side][0]=board[side][16] = '|' 

    self.board = board 
+0

Muss ich self.board im __init__ deklarieren? –

+0

@ C.Qian Nein, du nicht. Es ist jedoch eine gute Übung, es mit None als Wert zu deklarieren. Jemand, der Ihren Code betrachtet, weiß vielleicht genau, dass dieses Attribut existiert. – Bharel

Verwandte Themen