Ich mache ein Spiel mit Lua und ich muss Breadth-First Search verwenden, um einen schnellen Pfadfindungsalgorithmus zu implementieren, der den kürzesten Weg zwischen der feindlichen KI und dem Spieler findet.
Ich werde bis zu 3 Feinde gleichzeitig benutzen und die Karte ist ein 2-dimensionales Labyrinth. Ich habe bereits eine Kollisionserkennung implementiert, so dass jetzt nur noch ein Weg für die Feinde besteht, den kürzesten Weg zum Spieler auf eine Weise zu finden, die schnell und vorzugsweise etwa 80-90 mal pro Sekunde pro Feind erledigt werden kann.
Als ich zuvor die Breitensuche implementiert habe, habe ich eine Warteschlange in C ++ benutzt. Aus dem, was ich über Lua gelesen habe, sind Stapelimplementierungen mit Tabellen sehr effizient, da die Elemente nicht nach den Operationen push()
(AKA table.insert) und pop()
(table.remove) verschoben werden müssen. Ich habe jedoch theoretisiert, dass Warteschlangen mit großen Größen in Lua sehr ineffizient sein können, denn wenn Sie etwas aus Index 1 einer Tabelle einfügen / entfernen wollen, müssen alle anderen Elemente in der Tabelle entweder nach oben oder nach unten in der Tabelle verschoben werden.
Ich möchte daher einige einfache Fragen an die in Lua Erfahrenen stellen. Was ist die einfachste und / oder schnellste Implementierung einer Warteschlange in dieser Sprache? Ist es in Lua überhaupt möglich, eine schnelle Warteschlange zu haben, oder wird allgemein akzeptiert, dass Lua immer alle Elemente für eine Warteschlangenoperation "verschieben" muss, wie zum Beispiel pop()
oder append()
?
EDIT: Ich verstehe, dass die zugrunde liegende Implementierung von "shifting elements" in Lua-Tabellen in C geschrieben ist und daher ziemlich optimiert ist. Ich würde nur gerne wissen, ob ich bessere Möglichkeiten für Warteschlangen habe, bevor ich anfange, eine einfache Tabellenimplementierung zu schreiben.
Eine schnelle Implementierung der Warteschlange (eigentlich doppelte Warteschlange) in Lua erfolgt durch das Buch Programmierung in Lua :
%Vor% Es kann ein Element an beiden Enden in konstanter Zeit einfügen oder entfernen, der Schlüssel ist, sowohl first
als auch last
zu speichern.
Tags und Links queue lua path-finding lua-table breadth-first-search