AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Kollisionsabfrage

Ein Thema von tremolo · begonnen am 10. Dez 2009 · letzter Beitrag vom 10. Dez 2009
Antwort Antwort
tremolo

Registriert seit: 10. Dez 2009
1 Beiträge
 
#1

Kollisionsabfrage

  Alt 10. Dez 2009, 12:08
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.
Angehängte Dateien
Dateityp: doc unit_unit2_875.doc (29,5 KB, 10x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von Lumpiluk
Lumpiluk

Registriert seit: 25. Dez 2008
110 Beiträge
 
#2

Re: Kollisionsabfrage

  Alt 10. Dez 2009, 13:19
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]
  Mit Zitat antworten Zitat
10. Dez 2009, 13:52
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

Registriert seit: 10. Mär 2006
34 Beiträge
 
#4

Re: Kollisionsabfrage

  Alt 10. Dez 2009, 15:17
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
Jakson
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:15 Uhr.
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