![]() |
Monopoly-Gundlagenprobleme
Guten Morgen^^
Ich habe vor Monopoly mit Delphi 7 zu programmieren und habe mir schonmal ein paar Gedanken gemacht, aber hänge noch an ein paar Grundlagen.. Meine Delphi Kenntnisse würde ich als solide bezeichnen und hoffe jmd kann mir helfen, auch wenn das Thema schon öfter dran war, jedoch habe ich mit der Suchfunktion nichts passendes gefunden. Also es geht erstmal um den Spielfeldaufbau. ich wollte es mit einem eindimensionalen array machen, das Problem ist jetzt nur die grafische Umsetzung. sollte ich das SPielfeld lieber aus 40 einzelnen Bildern aufbauen oder z.B per Laufzeit im Programm zeichnen lassen? oder sollte ich das Spielfeld aus nur einem Bild aufbauen? doch wie soll ich dann die entsprechenden Felder ansprechen, auf die man klickt? Das zweite Problem ist wie ich die SPielfiguren auf den entsprechenden Feldern darstelle. Meine Letzte Frage ist, ob ich in einen Bildnamen eine Variable in einer Schleife einbauen kann. zum besseren Verständnis ein Beispiel: Ich möchte mehrere Bilder in einer For-Schleife von unsichtbar auf sichtbar machen. Die Bilder beginnen alle mit "img[Zahl]". Gibt es also eine möglichkeit das etwa so zu gestalen:
Delphi-Quellcode:
Ich hoffe man kann mir schnellstmöglich helfen.
for i:=0 to 4 do begin
img[i].visible := true; end; mfg AcidBurn |
Re: Monopoly-Gundlagenprobleme
Du kannst. Eine Möglichkeit wäre, dafür
![]()
Delphi-Quellcode:
Bilder: array of TImage;
initialisieren... (SetLength und so...) for i := Low(Bilder) to High(Bilder) do begin Bilder[i].visible := true; end; |
Re: Monopoly-Gundlagenprobleme
Ich würde dir für die Grafische umesetzung zur Verwendung einer Grafikbibliothek wie zum Beispiel
![]() Die Felder würde ich mit dem Canvas auf ein TBitmap "vorrendern" (je nach Eigenschaften in der Definitionsdatei) und dann in die Grafikbibliothek laden. Ich würde das Spielfeld in einer Definitonsdatei (XML) speichern:
Code:
Schau dir einfach mal ein Paar Tutorials zum Thema Andorra 2D, XML (Jedi SimpleXML/AdSimpleXML.pas) und Offscreen-Bitmaps (TBitmap) an.
<field>
<type>start</type> </field> <field> <name>Badstraße</name> <price>250</price> <type>street</type> <color>Blue</color> </field> <field> <name>Zusatzsteuer</name> <type>tax</type> <cost>3000</cost> </field> <field> <name>Turmstraße</name> <price>275</price> <type>street</type> <color>Blue</color> </field> |
Re: Monopoly-Gundlagenprobleme
Hallo, herzlich Willkommen!
Gleich vorweg: Der Sinn eines Forums ist, eine gemeinsame Lösung zu erarbeiten, von der auch andere profitieren können. Du kannst deine E-Mail-Adresse also gleich wieder entfernen. Das hat gleich den positiven Nebeneffekt, dass Spam-Bots diese nicht finden können. Hast du wirklich die Suchfunktion genutzt? Über ![]() Wenn du Andorra nicht nutzen möchtest/darfst, kannst du das beispielsweise auch mit Records lösen. Das könnte ganz grob so aussehen:
Delphi-Quellcode:
Das lässt sich auch schön objektorientiert lösen, wenn deine Kenntnisse so weit sind. Mit Andorra geht das natürlich schöner und evtl. auch einfacher und performanter. Ggf. sogar mit netten Grafik-Effekten.
type TPrice = record
Street: Integer; StreetHypo: Integer; House: Integer; Hotel: Integer; end; type TField = record Color: TColor; Players = array of Integer; // Spieler, die sich auf dem Feld befinden (Indizes) Price: TPrice; // Kosten HouseNum: Integer; HotelNum: Integer; FieldType: // ... Steuer, Bahnhof, ... end; MyField: array of TField; Aber schaue dir die Monopoly-Themen durch. Da findest du genug Infos über eine mögliche Umsetzung. Grüße |
Re: Monopoly-Gundlagenprobleme
Also erstmal danke für die schnellen Antworten.
Ich denke die Methode mit den records ist für mich am besten, da ich von Andorra noch nie etwas gehört habe und mich damit erst lange zeit befassen müsste. Ein Array von Typ TImage um die einzelnen Spielfelder in einer Schleife sichtbar zu machen ist schön und gut, jedoch wird mein quelltext dadurch auch nicht kürzer, aber vllt gibts ja auch noch eine andere Möglichkeit. Hier ein Ausschnitt wie ich es gelöst habe:
Delphi-Quellcode:
So und wenn ich jetzt das Spielfeld aufbauen will muss ich doch erst deklarieren, dass der Inhalt von "feld.img[Index] := img00" ist oder nicht? ich kann dann zwar eine Schleife für das visible schreiben, aber nicht für die Zuweisungen, von gerad eben.
type
TForm1 = class(TForm) //Spielfelder img00: TImage; img01: TImage; img02: TImage; // Die einzelnen Bilder auf dem Spielfeld bis 40! end; type TFeld = record img: array of TImage; end; var feld: TFeld; Es kommt also folgendes zusammen:
Delphi-Quellcode:
Geht das nicht noch anders zu lösen?
procedure TForm1.Spielfeld_aufbauen;
var i: integer; begin feld.img[0] := img00; feld.img[1] := img01; feld.img[2] := img02; //usw. (Für 40 Felder zu lang!) for i:=low(feld.img) to high(feld.img) do begin feld.img[i].Visible := true; end; end; mfg |
Re: Monopoly-Gundlagenprobleme
FindComponent wurde bereits genannt. Suche doch dann nach diesen Stichwörtern, dann würdest du auch eine Lösung finden:
Delphi-Quellcode:
Deine TImages müssen dann so benannt sein: "img1", "img2", ... ohne führende Nullen.
for i := 1 to 40 do
(FindComponent('img' + IntToStr(i)) as TImage).Visible := true; Der Code macht alle 40 Bilder sichtbar (oder wie viele es beim Monopoly sind). Grüße |
Re: Monopoly-Gundlagenprobleme
Klasse das funktioniert jetz alles :)
Jetzt gibt es nur noch ein Problem vor dem ich stehe und ich hoffe auch da kann mir geholfen werden ;) Ich will nun bei einem Neuen Spiel das gestartet wird ein Fenster aufrufen indem alle Optionen für ein neues Spiel eingestellt werden. Also Spielernamen, Anzahl der SPieler, etc. Ich dachte mir das macht man am besten mit einem neuen Formular (vllt gehts auch besser anders?). Das Problem hierbei ist nur dass das neue Formular eine neue Unit benötigt. und diese neue Unit braucht ja Variablen aus der Ersten Unit. Nur muss ja auch die erste unit variablen der zweiten unit bekomme wenn ich z.b die varbiable SPielername in unit1 deklariert habe, muss sie unit 2 füllen und unit 1 braucht sie dann später wieder um etwas damit zu machen. Nun kann man natürlich im "uses" Teil keine doppelte verzweigung herstellen. Ich hoffe dabei bekomm ich nochmal Hilfe ;) mfg |
Re: Monopoly-Gundlagenprobleme
Man kann problemlos von einer Unit auf die globalen Variablen eine anderen Unit zugreifen. das gilt auch für ein Formular. Besser wäre es aber, die gemeinsam verwendeten Variablen in eine 3. Unit auszulagern, welche dann von den anderen Units zugegriffen wird.
|
Re: Monopoly-Gundlagenprobleme
ihr macht das alles so kompliziert...
... ich mach grad im Retrobereich Monopoly für den Atari Lynx (wer in nicht kennt der guckt mal bei Wiki) Wer die Beta sehen will tippt lynxopoly bei youtube :) Da quetsch ich das ganze mit C und Assembler in 64KB RAM (OK da gehen erstmal 17KB für Loader und Screenbuffer weg also eigentlich 47 KB). Und das ganze passt da rein, kann sogar noch nen hübschen MOD-Sound integrieren :) Ach ja die Original-Feldnamen sind geschützt von Hasbro - sollten also eigene Namen und Texte verwendet werden. Hasbro ist da nicht sehr kulant zumal grad zusammen mit EA-Games die ganzen Brettspiele als Online/und Handy versionen vermarktet werden. Andorra2D ist da woll etwas mit Kanonen auf Spatzen geschossen. Ein Image für das Spielfeld und ein paar Timages für die Figuren sollten ausreichen. Ich würde auch nicht jedem Feld einen Counter reservieren für die Spieler die geparkt sind, da dies unerheblich ist. Sondern ein array wo die spielerposition drin steht spielerbeifeld array[0.. bisspielerzahl] of byte; damit weist du wo der spieler steht der an der reihe ist und kannst dann deine Bildfigur bequem auf das passende Feld ziehen Wenn du hier mit counter für die Spieler auf den einzelnen Feldern rummachst musst du trotzdem irgendwie ermitteln auf welches feld dann gezogen wird und wo dann die grafik hin soll etc.... für die positionen der Figurengrafik am Spielfeld ist es am einfachsten auch ein array zu machen spielerfigurx:array [0..39] of dann kannst du dein figurenimage.left:=spielfigurx[spielerbeifeld[spielernummer]]; machen und gut ist.... wesentlich weniger code und einfacher aufgebaut..... ...natürlich geht das auch mit tausend zeilen XML-Code und ner Datenbank im Hintergrund ;) Gruß Matthias |
Re: Monopoly-Gundlagenprobleme
Also insgeamt sieht es relativ gut aus und ich danke euch für die sehr hilfreichen tipps.
Es gibt bei mir im moment ein größeres und ein kleines Problem. ich fang mit dem großen an: Ich habe ein extra formular erstellt, wo die spieler bestimmte einstellungen beim spielstart vornehmen können. diese wird mit showmodal aufgerufen, etwa so:
Delphi-Quellcode:
Die form wird auch genau so geöffnet wie es sein soll. ich habe dann auf der 2. Form ein paar edit felder usw und einen button beidem die werte aus den edit feldern in variablen geschrieben werden und die Form2 geclosed wird.
procedure TForm1.Opt_NewGame;
begin Form2.ShowModal; end; Das Problem ist jetzt: wenn ich keine Einstellungen vornehme funktioniert alles wunderbar nur sobald ich etwas auf der 2. Frm verändere kommt ne riesen Fehlermeldung vonwegen AccesValidation was weiß ich^^ und der debugger zeigt auf das "end;" hinter ShowModal... Hat vllt einer ne Idee an was das liegen könnte?? Meine 2. Frage ist: ich will dein extra bild für jede Spielfigur machen, nur wie bewege ich diese auf dem spielfeld? ich habe das spielfeld so aufgebaut, dass jedes feld aus einem einzelnen bild besteht. Ich hoffe man kann mir nochmals helfen =) mfg |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:01 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