Ich habe Hausaufgaben für meine Schule und ich muss in Delphi ein Schlangenspiel machen, wie das von Nokia. Ich frage mich, welche Lösung die beste ist. Ich möchte, dass meine Schlange eine Klasse ist und der Körper eine Reihe von Punkten (Elternklasse) oder eine verknüpfte Liste von Punkten ist. Was ist das Beste? Ein Array oder eine verknüpfte Liste?
Eine verknüpfte Liste ist besser. (Jeder Knoten kann auf den vorherigen und nächsten Knoten zeigen.) Es ist einfacher, Knoten am Ende einer verknüpften Liste hinzuzufügen.
Wenn Sie ein Array verwenden, müssen Sie entweder die Größe ändern oder es auf die maximal mögliche Schlange Länge initialisieren, um damit zu beginnen, was im Speicher verschwenderisch sein kann.
UPDATE Dieser Artikel spricht über Zeiger in Delph und schlägt sogar eine einfache Knotendefinition Delphi-Artikel
vorEine einfache Lösung besteht darin, ein Array [horizontal] [vertikal] vom Typ zu erstellen, sodass für jede Koordinate auf dem Bildschirm ein Element vorhanden ist. Jeder Typ kann eine Schlangenrichtung, Nahrung, Gift, Wand oder leer sein. Das bedeutet, dass Sie sich nur die Kopf- und Schwanzposition der Schlange und die Anzahl der Nahrung und der Gifte merken müssen, und das Array beschreibt, wie der Bildschirm aussieht.
Dies beseitigt den Aufwand beim Umgang mit den Elementen der Schlange und macht es einfach, neue Nahrung oder Giftgegenstände auf dem Bildschirm zu positionieren, um sicherzustellen, dass Sie es nicht an einen bereits belegten Platz legen.
Wenn Sie das Schwanzelement der Schlange entfernen müssen, nehmen Sie die Richtung des Schwanzes mit der folgenden Anweisung: = array [tailx, taily]; und setze dann array [tailx, taily]: = leer. Danach aktualisieren Sie je nach Richtung tailx und taily. Das war's.
Ich habe etwas anderes für meine Snake-Implementierung verwendet. Die Idee ist, dass Sie
speichernDies ist ziemlich effizient, keine dumme Lösung wie ein einfaches Array und kann leicht zum Zeichnen von "schickeren" Schlangen, z.B. mit abgerundeten Ecken.
Hier sind ein paar nette Startpunkte für dich ... da ich deine Hausaufgaben nicht machen will:
Pseudocode für Snake Game, um eine Idee zu bekommen
Thread mit einem deutschen Beispiel ... vielleicht hilft dir dieser Code
Wenn während des Programmiervorgangs Fehler auftreten, können Sie eine neue Frage öffnen.
In Delphi würde ich eine TQueue verwenden, die in der Contnrs-Einheit definiert ist. Du kannst deine neue Koordinate hineinschieben (Schlangenkopf), und wenn deine maximale Schlangengröße erreicht ist, musst du einfach "Pop" rufen, um den Schlangenschwanz zu befreien.
%Vor%Dann müssen Sie nur noch zeichnen, was in dieser TObjectQueue ist. Um auf die Liste der TQueue zuzugreifen, müssen Sie die Eigenschaft List offenlegen ... Um dies zu tun, definieren Sie einfach Ihre Schlangenkörper-Klasse wie folgt:
%Vor%Sie können einen Ringpuffer verwenden. Um zu erarbeiten:
Erhalte ein Array, das groß genug ist, um die maximale Schlange zu halten. Legen Sie zwei Zeiger fest, einen für den Kopf, einen für den Schwanz.
Am Anfang wäre der Schwanz in Zelle # 1, der Kopf in Zelle # 3. Bewegen Sie den Kopfzeiger während der Bewegung der Schlange nach rechts und schreiben Sie die neue Koordinate. Wenn keine Nahrung mehr gegessen wird, bewegen Sie den Schwanzzeiger ebenfalls nach rechts. Wenn einer der Zeiger versucht, über das äußerste rechte Ende des Arrays hinauszugehen, wickeln Sie sie an den Anfang.
Tags und Links delphi data-structures