2d列出替换对象

时间:2013-06-01 03:06:06

标签: python object

我正在尝试使用pygame库与python 3进行棋盘游戏。我要做的是创建一个x by y 2d对象列表,我将其称为空格来代表棋盘。首先,我将所有空格初始化为灰色,并将is_piece属性设置为False,表示它们都是空白。然后我想通过用is_piece属性设置为true的对象替换board [x] [y]值来用空格替换空格。

我遇到的错误是self.coords值正在被翻转。例如,在下面的代码中,具有[2,3] self.coords值的stone对象最终在board [3] [2]位置,反之亦然。添加更多的石头也会通过翻转索引值来搞砸自我。有时候随后会添加一个到一个。

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)  

这是我正在使用的Space类的 init 方法:

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]]

有谁能告诉我我搞砸了什么?

1 个答案:

答案 0 :(得分: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)