Zugängliche Zellen

Zugängliche Zellen

> Programmierung

Dieser Algorithmus zielt darauf ab, die Zellen zu finden, die ein Lauch erreichen kann, ausgehend von einer gegebenen Zelle und Anzahl von PM.

Dies führt zu einer Funktion, die eine Zelle und eine Zahl als Parameter verwendet und ein Array von Zellen zurückgibt.

Wenn Sie von den Funktionen „getAccessibleCells“ oder „getReachableCells“ oder einem anderen ähnlichen Namen erfahren, wissen Sie jetzt, was es ist.

Verwenden

Ab dem Moment, in dem Sie Ihre Reisen planen möchten, ist diese Funktion unerlässlich.

Wenn Sie die Zellen kennen, in die Sie gehen können, können Sie beispielsweise die Zelle auswählen, in der Sie den geringsten potenziellen Schaden erleiden, oder sehen, wohin Sie sich bewegen könnten, um Ihrem Gegner Schaden zuzufügen.

Dieser Algorithmus wird insbesondere im Cache-Cache-Algorithmus (Le cache-cache) verwendet.

Erste Methoden

Prinzip

An sich ist es ziemlich einfach, einen Weg zu implementieren, um die Zellen zugänglich zu machen. Die einfachste Methode besteht darin, die Entfernung zu jeder Zelle auf der Karte mit getPathLength zu testen.

Aber diese Funktion hat hohe Betriebskosten. Verwenden Sie es also in jeder Zelle der Karte ... Ihr Betriebsverbrauch würde in die Höhe schnellen.

Eine etwas klügere Lösung wäre, zuerst die Zellen in Reichweite von PM zu finden und dann zu prüfen, ob sie über getPathLength erreichbar sind.

Wenn diese beiden Lösungen durchführbar sind, haben sie Betriebskosten, die schnell hoch werden.

Wenn Sie ein Anfänger sind und die Lösung, die wir im Folgenden besprechen werden, immer noch etwas kompliziert erscheint, können Sie sich zunächst mit diesen Lösungen zufrieden geben. Zu Beginn des Spiels müssen Sie nicht unbedingt viele Berechnungen anstellen, und auf niedrigem Niveau haben Sie nicht viele MP. Sie können es sich also leisten, diese Lösungen zu verwenden.

Das Problem

Durch diese Methoden wird es problemlos möglich sein, Ihre Zellen zugänglich zu machen.

Aber ein erstes Problem entsteht, wenn Ihre Anzahl von PM zunimmt. Je höher er klettert, desto mehr Quadrate gibt es natürlich zu testen. Wenn Sie mit getPathLength die gesamte Map durchspielen, sollten Sie im schlimmsten Fall "nur" eine Rechnung von ca. 4 Millionen Operationen erhalten.

Es genügt zu sagen, dass dies die verfügbaren Operationen für andere Algorithmen wie Combos oder die Damage Map erheblich reduziert.

Und das ist nicht alles ! Es gibt noch ein weiteres Problem: Du bist nicht allein in einem Kampf. Sie müssen auf jeden Fall die zugänglichen Zellen Ihrer Gegner bekommen, um sich vor ihren Angriffen schützen zu können. Und wenn die verschiedenen Lauchzwiebeln anfangen, Zwiebeln zu beschwören, müssen noch mehr Zellen berechnet werden.

Kurz gesagt, wenn Sie anfangen wollen, die zugänglichen Zellen dieser ganzen kleinen Welt mit diesen Methoden zu berechnen, kostet Sie das viel mehr als einen Arm.

Daher verwenden wir eine andere Methode, die viel effektiver ist: Gehen Sie von Nachbar zu Nachbar!

Nachbarmethode

Voraussetzungen

Erstens, was ist ein "Nachbar"? Die Nachbarn einer Zelle sind einfach die angrenzenden Zellen. Und wir sprechen offensichtlich von den Zellen, die eine gemeinsame Seite haben, die Zellen, die direkt daneben liegen, und nicht von denen, die diagonal sind.

Somit haben die Zellen, die sich in den Ecken der Karte befinden, einen einzigen Nachbarn. Zellen an den Rändern haben zwei. Und alle anderen haben vier.

Das erste, was Sie wissen müssen, ist, die Nachbarn einer Zelle abzurufen. Mit den Funktionen getCellX, getCellY und getCellFromXY können Sie diese berühmten Nachbarn ganz einfach ermitteln.

Sobald Sie die Nachbarn einer Zelle abrufen können, müssen Sie feststellen, ob diese Zelle "passierbar" ist. Wenn die Zelle ein Hindernis ist oder ein Lauch dort ist, kann sich Ihr Lauch natürlich nicht darauf bewegen.

Dazu benötigen Sie die Funktionen isObstacle, isEmptyCell, isLeek oder getCellContent.

Prinzip

Das Prinzip ist eigentlich ganz einfach. Auch wenn es für einen Programmieranfänger nicht unbedingt einfach einzurichten ist.

Dein Porree steht also auf einem Feld und hat eine bestimmte Anzahl von MP zu bewegen. Die Zelle, auf der es sich gerade befindet, befindet sich in einer Entfernung von 0 PM; So weit, ist es gut...

Wenn dein Lauch 1 MP hat, wohin kann er sich bewegen? Nun, auf die freien Nachbarn seiner Startzelle.

Was ist, wenn er 2 MP hat? Es kann sich daher für 1 PM auf die freien Nachbarn seines Startfeldes bewegen. Aber auch, für 2 PM, auf die freien Nachbarn der freien Nachbarn der Startzelle.

Usw...