Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi "Achtung die Kurve" (360° Snake) Kollisionsabfrage (https://www.delphipraxis.net/84002-achtung-die-kurve-360%B0-snake-kollisionsabfrage.html)

NicNacMan 9. Jan 2007 22:18


"Achtung die Kurve" (360° Snake) Kollisionsabfrage
 
Liste der Anhänge anzeigen (Anzahl: 2)
Hi @ all,

ich bin grade dabei das Spiel "Achtung die Kurve" nachzumachen, aber stoße so langsam an die Grenzen von TBitmap :?
Wer das Spiel nicht kennt: Es gab schonmal einen kleinen Thread dazu (der mir aber nicht sehr viel weiter helfen konnte).
(Meine Version, die noch mit nem Bitmap realisiert ist, gibts im Anhang.)

Jetzt möchte ich das ganze etwas besser aufbauen, und hatte an DelphiX gedacht.
Hab mich auch schon n bisschen damit beschäftigt, und ein paar Tuts gemacht, aber ein Problem bleibt:
Die Kollisionsabfrage (ob mit DelphiX oder ohne)

Im Moment überprüfe ich bei jedem Schritt die Farbe des Bitmaps an der entsprechenden Position,
was nicht besonders schnell ist. Hier mal der Grundaufbau:
Delphi-Quellcode:
type
  TSnake = record
    enabled: Boolean;
    x, y: Double;
    angel, points, {...}: Integer;
    name: String[12];
  end;

var
  Player: Array [1..6] of TSnake;

{...}

procedure TfrmMain.TimerTimer(Sender: TObject);
var
  i, c: Integer;
begin
  for i := 1 to 6 do
    if Player[i].enabled then
    begin

      {... Tasten abfragen ...}

      Map.Canvas.MoveTo(Trunc(Player[i].x), Trunc(Player[i].y));

      Player[i].x := Player[i].x + C_SIN[Player[i].angel] * 3;
      Player[i].y := Player[i].y + C_COS[Player[i].angel] * 3;

      Map.Canvas.LineTo(Trunc(Player[i].x), Trunc(Player[i].y));

      c := Pixels[Trunc(Player[i].x), Trunc(Player[i].y)];

      {... c mit der Hintergrundfarbe, und den Farben der einzelnen Lücken vergleichen
          und entsprechend drauf reagieren (Punkteverteilung, usw...}

    end;

  Canvas.Draw(10, 10, Map);
end;
Alles in allem ist die Timer-Prozedur ca 200 Zeilen lang...
(Der Timer hat ein Interval von 16 :roll:)

Nun die Frage:
Wie kann ich das am besten umbauen (also weg vom Bitmap)?

Ich hab schon probiert, für jeden Spieler alle vorherigen Koordinaten bzw. die Richtungsänderungen (was sehr viele sein können) zu speichern,
aber dann dauert das Zeichnen zu lange, da jedes mal alles neu gezeichnet werden muss, und nicht nur der letzte Schritt.
Und ich kann die Kollision nicht mehr einfach über die Farbe feststellen.

Vielleicht hat ja jemand ne gute Idee, oder schonmal sowas gemacht...
Ansonsten viel Spaß beim spielen... :lol:

thx 'n cya NicNacMan


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:34 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