> Programmierung
Mit der Auswertung von Bewegungen und der Verwaltung von Angriffskombinationen ist die Schadenskarte ein großes Muss in LeekWars. Das Hauptziel besteht darin, je nach Gegner das Gefahrenniveau jeder Box einschätzen zu können, um sich am Ende der Runde in eine weniger gefährliche Box zurückziehen zu können. Am einfachsten ist es, ein assoziatives Array zu erstellen: dangerMap=[ cell1:danger1 , cell2:danger2 , ... ], möglicherweise beschränkt auf Ihre zugänglichen Zellen. Hierfür sind mehrere Algorithmen möglich
Dies ist normalerweise die erste Idee, die einem beim Erstellen eines Gefahrenbewertungsalgorithmus in den Sinn kommt. Die Idee ist folgende:
/* -für jede meiner zugänglichen Zellen -für jeden Gegner -für jede zugängliche Zelle des Gegners -für die Waffe jedes Gegners -wenn er mein Handy aus seinem Handy schießen kann Fügen Sie meiner Zelle eine "Gefahrenbewertung" hinzu */
Die Wahl der Punktzahl ist ein wesentlicher Bestandteil Ihres Algorithmus: Sie können "+1" eingeben oder den möglicherweise zugefügten Schaden berechnen, ... Es gibt so viele Möglichkeiten, diese Bewertung zu verfeinern, wie es Spieler gibt 😉
Das große Problem bei diesem Algorithmus ist, dass er im Betrieb extrem gierig ist! Es ist daher in der Regel sehr schnell eine Optimierung erforderlich.
Das erste, was Sie tun müssen, ist zu verhindern, dass Ihr Lauch "abstürzt" ... Sie müssen also irgendwo im Code einen Test auf getOperations() durchführen und Schleifen verlassen, wenn die Anzahl der Operationen zu nahe kommt die Grenze: Sie werden die Gefahr nur teilweise einschätzen können, aber Ihr Lauch wird sich noch minimal bewegen können 😉
Für die Optimierung selbst ist eines der ersten Prinzipien, das Ihren Ansatz leiten sollte, vor allem, zu vermeiden, dass dieselben Operationen mehrmals in den Schleifen wiederholt werden: In diesem Fall ist es besser, die Dinge in Tabellen vorzubereiten, als sich zu erinnern. Wenn Sie beispielsweise in der innersten Schleife, die den "Gefahrenwert" berechnet, einen Aufruf an getStrength(Enemy) einfügen, rufen Sie diese Funktion tausende Male zurück. Die Idee ist dann, die Stärke des Feindes nur einmal zu berechnen und in einer Variablen zu speichern, bevor die internen Schleifen ausgeführt werden. Sie werden bereits anfangen, ein paar hunderttausend Trades zu verdienen! Suchen Sie also nach Elementen "interner" Schleifen, die nicht von der Schleifenvariablen abhängen, sondern nur von einer "externen" Schleife: Sie können diese Elemente dann auf ihre Schleife zurückführen.
Wenn Ihr Algorithmus teuer bleibt, besteht ein weiterer eher ästhetischer Weg zur Optimierung darin, die Auflösung dieser Bewertung herabzusetzen. Sie können zB nicht alle begehbaren Felder (Ihres und/oder das des Gegners) testen, sondern zB nur solche, die eine gerade Anzahl an Bewegungspunkten erfordern. Es ist dann "ausreichend", die Lücken aufzufüllen, die durch Interpolation der Werte auf den benachbarten Zellen (Mittelwert der Nachbarn, Maximum der Nachbarn, Maximum des Mittelwerts zwischen zwei Zeilen usw.) erhalten wurden. Dieser Ansatz ist weniger genau, verbraucht aber am Beispiel von geraden PMs etwa 4x weniger als der erste Algorithmus.
Um die Optimierungen fortzusetzen, müssen Sie darüber nachdenken, Dinge vorab zu berechnen, normalerweise in der ersten Runde, bestimmte Dinge in großen (oder vielen) Arrays zu speichern, die Sie neu berechnen müssen und die sich nie ändern, oder sogar bestimmte Werte zu aktualisieren Jede Runde (in unserem Beispiel die Stärke des feindlichen Lauchs).
Dieser Algorithmus berechnet einmalig zu Beginn des Kampfes eine Gefahrenkarte vor. Es ist kostengünstig, viel weniger genau, ermöglicht es Ihnen jedoch, schnell eine Liste der Bereiche der Kampfkarte zu erhalten, die im Allgemeinen gefährlich sind. Es besteht darin, zu Beginn der Runde für jede Zelle der Kampfkarte alle Zellen zu bewerten, die es Ihnen ermöglichen, mit den Waffen des/der Feinde auf sie zu schießen: ein Feld, das nur von 5 aus erreicht werden kann andere Quadrate haben dann eine viel niedrigere Punktzahl als ein Quadrat, das von 200 anderen Quadraten erreicht werden kann! Es kann ratsam sein, zu versuchen, sich in Bereiche mit „geringer Gefahr“ zurückzuziehen und den Feind dazu zu bringen, in Bereichen mit „hoher Gefahr“ zu bleiben.
Impossible de charger les données du jeu.
Vérifiez votre connexion et réessayez.