现在我已经阅读了其他关于生命游戏的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。
  • 10-04 21:43