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