Список Python Ошибка индекса вне диапазона - PullRequest
1 голос
/ 23 апреля 2010

Я работаю над игрой на python tetris, которую мой профессор назначил для окончательного проекта концепции класса программирования.У меня есть почти все, что он хотел поработать над этим, но у меня небольшая проблема с одной частью.Всякий раз, когда я начинаю двигать фигуры влево и вправо, я получаю «ошибка индекса вне диапазона».Это происходит только тогда, когда это против части.Вот виновники, которые доставляют мне горе.

def clearRight(block=None):
    global board, activeBlock, stackedBlocks
    isClear = True
    if(block == None):
        block = activeBlock
    if(block != None):

        for square in block['squares']:
            row = square[1]
            col = square[0]+1
            if(col >= 0 and stackedBlocks[row][col] !=None):
                isClear=False
    return isClear


def clearLeft(block=None):
    global board, activeBlock, stackedBlocks
    isClear = True
    if(block == None):
        block = activeBlock
    if(block != None):

        for square in block['squares']:
            row = square[1]
            col = square[0]-1
            if(col >= 0 and stackedBlocks[row][col] !=None):
                isClear=False
    return isClear

Я не ищу, чтобы кто-нибудь исправил это для меня, я только ищу советы о том, как это исправить самостоятельно.Заранее спасибо за любую помощь, которая предоставляется.

Ответы [ 2 ]

2 голосов
/ 23 апреля 2010

Есть опечатка, которая вызовет эту проблему в первом методе.

Когда вы проверяете каждую ячейку в блоке, сдвинутую на одну позицию вправо, вы не проверяете, находятся ли они вне сетки.

if (col >= 0 and ...)

вероятно должно быть

if (col < num_cols and ...)

Я также согласен с CrazyDrummer, сделайте общую понятную функцию


Спойлеры ...

def clear(x_offset, block=None):
    if not block: 
        block = activeBlock
        if not block: return True
    for x,y in block:
        x += x_offset
        if not (0 <= x < num_cols) or stackedBlocks[x, y]:
            return False
    return True
0 голосов
/ 23 апреля 2010

Посмотрите, что отличается, когда вы получаете исключение. Попробуйте распечатать информацию о состоянии программы, чтобы помочь вам сосредоточиться. Есть только одно место, где вы получаете доступ к массиву с переменными индексами, так что вы можете немного сузить радиус поиска.

Отдельное предложение: Создайте общий clear, который определяет направление, по которому вы хотите очистить параметры.

Я настоятельно рекомендую книгу Правила отладки! , она поможет вам в поиске и исправлении проблем. : D

...