AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Anfängerin muss (ähnliches wie) Frogger programmieren
Thema durchsuchen
Ansicht
Themen-Optionen

Anfängerin muss (ähnliches wie) Frogger programmieren

Ein Thema von Sophia_X · begonnen am 19. Dez 2004 · letzter Beitrag vom 23. Dez 2004
Antwort Antwort
Seite 2 von 4     12 34      
Oxmyx

Registriert seit: 21. Sep 2004
499 Beiträge
 
#11

Re: Brauche unbedingt hilfe!

  Alt 19. Dez 2004, 16:55
Na und? Es ist doch nichts schlimmes, sich Hilfe zu holen, wenn man etwas nicht alleine kann. Besonders beim Programmieren wird sich wohl so ziemlich jeder regelmäßig neues Wissen aneignen müssen, da niemand alles auf Anhieb wissen kann.

Zum Thema: Am einfachsten machst du wohl alles mit Images. Den Hintergrund, die Autos und deinen Frosch. Mit einem Timer bewegst du nun die Autos vorwärts (vielleicht auch mit unterschiedlicher Geschwindigkeit), und überprüfst, ob sich die Images von dem Frosch mit einem beliebigen Auto schneiden (anhand der Left-, Top-, Width-, und Height-Eigenschaften). Wenn das zutrifft, wurde der Frosch überfahren. Wenn die Top-Eigenschaft des Frosch-Images einen bestimmten Wert unterschreitet (dieser Wert sollte oberhalb der Straße liegen), dann hat der Spieler gewonnen.
  Mit Zitat antworten Zitat
Benutzerbild von Nikolas
Nikolas

Registriert seit: 28. Jul 2003
1.528 Beiträge
 
Delphi 2005 Personal
 
#12

Re: Brauche unbedingt hilfe!

  Alt 19. Dez 2004, 17:04
Eine Idee für die Kollisionsabfrage wäre diese:
Du definierst dir ein paar records
Delphi-Quellcode:
TFrosch = record
     Min,breite,Fahrbahn: integer;
     end;

TAuto = record
     min,breite, Fahrbahn, Geschw : integer;
     Bild: TImage;
     end;
Jetzt kannst du ein dynamisches array of TAuto erstellen und beim Programmstart die Autos mit Werten fühlen. Min ist der X-Pixelwert der linken oberen Ecke und in Breite kommt die Länge deines Auto-Images. Fahrbahn gibt an, auf welcher Fahrbahn dein Auto gerade ist und in Geschw. kannst du Speichern, um wie viel Px sich dieses Auto nach jedem Zeitschritt befindet. Das Min beim Frosch kannst du beim Programmstart etwa in die Mitte deines Forms setzen.

Jetzt brauchst du einen Timer. Über dessen Intervall kannst du auch die Schwierigkeit steuern.
In Ontimer-Event kommt dann so was:
Delphi-Quellcode:
for i:=0 to length(Autoarray)-1 do // schleife über alle Autos
begin
if Autoarray[i].Fahrbahn = Frosch.Fahrbahn then // Auto und Frosch auf gleicher Fahrbahn
   begin
   if (Sich das Auto mit dem Frosch überlappt) then
       Showmessage('autsch');
end;

// Ausserdem werden alle Autos verschoben:
for i:=0 to length(autoarray)-1 do
begin
Autoarray[i].min:=Autoarray[i].min+Autoarray[i].geschw
Autoarray[i].bild.left:= Autoarray[i].min; // Das Bild wird verschoben
Damit müsstest du erstmal hinkommen. Bei weiteren Fragen weisst du ja, wo du fragen kannst. Den Text oben habe ich nicht kompiliert, d.h. es kann gut sein, dass du ihn überarbeiten musst.
Erwarte das Beste und bereite dich auf das Schlimmste vor.
  Mit Zitat antworten Zitat
Sophia_X

Registriert seit: 19. Dez 2004
16 Beiträge
 
#13

Re: Anfängerin muss (ähnliches wie) Frogger programmieren

  Alt 19. Dez 2004, 18:51
Also erstmal möchte ich mich für die vielen Antworten bedanken! Ihr glaubt gar nicht, wie sehr ihr mir damit eine Freude bereitet! Mit euch kann ich es schaffen.

