私は、異なるノードを持つグリッドを持っています。すべてのノードには、trueまたはfalseに設定できるプロパティがあり、それを「lighted」と呼ぶことができます。エリアグリッド内の影響を受けたノードを追跡する
ノードによっては、「ライト」を設定できます。これらのライトには範囲があり、影響を受けるノードの「ライト付き」プロパティはtrueに設定されます。光が範囲内にない限り、ノードは「点灯」のままになります。
ノードの設定や、ライトが設定されているときに影響を受けるノードの確認に問題はありません。
しかし、私はライトを消すことに対処する方法がわかりません:ライトをオンにすると、影響を受けたノードを点灯させなければならないことがわかります。ライトをオフにすると、別のライトの影響を受ける可能性があるため、ノードによっては点灯したままになることがあります。
私の最初のアプローチは、どれくらいの光がそれに影響を与えているかを各ノードに知らせることでした。そして、ライトが消灯したら、影響を受けたノードの値を減らしてください。
シンプルですが、移動ライトを実装するとコードが乱雑になり、元のライトを破棄して新しい位置に新しいライトを作成する必要があります。
この問題に対処するより効率的な方法は、スピードでありストレージではなく、主な問題ではないでしょうか?
詳細:グリッドは、ノードのないセルを持つことができます。実際、グリッドの半分以上にノードがないため、現在、ノード情報を格納するために辞書を使用しています。
グリッドにはいくつかのサイズがありますが、極端な場合は100x100です。
固定ライトと移動ライトが複数存在することがありますが、ユーザーの入力に依存するため、同時に30個を超えることはありません。
光源が多いですか?あなたのグリッドは大きいですか?光源が作成、破壊、移動するよりも頻繁にセルが点灯するかどうかをチェックしますか?これらのことはおそらく、どのアプローチが最も効率的であるかを知る上で役割を果たすでしょう。各セルのライト数を維持するという考えは悪くはありません。セルを複数回カウントしないように注意すると、コードが乱雑にならないはずです。 –
上記の説明を追加します。 – Leo