Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Kollisionsabfrage (https://www.delphipraxis.net/144546-kollisionsabfrage.html)

tremolo 10. Dez 2009 12:08


Kollisionsabfrage
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hey Leute,

meine Gruppe und ich müssen für unseren Informatikkurs ein Spiel oder eine Animation in Delphi programmieren. Wir haben uns für das Spiel Snake entschieden.
Anregungen haben wir durch euer Forum, genauer durch diese Seite bekommen.
Nun wollen wir ja nicht nach dem Verfahren "Copy und Paste" arbeiten.
Wir haben uns jetzt für unser nächstes Level entschieden, den Schwierigkeitsgrad zu erhöhen, indem wir Wände einbauen.
Unser Problem ist nun, dass wir das Prinzip der Kollisionsabfrage kennen, dieses aber nicht mit dem Prinzip der Arrays vereinbaren können bzw. nicht wissen, wie man das genau umsetzt.

Also konkreter formuliert: Wie kann man in eine vordefinierte Map mit Arrays Hindernisse einbauen?
Gute Antworten würden wir gerne begrüßen.

Unseren Quelltext haben wir beigefügt.

Vielen Dank im Voraus.

Lumpiluk 10. Dez 2009 13:19

Re: Kollisionsabfrage
 
Ihr habt ja vielleicht schon die Kollision der Schlange mit sich selbst und mit den Äpfeln/Mäusen eingebaut?
So ähnlich sollte das auch mit den Wänden gehen:
- Wände als zweidimensionales/n (? :) ) Array laden
- in einer doppelten For-Schleife die Position des Schlangenkopfes mit der Position der aktuellen Wand vergleichen

[edit] Warum bitte speichert ihr den Quellcode als *.doc?! :)
Ihr habt es ja schon fast:

Delphi-Quellcode:
for i := 0 to breite do
  for j := 0 to hoehe do
  begin
    case map[i, j] of
      -1: col := farben[1];
      0: col := farben[0];
    else
      col := farben[2];
    end;
    PaintBox1.Canvas.Brush.Color:=col;
    PaintBox1.Canvas.FillRect(Rect(i*raster, j*raster, (i+1)*raster, (j+1)*raster));
  end;
//jetzt nur noch das gleiche mit dem Vergleich zwischen Wand- und Kopfposition ;)
Allerdings: Wie macht ihr das, wenn die Schlange mal "um die Ecke" geht? Wie ich das sehe, habt ihr zwar die Position des Kopfes, aber nur die Länge des gesamten Körpers. Bei meinem Snake-Spiel hatte ich für die Positionen der Körpersegmente ein eigenes Array benutzt. Oder werden die bei euch auch in der Map gespeichert..?[edit]

DP-Maintenance 10. Dez 2009 13:52

DP-Maintenance
 
Dieses Thema wurde von "Daniel G" von "Tutorials und Kurse" nach "Sonstige Fragen zu Delphi" verschoben.
Der Thread fühlt sich in der Sparte Tutorials/Kurse nicht wirklich wohl...

Jakson 10. Dez 2009 15:17

Re: Kollisionsabfrage
 
Meinereiner hat das vor Jahren mal so gelöst:

Die gesamte Welt als zweidimensionales, dynamisches Array vom Typ Record.
Delphi-Quellcode:
Darin waren enthalten:
Byte 0..4  = Typ des Feldes (Frei, Mauer, Apfel, Start1, Start2 ,...)
Byte 0..17 =
+ Mauer: Parameter Art der Mauer (-, |, 4 x Ecke Innen, 4 x Ecke Außen, 4 x Schmale Ecke und 4 x Endstücke)
+ Apfel: Sec. seit einfügen (Punkte)
+ Start: Richtung des Spielers
Die Daten konnten in eine Datei geschrieben/gelesen werden wobei mehrere Levels mit unterschiedlicher Spielfeldgrößen in einer Datei möglich sind.

Die Schlange hat ihr eigenes Dynamisches Array mit dem Positionen und der Ausrichtung der Schlange.
Zusätzlich gibts noch einen Zähler wie viele Elemente am ende noch einzufügen sind.


Der Ablauf war bei mir:

1. Schlangenkopf und ende an Startpunkt setzen und ersten Apfel platzieren.
2. Timer Starten
3. Timer löst aus
4. Tasten abfragen
5. Bestimmen wo als nächstes der Schlangenkopf hin kommt.
6. Überprüfen ob diese Position frei ist.
6.0 Frei
6.1 Wand oder Schlange => Schlange Tot
6.2 Apfel => Schlange verlängern und neuen Apfel setzen
7. Spielfeld Zeichnen
8. Maximale Anzahl an Äpfel gesammelt => Gewonnen. Nächstes Level.

Der Netzwerk Modus war da das größere Stück Arbeit.

Fröhliches Coden :coder:
Jakson


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:40 Uhr.

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