Ok, ihr habt natürlich Recht! Mit den Pfeiltasten ist es viel besser als mit den Button! Nur würde ich es vielleicht noch mit einem Button hinkriegen. Wie lautet der Quelltext, wenn ich ein Image (Frosch), um ein Feld (hoffe es ist der richtige Ausdruck) nach vorne und nach hinten bewewege. Also um den Y-Wert.

Zu den Records. Es ist mir klar, dass es ein Typ ist. Doch habe ich von Records (sorry) nicht wirklich viel gehört. Deklariert man so ein Image (hier also unser auto und frosch)?

Ok, von Array habe ich schonmal gehört Wusste gar nicht, dass die dynamisch sind. Meinst du so ein Array: var variable:array [1..10] of integer; ?

Für was steht die Abkürzung "min"? Die Position des Frosches am Anfang?


Danke, Stany! Ja, am besten ist es, wenn ich die Fahrbahn mit 8 Spuren mache. Damit der Lehrer es nicht gleich schafft.

Also dieses Left, Top, Width und Height stehen doch für die Position, ne? Height für höhe und tiefe? Width für breite? Oder wie war das?

Zur Kollision: Also, der Frosch müsste matsch sein, wenn das Auto genau auf die Koordinate des Frosches ist. Toxman, warum werden alle Autos verschoben? Wozu brauche ich diesen Abschnitt?
Deine Idee ist für mich super, wenn es um die Frage der Kollision geht! Und zeigt mir, wie wenig ich über Delphi noch weiß.

Wie kriege ich den Zufall hin, dass ein Auto kommt oder nicht?
  Mit Zitat antworten Zitat
Benutzerbild von Nikolas
Nikolas

Registriert seit: 28. Jul 2003
1.528 Beiträge
 
Delphi 2005 Personal
 
#14

Re: Anfängerin muss (ähnliches wie) Frogger programmieren

  Alt 19. Dez 2004, 19:01
Imho kannst du das ganze mit Height ignorieren, da das ja durch die Abfrage, ob das Auto auf der selben Bahn ist wie der Frosch, geklärt ist.
Zitat:
Min ist der X-Pixelwert der linken oberen Ecke
Mit Records kannst du einfach ein paar Variablen zusammenfassen. Sonst müsstest du für jede Eigenschaft ein eigenes Array bauen.

Zu den Arrays: Du kannst Arrays statisch deklarieren [foo: array[0..5] of Integer] oder dynamisch: [foo1 := array of integer]. Wenn du schon zu Beginn des Programmes weisst, wie viele Elemente du brauchst, ist das statische natürlich das richtige für dich. Wenn du allerdings nicht weisst, wie viele Autos es geben wird, musst du mit einem dynamischen arbeiten. Die Länge kannst du per Delphi-Referenz durchsuchensetlength festlegen.

Ein Image nach oben verrutschen: Image1.top:=image1.top-1; Nach Links [rechts]: Image1.left:= Image1.left - [+] 1;

Zum Zermatschen: Da das Auto und der Frosch aber nicht nur Punkte sind, musst du dir überlegen, wie die Ecken liegen müssen, dass sich Frosch und Auto überschneiden. Wenn also z.B. die Linke ecke der Frosches links von der Rechten Ecke des Autos liegt und gleichzeitig die Rechte Ecke des Frosches rechts von der Rechten Ecke des Autos liegt, ist der Frosch Platt. Dementsprechend musst du dir noch überlegen, wie es aussieht, wenn der Frosch in das Auto reinspringt, also nicht mehr von der Spitze mitgenommen wird. Das gibt dann viele Hübsche If's
Erwarte das Beste und bereite dich auf das Schlimmste vor.
  Mit Zitat antworten Zitat
supermuckl

Registriert seit: 1. Feb 2003
1.340 Beiträge
 
FreePascal / Lazarus
 
#15

Re: Anfängerin muss (ähnliches wie) Frogger programmieren

  Alt 19. Dez 2004, 19:56
soll es eine pixelgenaue kollision geben ?
dann wirds ein wenig schwerer.. bisschen scanline und dann geht das
Das echte Leben ist was für Leute...
... die im Internet keine Freunde finden!
  Mit Zitat antworten Zitat
Sophia_X

Registriert seit: 19. Dez 2004
16 Beiträge
 
#16

Re: Anfängerin muss (ähnliches wie) Frogger programmieren

  Alt 19. Dez 2004, 20:30
Zitat von Toxman:
Wenn also z.B. die Linke ecke der Frosches links von der Rechten Ecke des Autos liegt und gleichzeitig die Rechte Ecke des Frosches rechts von der Rechten Ecke des Autos liegt, ist der Frosch Platt. Dementsprechend musst du dir noch überlegen, wie es aussieht, wenn der Frosch in das Auto reinspringt, also nicht mehr von der Spitze mitgenommen wird. Das gibt dann viele Hübsche If's
Bereite mir doch nicht schon gleich so eine Panik

Nein, du hast natürlich völlig Recht! Da muss ich mir wirklich ein Kopf machen!

Ich glaube, ich nehme die Variante, dass ich schon weiß, wie viel Autos da sind. Oder ist die schwerer? Nehmen wir an 4 Autotypen?

Wegen Pfeiltasten für den Frosch: Kann ich diesen Quelltext so übernehmen? Also forsch1.top:=frosch.top-1; ?? Geht der dann mit den Pfeiltasten hoch und runter?
Nach links und rechts brauch er nicht gehen.

Pixelgenau? Nö, dass einfachere müsste doch auch reichen, ne?

Warum brauche ich den Pixeltwert der linken oberen Ecke? Ist der nicht 0 ??
  Mit Zitat antworten Zitat
Tubos

Registriert seit: 25. Feb 2004
Ort: Yspertal (Niederösterreich)
1.014 Beiträge
 
Delphi 7 Personal
 
#17

Re: Anfängerin muss (ähnliches wie) Frogger programmieren

  Alt 19. Dez 2004, 21:04
Zitat:
Wegen Pfeiltasten für den Frosch: Kann ich diesen Quelltext so übernehmen? Also forsch1.top:=frosch.top-1; ?? Geht der dann mit den Pfeiltasten hoch und runter?
Wenn du das in die OnKey-Methode reinschreibst und überprüfst welche Pfeiltaste gedrückt worden ist, dann geht das.
Lukas
  Mit Zitat antworten Zitat
Benutzerbild von Nikolas
Nikolas

Registriert seit: 28. Jul 2003
1.528 Beiträge
 
Delphi 2005 Personal
 
#18

Re: Anfängerin muss (ähnliches wie) Frogger programmieren

  Alt 19. Dez 2004, 21:28
Zitat:
Warum brauche ich den Pixeltwert der linken oberen Ecke? Ist der nicht 0 ??
Es geht immer um den PixelWert des jeweiligen Images.

Zu den Froschbewegungen: Wenn du es so reinschreibst, wird der Spieler ein paar Hundert mal klicken müssen um den Frosch ans Ziel zu bringen. Schreib lieber eine Funktion, die den Frosch je nach Fahrbahn bewegt. Also etwa so:
Delphi-Quellcode:
// Dahin, wo du die Pfeiltaste abfängst:
If (Pfeiltaste nach oben) then
begin
 Frosch.Fahrbahn := Frosch.Fahrbahn +1;
   Frosch.image.top:= (x-wert der untersten Fahrbahn) + Frosch.Fahrbahn * (Höhe einer Fahrbahn);
end;
So hüpft der Frosch eine Fahrbahn nach oben.
Erwarte das Beste und bereite dich auf das Schlimmste vor.
  Mit Zitat antworten Zitat
Sophia_X

Registriert seit: 19. Dez 2004
16 Beiträge
 
#19

Re: Anfängerin muss (ähnliches wie) Frogger programmieren

  Alt 20. Dez 2004, 16:31
Hi Jungs,

habe jetzt erstmal per TImage meine Spielfläche fertig. Guckst du hier:

http://people.freenet.de/bmw-forum-b...flaechejpg.jpg


Ok, da habe ich mir jetzt nicht wirklich viel Mühe gegeben Aber darauf kommt es ja nicht unbedingt an, ne?

Dieses Spielfeld ist 500x440 groß! Es gibt 11 Bahnen.

1. Wo der Frosch beginnt zu starten 2.-5. Ist die Straße, wo die Autos fahren. Auf Bahn Nummero 6 darf man sich erstmal erholen. 7-10 ist dann wieder die Straße, wo die Autos fahren und bei Bahn 11 hat man dieses (für mich) aufwendige Spiel geschafft.

Daher besteht jede Bahn aus der Länge von 40 Pixel! 11*40=440 Die Breite 500 habe ich jetzt mal so nach Schnauze gewählt. Mein Frosch soll also 40 Pixel lang sein und Breit... joa... 20 Pixel?

Neben dem Image (Spielfeld) habe ich ein Button namens "Start". Wie es sich von selbst erklärt soll das Spiel beginnen, wenn man ihn drückt.

Für euch ist das bestimmt ein Kinderkram so was zu programmieren und ihr macht bestimmt so was im Schlaf. Aber hey, dass ist mein erstes Spiel Und dann noch mit dem Notendruck...

Also liebe Programmier-Freaks, soll ich erstmal nach dem Implementationbereich ein Array für meine 4 Autos deklarieren? Oder erstmal ein doppelklick auf den Button? Und dann eine Anweisung erteilen?
  Mit Zitat antworten Zitat
Oxmyx

Registriert seit: 21. Sep 2004
499 Beiträge
 
#20

Re: Anfängerin muss (ähnliches wie) Frogger programmieren

  Alt 20. Dez 2004, 17:08
Ich denke die einfachste Lösung ist diese:

Du setzt auf jede Fahrspur ein TImage mit dem Auto-Bild drin. Dann nimmst du einen Timer, und mit diesem bewegst du alle Autos pro Zeiteinheit einen gewissen Wert zum rechten Rand. Wenn die x-Koordinate eines Auto-TImages (also die Left-Eigenschaft des Images) einen bestimmten Wert überschreitet (in deinem Fall z.B. 500), dann setzt du es zurück an den Anfang der Straße (und lädst vielleicht ein anderes Auto-Bild). Auf diese Weise kann auf jeder Fahrspur immer nur ein einziges Auto fahren, aber wenn man etwas mit der Geschwindigkeit der Autos spielt, wird das schon nicht zu einfach.
Zusätzlich überprüfst du noch in jedem Timer-Aufruf, ob eines der Autos mit dem Frosch zusammengestoßen ist. Das geht über die Left- und Top-Eigenschaften (welche die x-, und y-Koordinate des linken oberen Eckpunkts der Bilder angeben) und der Width- und Height-Eigenschaften (welche die Breite und die Höhe der Bilder angeben).

Die Überprüfung, ob das Frosch-Image mit einem Auto-Image zusammengestoßen ist, funktioniert folgendermaßen:
Delphi-Quellcode:
if (Frosch.Left + Frosch.Width > Auto.Left) and
   (Frosch.Left < Auto.Left + Auto.Width) and
   (Frosch.Top + Frosch.Height > Auto.Top) and
   (Frosch.Top < Auto.Top + Auto.Height) then
begin
  // Zusammenstoß!
end;
In einer Schleife kannst du überprüfen, ob der Frosch mit einem beliebigen Auto zusammengestoßen ist. Wenn du die Auto-Images in aufsteigender Reihenfolge benennst (also z.B. Auto1, Auto2, Auto3, Auto4, etc.), dann könntest du das so machen:
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
var
  Auto: TImage;
  AutoName: array[0..31] of Char;
  i: Integer;
begin
  for i := 1 to 10 do begin
    ZeroMemory(@AutoName, sizeof(AutoName));
    strlfmt(@AutoName, 32, 'Auto%d', [i]);

    Auto := TImage(FindComponent(AutoName));

    if (Frosch.Left + Frosch.Width > Auto.Left) and
       (Frosch.Left < Auto.Left + Auto.Width) and
       (Frosch.Top + Frosch.Height > Auto.Top) and
       (Frosch.Top < Auto.Top + Auto.Height) then
    begin
      // Zustammenstoß mit Auto i!
    end;
  end;
end;
In diese Timerprozedur kannst du dann noch eine Schleife schreiben, in der jedes Auto um einen gewissen Wert nach rechts bewegt wird, und dass ein Auto zurückgesetzt wird, wenn es den rechten Rand erreicht hat.

Die Bewegung des Frosches machst du in einer OnKeyDown-Prozedur.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 4     12 34      


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 14:43 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