2013-06-01 71 views
1

我想用python 3製作一個使用pygame庫的棋盤遊戲。我想要做的是創建一個x對象的列表,我稱之爲空間來表示棋盤。首先,我用灰色初始化所有空格,並將is_piece屬性設置爲False,表明它們都是空白空間。然後,我想用具有is_piece屬性設置爲true的對象替換board [x] [y]值來替換空白空間。2d列表替換對象

我遇到的錯誤是self.coords值正在翻轉。例如,在下面的代碼中,具有[2,3] self.coords值的石頭對象在板[3] [2]位置結束,反之亦然。添加更多的石頭還會通過翻轉索引值來關閉self.coords,有時還會添加其中的一個。

def initialize_board(): 
    #creates an array of empty spaces representing the board 
    board = [[Space(GRAY, RADIUS, [x, y], False) for x in range(BOARDWIDTH)] 
       for y in range(BOARDHEIGHT) 
    #Create the center stones 
    board[3][3] = Space(RED, RADIUS, [3, 3], True) 
    board[2][3] = Space(RED, RADIUS, [2, 3], True) 
    board[4][3] = Space(RED, RADIUS, [4, 3], True) 
    board[3][2] = Space(RED, RADIUS, [3, 2], True) 
    board[3][4] = Space(RED, RADIUS, [3, 4], True) 

這裏的空間類的初始化方法我使用:

def __init__(self, color, size, coords, is_stone): 
    self.color = color 
    self.size = size 
    self.coords = coords 
    self.is_stone = is_stone #false if empty 
    self.pos = [CCONSTANT + DISTANCE * self.coords[0], 
       CCONSTANT + DISTANCE * self.coords[1]] 

誰能告訴我什麼我搞亂?

+3

其預期座標是形式(x,y),但2d數組通常是[row] [col](例如(y,x))...所以你需要翻轉你如何給它座標 –

+0

@ JoranBeasley:將你的評論改爲答案。 –

+0

我會通過使用一個字典而不是列表的列表,使用元組''(x,y)''的鍵來解決整個問題。 –

回答

0

由於@Joran Beasley已經指出,您可以在當前代碼中使用[row] [col](這將是[y] [x])訪問這些值。爲了訪問使用[X] [Y]您可以稍微改變創建您的主板循環:

board = [[Space(GRAY, RADIUS, [x, y], False) for y in range(BOARDHEIGHT)] 
      for x in range(BOARDWIDTH) 

要在獲得的板材得到的形狀(BOARDWIDTH, BOARDHEIGHT)