Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Timer / Bomberman (https://www.delphipraxis.net/87652-timer-bomberman.html)

eif 3. Mär 2007 18:56


Timer / Bomberman
 
hallo... ich soll für schule (info-projekt) ein 2-player bomberman programmieren... meine frage: wie kann ich die bomben zeitverzögert explodieren lassen?`

bin relativer anfänger in delphi.. würde mich über ne ausführliche antwort freuen... danke schon mal... der eif

DGL-luke 3. Mär 2007 19:16

Re: Timer / Bomberman
 
hallo,

ich würd da einen game-loop aufbauen:

Delphi-Quellcode:
while Running do
begin
  CheckBombs; //schauen ob eine Bombe explodieren muss
  CheckKeyStates; //schauen ob ein Key gedrückt ist und du einen Player laufen lassen musst
  Render; //neu malen
end;
zum Bomben checken:

Delphi-Quellcode:
for i := Bombs.Count-1 downto 0  do
begin
  if Bombs[i].ExplosionStamp < GetTickCount then
  begin
    DoExplosion(Bombs[i]);
    Bombs.Delete(i);
  end;
end;
Für die Bomben kannst du eine einfache Liste benutzen, z.B. TList, und einen Typ wie den:

Delphi-Quellcode:
type
  PBomb: ^TBomb;
  TBomb = record
    Strength: Integer;
    ExplosionStamp: Cardinal;
  end;
Wenn die Bombe gelegt wird, musst du Explosionstamp natürlich setzen:

Delphi-Quellcode:
var NewBomb: PBomb;

New(NewBomb);
Bombs.Add(NewBomb);
NewBomb.Strength := x;
NewBomb.ExplosionStamp := GetTickCount + BombTimer; //BombTimer: Cardinal, Millisekunden
Sonst noch irgendwo probleme?

Du kannst natürlcih auch mit Delphi-Referenz durchsuchenTTimer arbeiten.

eif 4. Mär 2007 07:57

Re: Timer / Bomberman
 
joa... danke erstmal... werd mal guggn was ich damit anfangen kann.. wie gesagt... bin ein anfänger ;) ... ich probiers einfach mal...

danke... der eif

DGL-luke 4. Mär 2007 12:33

Re: Timer / Bomberman
 
no Problem.

btw: deine Bomben sollten vielleicht noch ein "IsExploded"-Flag (Boolean-Feld) bekommen, denn wenn es Kettenreaktionen etc. gibt, könntest du in deiner for-schleife auf Index-Probleme stoßen.

Sprich:

Delphi-Quellcode:
for i := Bombs.Count-1 downto 0  do
begin
  if Bombs[i].IsExploded then
    Bombs.Delete[i]
  else
  if Bombs[i].ExplosionStamp < GetTickCount then
  begin
    DoExplosion(Bombs[i]);
    Bombs.Delete(i);
  end;
end;
Im "DoExplosion" würdest du dann verbundene Bomben gleich mit explodieren lassen und nur das "IsExploded"-Flag setzen.


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