Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Monopoly mit MOD- PlugIn: Problem mit Interface-Realisierung (https://www.delphipraxis.net/130396-monopoly-mit-mod-plugin-problem-mit-interface-realisierung.html)

64Jabor 7. Mär 2009 18:08


Monopoly mit MOD- PlugIn: Problem mit Interface-Realisierung
 
Hey DP,

ich versuche gerade das beliebte (oder auch nicht :D) Gesellschaftsspiel "Monopoly" in Delphi umzusetzen.
Das ganze soll allerdings so sein, dass man nicht nur das Grundspiel, sondern auch Varianten von Monopoly spielen kann.
Dazu verwende ich INI-Dateien mit einer .MOD-Endung.
Soviel allgemein zu meinem Projekt.


Das eigentliche Problem was ich habe ist das Folgende:

Ich habe eigene Klassen erstellt, um das Spiel zu realisieren.
Dazu zählt zu einem der Spieler, aber auch die Spielkarte und damit meine ich den Vorfahre von allen Straßen, Bahnhöfen, Werken sowie Spezialfelder die es in Monopoly gibt und in Varianten geben könnte.

Nun habe ich ein "Interface" erstellt, indem ich neben einem TImage, auf dessen Canvas-Objekt später das Spielfeld gezeichnet werden soll (ob das die beste Lösung ist weiß ich auch noch nicht so ganz :D), eine ListBox erstellt habe, in der man die eigenen Karten auswählen kann um dann mit weiteren Button Häuser zu bauen/entfernen, das Grundstück belasten/entlasten kann etc.

Mein Problem ist, dass in der ListBox natürlich alle Spielkarten angezeigt werden sollten, also Straßen und Werke und Bahnhöfe!
Wie entscheide ich aber nun, von welchem Typ das aktuelle ausgewählte Element der ListBox ist, denn auf ein Werk kann man bekanntlich kein Haus bauen usw.
Ich habe nur den Namen des Elementes, nur wie komme ich davon auf den Typ des Objektes das dahinter steckt?

Grüße, 64Jabor

himitsu 7. Mär 2009 18:22

Re: Monopoly mit MOD- PlugIn: Problem mit Interface-Realisie
 
if obj is TMyObjectTyp then, aber da das bei Interfaces nicht geht, wirst du vermutlich eine neue Funktion integrieren müssen, wo du dann das Interface frags was es ist.

Entweder du übergist dann der Funktion eine Klasse und fragst "bist du sowas?", einen String (Namen der Klasse) oder
so hab ich das im letzen Projekt gemacht, eine Funktion, welche eine Objektreferenz des hinter dem Interface liegenden Objektes liefert ... damit kann man dann allerhand machen (z.B. auch die obrige If-Abfrage)


Es gibt bei interfaces auch die
Delphi-Quellcode:
Funktion QueryInterface(Const IID: TGUID; Out Obj): HResult; StdCall;
, aber keine Ahnung in wie weit sich diese für sowas gebrauchen lassen könnte.

bei mir gibt es daher diese 2 Funktionen in den Interfaces (siehe )
Delphi-Quellcode:
Function GetType:  TOperatorClass;
Function GetObject: TOperatorObject;
siehe Hier im Forum suchenIOperatorInterface

sx2008 7. Mär 2009 18:26

Re: Monopoly mit MOD- PlugIn: Problem mit Interface-Realisie
 
Du kannst in einer Listbox auch Objekte (genauer Zeiger auf Objekte) speichern.
Delphi-Quellcode:
bahnhof := TBahnhof.Create(posNord);
Listbox.Items.AddObject('Nordbahnhof', bahnhof);
Die Möglichkeit Objekte und Texte zusammen zu speichern ist von TStrings geerbt.
Deshalb funktioniert dies auch bei Comboboxen und Memos.

Um das Objekt wieder herauszuholen, kann man z.B. so vorgehen:
Delphi-Quellcode:
idx := Listbox.ItemIndex;
if idx <> -1 then
begin
  obj := Listbox.Items.Objects[idx];
  if obj is TBahnhof then
     TBahnhof(obj).kaufen(user)
  else if obj is TStrasse then
     TStrasse(obj).Platzieren(spielfeld)
PS: was meinst du mit "Interface"? Ein Userinterface, wie ich es verstanden habe oder ein Interface im Sinne von IUnknown?

64Jabor 7. Mär 2009 18:45

Re: Monopoly mit MOD- PlugIn: Problem mit Interface-Realisie
 
Ahk, vielen Dank.
Dass die ListBox das kann wusste ich nicht, das ist allerdings wunderbar =)

Ja mit Interface meine ich ein Userinterface, in dem der Spieler sein aktuelles Geld, seine Straßen und einige Statistiken einsehen kann!


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