5

今、私は他のstackoverflow Game of Lifeの質問を読み、貪欲にグーグルで検索しました.私は、Game Of LifeのPython実装のために何をすべきかを知っています.グリッド内のアクティブなセルを追跡したい.問題は私がどのようにコーディングすればよいかで立ち往生しています。
これが私が考えたものですが、それを超えてちょっと機知に富んでいました:


  • アクティブなデッドまたはアライブのセル座標タプルで構成される ActiveCell リストを維持します。
  • 次世代を計算するときは、ActiveCell リストを反復処理し、セルの状態を計算し、状態が変化するかどうかを確認します。
  • 状態が変化した場合、現在のすべての隣接セルをリストに追加します
  • そうでない場合は、そのセルをリストから削除します
  • ここでの問題は次のとおりです: (" . "-> other cell) A が 3) を満たす場合、B、C、D を追加し、 B も 3) に対して true を返す場合、A、C を再度追加することを意味します (重複)
    B C D
    . A .
    . . .


OrderedSet などを使用して順序を処理し、重複を回避することを検討しましたが、それでもこれらの問題にぶつかりました。方向性が必要です。

4

5 に答える 5

0

特定の方法でゲームを実装するための制限があるとは述べていません。ですから、主な質問は次のとおりです。どのくらいのグリッドを処理できるようにしたいですか?

たとえば、小さな固定サイズのグリッドから始める場合、最も単純な表現は、各セルが生きているか死んでいるかを含む [[bool]] または [[int]] です。したがって、各ラウンドで、古いグリッドから新しいグリッドを作成できます。たとえば、グリッドの外側のすべてのセルが死んでいると仮定します。例:

[
  [False, True, False],
  [True, False, True],
  [False, True, False],
]

非常に大きな動的サイズのグリッドが必要な場合は、HashLife アルゴリズムがあります。これははるかに高速ですが、より複雑です。

于 2013-07-29T05:37:28.563 に答える