Python开发无遗传算法俄罗斯方块AI的网格空隙计数问题
空隙计数代码修复方案
问题根因
原代码仅统计了紧贴方块正下方的空白单元格,没有统计同一列中第一个方块下方的所有连续空白单元格,因此出现计数偏小的问题。
修复思路
按列遍历网格:
- 对每一列,从上到下查找第一个被占据(非0)的单元格位置
- 找到后,统计该位置下方所有空白(值为0)的单元格数量,全部计入空隙数
- 若整列无被占据的单元格,不计入空隙
修复后代码
def grid_gaps(grid): gaps = 0 col_count = len(grid[0]) row_count = len(grid) # 按列遍历 for x in range(col_count): # 先找当前列第一个非0的行位置 first_block_y = None for y in range(row_count): if grid[y][x] != 0: first_block_y = y break # 该列有方块的话,统计第一个方块下方的所有0 if first_block_y is not None: for y in range(first_block_y + 1, row_count): if grid[y][x] == 0: gaps += 1 return gaps
效果验证
- 针对第一个测试网格:
[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [1, 1, 1, 0, 0], [0, 0, 0, 1, 0]
运行后返回空隙数3,符合预期。
2. 针对第二个测试网格:
[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [1, 1, 1, 0, 0], [0, 0, 0, 1, 0], [0, 0, 0, 1, 0]
运行后返回空隙数6,符合需求。
内容的提问来源于stack exchange,提问作者Random_Pythoneer59
相关产品推荐
相关产品推荐

