Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Spielfeld mit Klassen als Felder (https://www.delphipraxis.net/69500-spielfeld-mit-klassen-als-felder.html)

freak4fun 16. Mai 2006 07:45


Spielfeld mit Klassen als Felder
 
Hallo :hi:,
ich möchte einen Bomberman-Klon programmieren, allerdings steh ich jetzt vor einem Problem. Ich möchte ein Spielfeld erstellen mit verschiedenen Klassen als Feldern. In einem Array kann man ja nur gleiche Klassen verwalten. Wie kann ich das also anders anstellen?

MfG
freak

Mavarik 16. Mai 2006 07:49

Re: Spielfeld mit Klassen als Felder
 
Zitat:

Zitat von freak4fun
Spielfeld erstellen mit verschiedenen Klassen als Feldern.

Was bezeichnest Du den als Klassen?

Wie wäre es mit:

Delphi-Quellcode:

type
    TFeldtyp = (nix,Wand, Kirsche, Taler, Bombe);

var
    Feld : array[0..80,0..200] of TFeldtyp;
Frank :coder:

Kroko1999 16. Mai 2006 07:57

Re: Spielfeld mit Klassen als Felder
 
Delphi-Quellcode:
type
TFeld = class
  end;
TWand = class (TFeld)
  end;

TSpielfeld = array[0..1,0..1] of TFeld;

var
  S: TSpielFeld;

S[0,0] := TWand.Create; //etc.

tigerman33 16. Mai 2006 07:59

Re: Spielfeld mit Klassen als Felder
 
Hi,

wenn du tatsächlich Klassen im OOP-Sinne meinst, dann könntest du sie sehr wohl in einem Array verwalten, wenn sie
-entweder von einer gemeinsamen Oberklasse (abstrakte "Feld"-Klasse) abstammen
-oder ein gemeinsames Interface implementieren.

Gruß
Christian

//edit:
Ja, kam ein roter Kasten. :) Ich lass es trotzdem mal stehen--Interface hat schließlich noch keiner gesagt :mrgreen:

freak4fun 16. Mai 2006 08:10

Re: Spielfeld mit Klassen als Felder
 
Zitat:

Zitat von Kroko1999
Delphi-Quellcode:
type
TFeld = class
  end;
TWand = class (TFeld)
  end;

TSpielfeld = array[0..1,0..1] of TFeld;

var
  S: TSpielFeld;

S[0,0] := TWand.Create; //etc.

Ja, so hatte ich es bis jetzt auch. Allerdings hab ich mir gedacht, dass feste Steine keine Items enthalten können und auch andere Sachen nicht. Und der Spielstein wiederum hat wieder andere Eigenschaften. Daher brauchen ja nicht alle Steine auf dem Feld diese Eigenschaften. Die Klasse TFeld müsste ja dann alle Eigenschaften beinhalten, oder seh ich das falsch?

MfG
greak

Mavarik 16. Mai 2006 08:14

Re: Spielfeld mit Klassen als Felder
 
Nein TFeld ist "nur" eine Dummy Klasse...

Die braucht garnix..

Frank

mkinzler 16. Mai 2006 08:14

Re: Spielfeld mit Klassen als Felder
 
Du kannst auch ein zweistufiges Veerebungsschema für die Steine entwerfen, wobei die übergeordnete Klasse die Eigenschaften des Spielsteins nicht haben. In diesem fall kannst du aber auf diesen Aufwand veruchten, da sich die Anzhal der Eigenschaften wohl im Rahemn hält.

freak4fun 16. Mai 2006 10:01

Re: Spielfeld mit Klassen als Felder
 
Zitat:

Zitat von Kroko1999
Delphi-Quellcode:
type
  TFeld = class
 
    Position: TPoint;
  end;
 
  TBomb = class (TFeld)
   
    ExploTime: Integer;
  end;

TSpielfeld = array[0..1,0..1] of TFeld;

var
  S: TSpielFeld;

S[0,0] := TBomb.Create; //etc.

Wenn ich das jetzt so habe kann ich auf die ExploTime nicht zugreifen, bzw. das Objekt Bomb nicht erstellen, weil das TFeld die ExploTime nicht kennt. Oder seh ich das falsch?
ICh hab leider kein Delphi hier um das zu testen. :(

MfG
freak

Kroko1999 16. Mai 2006 10:23

Re: Spielfeld mit Klassen als Felder
 
Delphi-Quellcode:
if S[0,0] is TBomb then TBomb(S[0,0]).ExploTime := 5;

freak4fun 16. Mai 2006 14:06

Re: Spielfeld mit Klassen als Felder
 
Das geht tatsächlich. :) Aber da ergibt sich ein neues Problem. Wenn ich das Spielfeld erstelle sind ja noch keine Bomben auf dem Feld. Wenn ich dann das Feld mit TFeld erstellt hab und dann ein TBomb draus mache, muss ich ja erst das Feld zerstören, das neue Feld erstellen und dann die Bumbenzeit setzen. Wenn die Bombe explodiert muss das wieder alles rückgängig gemacht werden. Geht das nicht einfacher? Ich bin für alle Ideen offen.
Danke euch schonmal. :D

MfG
ein ratloser freak


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:57 Uhr.
Seite 1 von 2  1 2      

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