Situation: Es gibt mehrere Entitäten in einer simulierten Umgebung, die eine künstliche Zeitvorstellung haben, die "Ticks" genannt wird, die keine Verbindung zu Echtzeit hat. Jede Einheit bewegt sich abwechselnd, aber manche sind schneller als andere. Dies äußert sich in einer Verzögerung in Ticks. So Entität A könnte eine Verzögerung von 10 haben, und B 25. In diesem Fall wird die reihum gehen würde:Welche Datenstruktur (en), um eine Final Fantasy ATB-artige Warteschlange zu unterstützen? (eine Verzögerungswarteschlange)
A A B A A
Ich frage mich, welche Datenstruktur zu verwenden. Zuerst dachte ich automatisch "Priority Queue", aber die Verzögerungen sind relativ zur "aktuellen Zeit", was die Dinge kompliziert macht. Es wird auch Entitäten mit größeren Verzögerungen geben und es ist nicht unvorhersehbar, dass das Programm Millionen von Ticks durchlaufen wird. Es scheint albern, wenn ein interner Schalter höher und höher wird, wenn die Verzögerungen selbst relativ klein bleiben und nicht zunehmen.
Also, wie würdest du das lösen?
Wenn Sie den Heap nicht nach "Wartezeit" sortieren, sondern nach "Zeitpunkt, zu dem diese Entität als nächstes tätig wird", dann müssen Sie die Wartezeit für jede Entität nicht dekrementieren. –
Wenn du hochzählst, musst du das Überrollen berücksichtigen, sobald du die Grenzen von Int oder Int64 überschreitest (wenn dein Kampf lange dauert). – vfilby
Ich meinte Zeit bis zur nächsten Aktion, aber Zeit zu warten war weniger tippen. – BeWarned