Python 消消乐游戏代码报错:IndexError: list index out of range 解决方法
我在运行你给我的消消乐游戏代码时,点击游戏界面后出现了以下错误:
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" 错误,消消乐游戏能够正常运行。
原文地址: https://www.cveoy.top/t/topic/oSnx 著作权归作者所有。请勿转载和采集!