Heim > Backend-Entwicklung > PHP-Tutorial > Durchsuchen Sie große Arrays oder andere Datenstrukturen nach Bereich

Durchsuchen Sie große Arrays oder andere Datenstrukturen nach Bereich

WBOY
Freigeben: 2016-10-11 14:23:43
Original
871 Leute haben es durchsucht

Stellen Sie sich vor, im Spiel Snake gibt es viel Futter auf der Karte und das Programm muss erkennen, ob der Kopf der Schlange mit dem Futter kollidiert (gemäß den Koordinaten auf der Karte).
Wenn Sie ein Array zum Speichern von Lebensmittelinformationen verwenden, müssen Sie das Array durchlaufen. Wenn jedoch viele Lebensmittel vorhanden sind (das Array ist groß), ist kein vollständiger Durchlauf erforderlich, da nur Lebensmittel innerhalb eines bestimmten Bereichs kollidieren können.
Das Problem besteht darin, anhand der Koordinaten die Lebensmittel zu finden, die möglicherweise kollidieren, ohne das gesamte Array zu durchqueren.

Ich kann mir vorstellen, array_filter zu verwenden, aber im Wesentlichen handelt es sich immer noch um eine Traversierung.
Wenn es eine Möglichkeit gibt, andere Datenstrukturen (ohne Arrays) zu verwenden, können Sie diese auch bereitstellen.
Vielleicht haben Freunde, die Spiele gespielt haben, gute Lösungen.

Antwortinhalt:

Stellen Sie sich vor, im Spiel Snake gibt es viel Futter auf der Karte und das Programm muss erkennen, ob der Kopf der Schlange mit dem Futter kollidiert (gemäß den Koordinaten auf der Karte).
Wenn Sie ein Array zum Speichern von Lebensmittelinformationen verwenden, müssen Sie das Array durchlaufen. Wenn jedoch viele Lebensmittel vorhanden sind (das Array ist groß), ist kein vollständiger Durchlauf erforderlich, da nur Lebensmittel innerhalb eines bestimmten Bereichs kollidieren können.
Das Problem besteht darin, anhand der Koordinaten die Lebensmittel zu finden, die möglicherweise kollidieren, ohne das gesamte Array zu durchqueren.

Ich kann mir vorstellen, array_filter zu verwenden, aber im Wesentlichen handelt es sich immer noch um eine Traversierung.
Wenn es eine Möglichkeit gibt, andere Datenstrukturen (ohne Arrays) zu verwenden, können Sie diese auch bereitstellen.
Vielleicht haben Freunde, die Spiele gespielt haben, gute Lösungen.

Der Sortiersatztyp von Redis kann Ihre Anforderungen erfüllen http://redis.readthedocs.io/e...

Ich glaube, es sieht so aus:

  • Zuallererst ist das Essen in der gierigen Schlange ein Ball. Das Array, das das Essen speichert, sollte enthalten 🎜>

  • Dann können Sie ein Array namens Map öffnen. Die Größe des Arrays beträgt w
  • h der Karte so zuzuweisen: Map[w

    x y] = r; zeichnet ein maxR-Ding auf, das den maximalen Radius der Nahrung darstellt, maxR=max(r).

  • Bestimmen Sie abschließend die Kollision. Angenommen, die Position des Schlangenkopfes ist (a, b). Sie müssen lediglich alle Koordinaten (x, y) des Kreises mit (a, b) durchlaufen ) als Mittelpunkt und Radius als maxR. Nehmen Sie dann r = Map[w*x y] heraus und vergleichen Sie es mit now_r = dis((a,b), (x,y)). Wenn r>=now_r, bedeutet das Die Schlange wird dieses Futter fressen. Wenn Sie es nicht essen können, fahren Sie mit der Beurteilung der nächsten Koordinate fort.
  • Eigentlich schätze ich, dass es bei der eigentlichen Durchführung darum gehen sollte, die gesamte Nahrung zu durchqueren. Schließlich hat die gefräßige Schlange nicht so viel Nahrung.
Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage