现在我已经阅读了其他关于生命游戏的stackoverflow问题,也疯狂地在Google上搜索了一下。我知道该如何执行我的Python游戏《生命游戏》,我想跟踪网格中的事件单元格。卡住了我应该如何编码。
这是我的想法,但我的智慧还远不止于此:
维护一个ActiveCell列表,该列表由事件的单元格坐标元组组成
死或生。 在计算下一代时,只需遍历ActiveCell列表,计算单元格
状态并检查状态是否更改。 如果状态更改,则将所有当前的所有邻居邻居添加到列表中如果不是,请从列表中删除该单元格现在问题是:(“。”->其他单元格)
B C D
. A .
. . .
如果A满足3),则添加B,C,D
那么如果B对于3)也返回true,则意味着它将再次添加A,C
(重复)
我考虑过使用OrderedSet之类的东西来处理订单并避免重复,但是仍然遇到了这些问题,我只需要一个方向。 您有两个列表,我将它们分别命名为currentState和newChanges。这是工作流程:
遍历currentState,找出哪些是新出生的细胞,哪些将死亡。 不要将这些更改添加到您的currentState 中。如果有要出生或死亡的细胞,请将其添加到newChanges列表中。完成此步骤后,currentState应该看起来与开始时完全相同。 为每个单元格完成步骤1中的所有计算后,然后遍历newChanges。对于newChanges中的每对,在currentState中将其从无效更改为有效,反之亦然。
例子:
currentState具有{0,0} {0,1} {0,2}。 (一行中的三个点) newChanges计算为{0,0} {-1,1} {1,1} {0,2}(两个末端点消失,中间上方和下方的点都诞生了) currentState接收更改,并变为{-1,1} {0,1} {1,1},并清除newChanges。