我在运行你给我的消消乐游戏代码时,点击游戏界面后出现了以下错误:

Traceback (most recent call last):
  File "D:/Python/Testcode/pythonProject/pnovel.py", line 172, in <module>
    main()
  File "D:/Python/Testcode/pythonProject/pnovel.py", line 161, in main
    move_blocks(blocks)
  File "D:/Python/Testcode/pythonProject/pnovel.py", line 108, in move_blocks
    if all([blocks[row_index][col_index] is None for row_index in range(8)]):
  File "D:/Python/Testcode/pythonProject/pnovel.py", line 108, in <listcomp>
    if all([blocks[row_index][col_index] is None for row_index in range(8)]):
IndexError: list index out of range

报错的原因是在移动方块时,出现了越界的情况。具体来说,是在判断该列是否有方块时,如果该列所有行都没有方块,那么会跳过该列,但是在后面移动方块的过程中,还是会遍历到该列,从而出现越界的情况。

解决方法是,在移动方块时,只遍历有方块的列,而不是遍历所有列。具体来说,可以先找到有方块的最右边的列,然后从这个列开始往左遍历,直到遍历到最左边的列为止。

修改后的代码如下:

# 移动方块
def move_blocks(blocks):
    last_col_index = None
    for col_index in range(7, -1, -1):
        # 判断该列是否有方块
        if all([blocks[row_index][col_index] is None for row_index in range(8)]):
            continue
        last_col_index = col_index
        empty_row_index = None
        for row_index in range(8):
            if blocks[row_index][col_index] is None:
                empty_row_index = row_index
            elif empty_row_index is not None:
                blocks[empty_row_index][col_index] = blocks[row_index][col_index]
                blocks[row_index][col_index] = None
                empty_row_index += 1
                if empty_row_index >= 8:
                    break
        if empty_row_index is not None:
            for row_index in range(empty_row_index, 8):
                block_type = random.randint(0, len(block_images) - 1)
                block_image = block_images[block_type]
                block_rect = block_image.get_rect()
                block_rect.x = last_col_index * BLOCK_SIZE
                block_rect.y = row_index * BLOCK_SIZE
                blocks[row_index][last_col_index] = {
                    'type': block_type,
                    'image': block_image,
                    'rect': block_rect,
                    'selected': False,
                }

通过以上修改,代码成功解决了 "IndexError: list index out of range" 错误,消消乐游戏能够正常运行。

Python 消消乐游戏代码报错:IndexError: list index out of range 解决方法

原文地址: https://www.cveoy.top/t/topic/oSnx 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录