2013-06-01 3 views
1

Я пытаюсь создать настольную игру с python 3, используя библиотеку pygame. То, что я пытаюсь сделать, это создать список объектов x, которые я назвал пробелами для представления платы. Сначала я инициализирую все пробелы цветом как серым, а атрибут is_piece - False, что указывает на то, что все они пустые. Затем я хочу заменить пустые пространства кусками, заменив значения платы [x] [y] объектами с атрибутом is_piece, установленным в true.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) 

Вот INIT метод класса Space, который я использую:

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

Я бы избавился от всей проблемы с помощью dict вместо списка списков с ключами, которые являются кортежами '(x, y)'. –

ответ

0

Как уже указывал @Joran Beasley, вы можете получить доступ к значениям, используя [row] [col] (который будет [y] [x]) в вашем текущем коде. Для того, чтобы получить доступ с помощью [х] [у] вы можете немного изменить цикл, который создает свой совет:

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

Чтобы получить форму (BOARDWIDTH, BOARDHEIGHT) в результате борту.

Смежные вопросы