2016-04-18 37 views
-5

我想製作一個8x8的2D數組,用於python中的跳棋遊戲。我會如何去做這件事? 這裏是我當前的代碼:在python中製作跳棋板

class Board():  
    board = [[]] 

    def __init__(self,width,height): 
     self.width = width 
     self.height = height 

    def __repr__(self): 
     print(self.board) 

    def setup(self): 
     for y in range(self.height): 
      for x in range(self.width): 
       self.board[y].append(0) 

board = Board(8,8) 
board.setup() 
print(board.board) 
+1

注:'__repr__'不應打印任何東西,但返回表示對象的字符串。 –

+0

不確定你的需求是什麼,但是在numpy中製作8x8陣列的布爾值可能更容易。 – snd

+1

更不用說,如果你創建了多個電路板,它們將共享相同的數據,因爲'self.board'是一個類屬性。 –

回答

0

點在哪裏你的代碼做

self.board[y].append(0) 

self.board只有一個元素,所以對於這個y>0將會失敗。您需要使self.board不包含一個空列表,但self.height空列表爲此工作。

我不會進入更多的細節,因爲正如一位評論者所說,這聽起來很像作業,在這種情況下,最好不要填寫所有細節。

3
board = [[0]*8 for i in range(8)] # This makes you 8x8 list 
>>>[[0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0]] 

def setup(self): 
    board = [[0]*self.height for i in range(self.width)] 

與實例屬性(self.heigth,self.width)

0

嵌套列表有時是難以奏效你只改變8分的。如果你不是絕對需要一個2D列表,我推薦使用一個字典。使用字典創建2D數組很容易。您可以使用(行,列)的元組作爲索引。

例如:

board = {} 
for row in range(8): 
    for column in range(8): 
     board[(row, column)] = 0