![]() |
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 |
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:
, aber keine Ahnung in wie weit sich diese für sowas gebrauchen lassen könnte.
Funktion QueryInterface(Const IID: TGUID; Out Obj): HResult; StdCall;
bei mir gibt es daher diese 2 Funktionen in den Interfaces (siehe )
Delphi-Quellcode:
siehe
Function GetType: TOperatorClass;
Function GetObject: TOperatorObject; ![]() |
Re: Monopoly mit MOD- PlugIn: Problem mit Interface-Realisie
Du kannst in einer Listbox auch Objekte (genauer Zeiger auf Objekte) speichern.
Delphi-Quellcode:
Die Möglichkeit Objekte und Texte zusammen zu speichern ist von TStrings geerbt.
bahnhof := TBahnhof.Create(posNord);
Listbox.Items.AddObject('Nordbahnhof', bahnhof); Deshalb funktioniert dies auch bei Comboboxen und Memos. Um das Objekt wieder herauszuholen, kann man z.B. so vorgehen:
Delphi-Quellcode:
PS: was meinst du mit "Interface"? Ein Userinterface, wie ich es verstanden habe oder ein Interface im Sinne von IUnknown?
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) |
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 05:27 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz