Delphi-PRAXiS
Seite 3 von 6     123 45     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Tutorials und Kurse (https://www.delphipraxis.net/36-tutorials-und-kurse/)
-   -   Delphi Snake (das Spiel) (https://www.delphipraxis.net/22871-snake-das-spiel.html)

neolithos 25. Mai 2004 15:53

Re: Snake (das Spiel)
 
Mir ging es eigentlich um den Record sondern, die Art und weise wie ich die Schlange im Speicher halte.

Bei die ist Spielfeld und Schlange eins. Bei mir ist dies klar getrennt.

Übrigens das weiterrücken der Schlange ist bei mir einfach zu lösen.

Delphi-Quellcode:
with Snake do
  begin
   Inc(iHead);
   if iHead > ciMaxBuffer then
      iHead := 0;
   aBody[iHead] := Point();
  end;
Achtung: Die Schlange sollte nie länger werden als ciMaxBuffer.

Pr0g 25. Mai 2004 16:05

Re: Snake (das Spiel)
 
Wie würdest du bei deinem Code das Entfernen des letzten Stücks der Schlange realisieren? Alle Elemente des Arrays eins nach vorne verschieben?

Wofür ist die Variable "iGrow" gedacht?

neolithos 25. Mai 2004 16:23

Re: Snake (das Spiel)
 
Das interessante bei der Sache ist das die Schlange im Speicher nicht verschoben wird, sondern ich setze den Anfang nur neu.

Bsp.:
Speicher:

Code:
  iHead = 2
  iLen = 3
  ((1, 2), (1, 3), (2, 3), (?, ?), (?, ?), ...)
Nach der Bewegung:
Code:
  iHead = 3
  iLen = 3
  ((1, 2), (1, 3), (2, 3), (3, 3), (?, ?), ...)
Noch eine:
Code:
  iHead = 4
  iLen = 3
  ((1, 2), (1, 3), (2, 3), (3, 3), (4, 3), (?, ?), ...)
(Index bei 0 beginnend)


Das Grow (Wachstum) kümmert sich um das längerwerden der Schlange.

Ungefähr so:

Delphi-Quellcode:
if iGrow > 0 then
   begin
     Inc(iLen);
     Dec(iGrow);
   end;
Bsp:
Code:
  iGrow = 2
  iHead = 2
  iLen = 3
  ((1, 2), (1, 3), (2, 3), (?, ?), (?, ?), ...)
Bewegung:
Code:
  iGrow = 1
  iHead = 3
  iLen = 4
  ((1, 2), (1, 3), (2, 3), (3, 3), (?, ?), ...)
Noch eine:
Code:
  iGrow = 0
  iHead = 4
  iLen = 5
  ((1, 2), (1, 3), (2, 3), (3, 3), (4, 3), (?, ?), ...)
Eine ohne Wachstum da iGrow = 0
Code:
  iGrow = 0
  iHead = 5
  iLen = 5
  ((1, 2), (1, 3), (2, 3), (3, 3), (4, 3), (5, 3), (?, ?), ...)
Wie man sieht kommt man bei meinen Algo ohne irgentwelche aufwendigen Schleifen aus. Was bei Handy, GTR oder alten Rechnern wichtig ist. Da die ja nicht so Schnell sind.

Pr0g 25. Mai 2004 16:58

Re: Snake (das Spiel)
 
Zitat:

Zitat von neolithos
Nach der Bewegung:
Code:
  iHead = 3
  iLen = 3
  ((1, 2), (1, 3), (2, 3), (3, 3), (?, ?), ...)

Das Element mit dem Index 3 (iHead) stellt den Kopf der Schlange da, richtig? Nun hat die Schlange eine Länge von 3 (iLen), also werden die Elemente 3 bis 1 genutzt um die Schlange darzustellen, etc. Das würde bedeuten, dass das Element 0 ungenutzt ist, oder? Wenn ja, dann würde beim nächsten Schritt zusätzlich noch das Element 1 ungenutzt sein, sofern sich die Länge nicht ändert, da der Kopf ja nun den Index 4 hat. Doch dann wäre nach einiger Zeit kein Element mehr vorhanden, um den Kopf zu setzen. Oder?

[Edit]Schon gut, habe die Zeile if iHead > ciMaxBuffer then iHead := 0; in deinem Code übersehen :wink:[/edit]

neolithos 25. Mai 2004 17:07

Re: Snake (das Spiel)
 
Ist diese Erkenntnis eine neues Tutorial Wert? :)

Snake für Fortgeschrittene! :mrgreen:

Hinweis:
Bei einem einfachen Snake würde ich nur das erste Element zeichnen und das letzte überzeichnen mit dem Levelfeld.

Pr0g 25. Mai 2004 17:15

Re: Snake (das Spiel)
 
Zitat:

Zitat von neolithos
Ist diese Erkenntnis eine neues Tutorial Wert? :)

Vielleicht irgendwann mal, sofern du keins über das von dir genutze System schreibst.

Zitat:

Zitat von neolithos
Bei einem einfachen Snake würde ich nur das erste Element zeichnen und das letzte überzeichnen mit dem Levelfeld.

Hast recht, würde auch gehen. Ich hatte eigentlich geplant einen zweiten Teil zu schreiben, in dem die Zeichenfunktion so ergänzt wird, dass die Schlange aus einem Grafikset, also mit Kurven, Kopf usw. gezeichnet wird, kam bis jetzt aber nicht dazu, bzw. hatte keine Lust.

Vielleicht mache ich irgendwann mal eine Neuauflage oder Ergänzung zu diesem Turorials :-D

neolithos 25. Mai 2004 17:25

Re: Snake (das Spiel)
 
Zitat:

Zitat von Pr0g
Vielleicht irgendwann mal, sofern du keins über das von dir genutze System schreibst.

Keine Sorge von mir wird es keine Tutorial geben,

1. Ich bin schlecht im Erklären,
2. Die liebe Reschschrebung,
3. Denke ich das ich dazu schon viel zuviel weis (das soll kein Eigenlob sein).

-> max. ein Tutorial für fortgeschrittene Sachen.

Jens Schumann 25. Mai 2004 17:27

Re: Snake (das Spiel)
 
Zitat:

Zitat von nailor
naja, hab mich ein wenig aifgeregt. aber man muss ja nicht alles schlechtmachen

Ich wollte das Tutorial bestimmt nicht schlecht machen. Eher war es mein ansinnen konstruktive Kritik zu äußern.
Wenn ich mich im Ton vergriffen habe bitte um Entschuldigung.



P.S. Die größten Kritiker der Elche waren früher selber welche. :mrgreen:

MasterC 17. Sep 2004 16:44

Re: Snake (das Spiel)
 
Hi, echt geiles Tutorial! :thumb:

Leider geht der Downloadlink vom Beispiel nicht mehr.

Kannst du das bitte nochmal hochladen?

MFG Chris.

Nicodius 26. Sep 2004 09:05

Re: Snake (das Spiel)
 
jo bitte wwäre nett ;)

gutes TUT!


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:38 Uhr.
Seite 3 von 6     123 45     Letzte »    

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz