Python实现康威生命游戏(Conway's Game of Life)运行异常求助
问题排查及修复方案
1. 全局grid初始化逻辑错误
你写的grid = [[False] * 32] * 18属于Python浅拷贝,创建的18行列表全部指向同一个内存地址,修改任意一行的元素会同步修改所有行的对应位置。并且你后续的逻辑里根本没有读取grid的状态,这部分代码完全是冗余的。
2. Cell.update()方法中的grid操作完全错误
你在update方法里写的修改grid的几行代码:
grid_temp = grid[self.indexY] grid_temp.pop(self.indexY) grid_temp.insert(self.indexY, self.alive) grid.pop(self.indexY) grid.insert(self.indexX, grid_temp)
这部分逻辑存在严重问题:
- 你修改grid的操作没有任何实际作用,因为你计算相邻细胞存活数的时候,是直接遍历
cells列表判断坐标和alive属性,根本没用到grid的值 - 操作行列索引完全混乱:弹出indexY行之后插入到indexX的位置,直接打乱了grid的行顺序,就算你后续要用到grid也会读到完全错误的值
修复方案:直接删除update方法里所有操作grid的代码即可
3. 状态更新队列没有清空
你在主循环里用live_queue和die_queue存储待更新的细胞,但是每次循环结束后没有清空队列,导致后续每一轮循环都会重复处理之前所有轮次的细胞,状态更新完全混乱。
修复方案:在每一轮遍历细胞计算更新状态之前,先清空两个队列:
live_queue.clear() die_queue.clear() for item in cells: if item.update(): live_queue.append(item) else: die_queue.append(item)
可选优化项
你现在每次统计相邻细胞都要遍历整个cells列表,时间复杂度很高,后续画布扩大后会明显卡顿。可以直接通过indexX和indexY计算相邻坐标,直接从cells里取对应细胞判断,性能会提升很多。
修复以上核心问题后,你硬编码的滑翔机就可以正常迭代移动了。
内容的提问来源于stack exchange,提问作者Atomic Peanut
相关产品推荐
相关产品推荐

