我运行了你给我的代码当我点击游戏界面后出现以下报错Traceback most recent call last File DPythonTestcodepythonProjectpnovelpy line 172 in module main File DPythonTestcodepythonProjectpnovelpy line 161 in main move_block
报错的原因是在移动方块时,出现了越界的情况。具体来说,是在判断该列是否有方块时,如果该列所有行都没有方块,那么会跳过该列,但是在后面移动方块的过程中,还是会遍历到该列,从而出现越界的情况。
解决方法是,在移动方块时,只遍历有方块的列,而不是遍历所有列。具体来说,可以先找到有方块的最右边的列,然后从这个列开始往左遍历,直到遍历到最左边的列为止。
修改代码如下:
移动方块
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,
原文地址: https://www.cveoy.top/t/topic/hpyS 著作权归作者所有。请勿转载和采集!