ホームページ > バックエンド開発 > PHPチュートリアル > 大規模な配列またはその他のデータ構造を範囲ごとに走査する

大規模な配列またはその他のデータ構造を範囲ごとに走査する

WBOY
リリース: 2016-10-11 14:23:43
オリジナル
880 人が閲覧しました

スネークのゲームでは、マップ上にたくさんの食べ物があり、プログラムはヘビの頭が食べ物と衝突するかどうかを (マップ上の座標に従って) 検出する必要があるとします。
配列を使用して食品情報を保存する場合は、配列を走査する必要があります。ただし、食べ物が多い場合 (配列が大きい場合)、特定の範囲内の食べ物のみが衝突する可能性があるため、完全なトラバースは必要ありません。
問題は、配列全体を走査せずに、座標に基づいて衝突する可能性のある食べ物を見つける方法です。

私が考えることができるのはarray_filterを使用することですが、本質的にはまだ走査しています。
他のデータ構造 (配列なし) を使用する方法がある場合は、それを提供することもできます。
ゲームをプレイしたことのある友達が良い解決策を持っているかもしれません。

返信内容:

スネークのゲームでは、マップ上にたくさんの食べ物があり、プログラムはヘビの頭が食べ物と衝突するかどうかを (マップ上の座標に従って) 検出する必要があるとします。
配列を使用して食品情報を保存する場合は、配列を走査する必要があります。ただし、食品が多い (配列が大きい) 場合は、特定の範囲内の食品のみが衝突する可能性があるため、完全なトラバースは必要ありません。
問題は、配列全体を走査せずに、座標に基づいて衝突する可能性のある食べ物を見つける方法です。

私が考えることができるのはarray_filterを使用することだけですが、本質的にはまだ走査しています。
他のデータ構造 (配列なし) を使用する方法がある場合は、それを提供することもできます。
ゲームをプレイしたことのある友達が良い解決策を持っているかもしれません。

redis のソートセットタイプはニーズを満たすことができます http://redis.readthedocs.io/e...

次のようになると思います:

  • まず第一に、貪欲なヘビの食べ物はボールです。食べ物を格納する配列には、C++ で利用可能なマップがあります。

  • 次に、Map という名前の配列を開くことができます。配列のサイズはマップの w
  • h であると仮定すると、Map は次のように割り当てる必要があります。 Map[w

    x + y] = r; 食べ物の最大半径を表す maxR を記録します、maxR=max(r)。 最後に、ヘビの頭の位置を (a, b) として、 (a, b) を中心として円のすべての座標 (x, y) を移動する必要があります。半径 maxR を計算し、r = Map[w*x + y] を取り出し、now_r = dis((a,b), (x,y)) と比較します。r>=now_r の場合、ヘビが食べることを意味します。この餌が、それ未満の場合は食べないことを意味します 到着し、次の座標を判断し続けます。

  • 実際にそれを行うときは、すべての食べ物を横断する必要があると推測しています。結局のところ、貪欲な蛇はそれほど多くの食べ物を持っていません。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート