Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Achtung die Kurve - mein 1. "großes" Projekt (https://www.delphipraxis.net/129028-achtung-die-kurve-mein-1-grosses-projekt.html)

nuclearping 12. Feb 2009 08:57

Re: Achtung die Kurve - mein 1. "großes" Projekt
 
Ist das echt so? Schwanz soll sich nie bewegen? Da isses ja garkein richtiges Snake, mit fressen und wachsen! :pale:

MaToBe 12. Feb 2009 16:20

Re: Achtung die Kurve - mein 1. "großes" Projekt
 
wow danke

den quellcode werde ich mir mal genau anschauen.

und wenn ich verständnisfragen dazu habe oder es an meiner eigenen Umsetzung doch noch hackt melde ich mich hier nochmale

MaToBe 13. Feb 2009 15:39

Re: Achtung die Kurve - mein 1. "großes" Projekt
 
Delphi-Quellcode:
procedure TfPlayerChoice.btnReadyClick(Sender: TObject);
var Eingabe : string;
begin
    Eingabe := edtEingabe.Text;

    if Eingabe = '' then
      ShowMessage('Bitte geben sie einen Namen ein.')
    else
      if fMain.AvatarNumber = 0 then
        ShowMessage('Bitte suchen sie einen Avatar aus.')
      else
      begin
        case fMain.actualPlayerSetting of
          1:fMain.aPlayer1.ImageIndex := fMain.AvatarNumber;
            fMain.aPlayer1.Caption := Eingabe;
           end;
        end;
end;
ist nich ganz das Thema der Topic, gehört aber zu meinem Projekt.

Delphi-Quellcode:
fMain.aPlayer1.Caption := Eingabe;
hier sagt er mir "konstantenausdruck erwartet" was stimmt da nicht?

nuclearping 13. Feb 2009 16:03

Re: Achtung die Kurve - mein 1. "großes" Projekt
 
Du brauchst bei mehrzeiligen case-Anweisungen begin und end.

MaToBe 15. Feb 2009 19:30

Re: Achtung die Kurve - mein 1. "großes" Projekt
 
Zitat:

Zitat von Looper
Hey,

Wenn du Fragen hast, frag einfach. Die meisten Fragen zu diesem Spiel, müsste ich eigentlich beantworten können.

Gruß Looper

Hallo Looper, ich habe mir deinen Scourcecode mal angeschaut, aber ich versteh eigentlich überhaupt nicht, wie du die Schlange vorwärts bewegst.

Du berechnest irgendwie die neuen Koordinaten und lässt die Schlange dann auf diese gehen, aber wir machst du das?

Looper 15. Feb 2009 21:21

Re: Achtung die Kurve - mein 1. "großes" Projekt
 
Zitat:

Du berechnest irgendwie die neuen Koordinaten
Das mache ich in der Klasse TZaPlayerCalculator in der Funktion Calculate, aber erstmal grundsätzliches zum Aufbau des Programms, sonst ist das glaube ich ziemlich verwirrend :-D :

Die Klasse TZaGame verwaltet das gesamte Spiel, d.h. alle 35 ms. (OnIdle-Ereignis + TAdPerformanceCounter) werden alle Spieler neu berechnet (Positionen + Kollisionsabfrage + Punkte) und alle 30 Durchgänge werden die Eigenschaften auf der rechten Seite neu gezeichnet (DrawPointsPlayer).

Gut. Die Berechnung der Spieler findet in der Klasse TZaPlayerCalculator statt (CalculatePlayer) (Jeder Spieler ist übrigens eine Instanz von TZaPlayer). Jeder Spieler hat eine Geschwindigkeit, die variiert (Items + random).Die Methode TZaPlayerCalculator.CalculatePlayer ruft auch die Methode TZaPlayerCalculator.Calculate auf, in der die Positionen anhand der Gradzahl und Geschwindigkeit berechnet werden. Damit die Kurven nun auch geschwindigkeitsunabhängig gleich scharf gefahren werden können, benutze ich eine Schleife (Die Geschwindigkeit ist in dem Feld TZaPlayer.Speed : Integer gespeichert.
Delphi-Quellcode:
repeat
    if getasynckeystate(APlayer.Keys.Right)<>0 then APlayer.Angle := APlayer.Angle + 2;;
    if getasynckeystate(APlayer.Keys.Left)<>0 then APlayer.Angle := APlayer.Angle - 2;
    inc(SpeedCounter);
// [...]
    FNewCoordinates[Speedcounter-1].X := APlayer.X + FCosinus[round(APlayer.Angle)];
    FNewCoordinates[Speedcounter-1].Y := APlayer.Y + FSinus[round(APlayer.Angle)];
    APlayer.X := FNewCoordinates[Speedcounter-1].X;
    APlayer.Y := FNewCoordinates[Speedcounter-1].Y;
// [...]
    APlayer.Distance := APlayer.Distance + 1;
// [...]
  until SpeedCounter=APlayer.Speed;
Die Koordinaten berechnen sich also ganz leicht mit Sinus und Cosinus. Nun werden alle Koordinaten in dem Array FNewCoordinates zwischengepeichert um später in der Methode TZaPlayerCalculator.Draw gezeichnet zu werden (Diese wird später in der Methode TZaPlayerCalculator.CalculatePlayer aufegrufen).
Hoffe das ist einigermaßen verständlich, aber du musst dich garantiert ein bischen hineinknieen müssen, damit das Spiel später richtig laufen wird. Sobal du das erste Mal die Schlangen sich richtig bewegen siehst ist die Freude aber so groß, dass es sich allemal lohnt.

Gruß und keine Scheu vor weiteren Fragen, Looper


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:09 Uhr.
Seite 2 von 2     12   

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