1

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

我遇到的错误是 self.coords 值正在翻转。例如,在下面的代码中,具有 [2, 3] self.coords 值的石头对象最终位于 board[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)  

这是我正在使用的 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]]

谁能告诉我我在搞砸什么?

4

1 回答 1

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)

于 2013-06-01T07:38:51.570 回答