0

コネクタでつながった建物を長方形のグリッドに配置するゲームに取り組んでいます。何も重ねることはできません。建物とコネクタは、グリッド上にあると変更できません。それらはいつでも破壊できます。グリッドは、左下隅が (0,0) になるように定義されます。

建物は長方形で、各辺の長さは 1 ~ 4 ユニットです。5x5 の正方形もあります。

コネクタには始点と終点があります。それらはオーバーラップできず、幅は 1 単位です。それらは直線編集:(左、右、上、下) に進み、どこでも 90 度曲げることができます。無制限の長さ。

グリッドは理想的にはかなり大きい (200x200 以上) ですが、これは、これらのオブジェクトとコネクタが何千もある可能性があることを意味します。

オブジェクトが構築されたら、何かとオーバーラップしているかどうかを確認する必要があります。ビットのグリッドを作成すると、そのサイズは 300x300 を超えて非常に大きくなります。すべてのオブジェクトのリストを作成すると、ある程度の範囲内で検索できますが、コネクタをどのように処理しますか?

ビットの 2 次元配列は不可能なので、すべての建物にインデックスを付け、x 座標で並べ替え、次に y 座標で並べ替える必要があります。コネクタを直線的に検索することもできますが、それは非常に面倒で面倒です。

誰か提案がありますか?PS私はC ++でこれをやっています

4

1 に答える 1

1

300x300は大きくないことを除けば、ブール値をバイト内のビットにパックすることが本当に必要な場合は(ただし、速度上の理由からそれはお勧めしません)、コネクタが単純な関数と交差しているかどうかを確認できます:https://stackoverflow .com/a/565282/2436175

新しい建物が他の建物と交差していないことを既に確認していると仮定すると、チェックする必要があるのは、新しい建物 (セグメント) の側面が、既に配置されているコネクタのいずれとも交差していないことです。

于 2013-07-20T20:34:05.053 に答える