AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi "Achtung die Kurve" (360° Snake) Kollisionsabfrage

"Achtung die Kurve" (360° Snake) Kollisionsabfrage

Ein Thema von NicNacMan · begonnen am 9. Jan 2007
Antwort Antwort
Benutzerbild von NicNacMan
NicNacMan

Registriert seit: 28. Mai 2004
Ort: Hamburg
98 Beiträge
 
Delphi 2005 Personal
 
#1

"Achtung die Kurve" (360° Snake) Kollisionsabfrage

  Alt 9. Jan 2007, 23:18
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 )

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...

thx 'n cya NicNacMan
Miniaturansicht angehängter Grafiken
kurve_154.gif  
Angehängte Dateien
Dateityp: exe kurve_505.exe (243,0 KB, 35x aufgerufen)
The Double-Crunch-Peanuts!
SwapIt:
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 23:39 Uhr.
Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf