AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Monopoly-Gundlagenprobleme
Thema durchsuchen
Ansicht
Themen-Optionen

Monopoly-Gundlagenprobleme

Ein Thema von AcidBurn · begonnen am 29. Mär 2009 · letzter Beitrag vom 1. Apr 2009
Antwort Antwort
Seite 1 von 2  1 2      
AcidBurn

Registriert seit: 29. Mär 2009
6 Beiträge
 
#1

Monopoly-Gundlagenprobleme

  Alt 29. Mär 2009, 11:42
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:
     for i:=0 to 4 do begin
        img[i].visible := true;
     end;
Ich hoffe man kann mir schnellstmöglich helfen.
mfg
AcidBurn
  Mit Zitat antworten Zitat
Benutzerbild von Meflin
Meflin

Registriert seit: 21. Aug 2003
4.856 Beiträge
 
#2

Re: Monopoly-Gundlagenprobleme

  Alt 29. Mär 2009, 11:50
Du kannst. Eine Möglichkeit wäre, dafür Hier im Forum suchenFindComponent zu verwenden, aber die sauberere wäre, die Images in einem array o.ä. zu verwalten
Delphi-Quellcode:
Bilder: array of TImage;

initialisieren... (SetLength und so...)

for i := Low(Bilder) to High(Bilder) do begin
  Bilder[i].visible := true;
end;
  Mit Zitat antworten Zitat
Benutzerbild von igel457
igel457

Registriert seit: 31. Aug 2005
1.622 Beiträge
 
FreePascal / Lazarus
 
#3

Re: Monopoly-Gundlagenprobleme

  Alt 29. Mär 2009, 11:52
Ich würde dir für die Grafische umesetzung zur Verwendung einer Grafikbibliothek wie zum Beispiel Andorra 2D raten. Die Spielfelder kannst du dann einfach als Sprite darstellen. Außerdem lassen sich so viel einfacher weitere Elemente des Spielfelds anzeigen und 3D-Effekte einfügen. Die Mausklickabfrage wird dir so auch abgenommen.
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:
<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>
Schau dir einfach mal ein Paar Tutorials zum Thema Andorra 2D, XML (Jedi SimpleXML/AdSimpleXML.pas) und Offscreen-Bitmaps (TBitmap) an.
Andreas
"Sollen sich auch alle schämen, die gedankenlos sich der Wunder der Wissenschaft und Technik bedienen, und nicht mehr davon geistig erfasst haben als die Kuh von der Botanik der Pflanzen, die sie mit Wohlbehagen frisst." - Albert Einstein
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Monopoly-Gundlagenprobleme

  Alt 29. Mär 2009, 11:58
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 Hier im Forum suchenMonopoly finden sich so viele Themen, auch mit Lösungsansätzen.

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:
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;
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.

Aber schaue dir die Monopoly-Themen durch. Da findest du genug Infos über eine mögliche Umsetzung.

Grüße
  Mit Zitat antworten Zitat
AcidBurn

Registriert seit: 29. Mär 2009
6 Beiträge
 
#5

Re: Monopoly-Gundlagenprobleme

  Alt 29. Mär 2009, 12:38
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:
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;
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.
Es kommt also folgendes zusammen:

Delphi-Quellcode:
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;
Geht das nicht noch anders zu lösen?

mfg
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Monopoly-Gundlagenprobleme

  Alt 29. Mär 2009, 12:44
FindComponent wurde bereits genannt. Suche doch dann nach diesen Stichwörtern, dann würdest du auch eine Lösung finden:

Delphi-Quellcode:
for i := 1 to 40 do
  (FindComponent('img' + IntToStr(i)) as TImage).Visible := true;
Deine TImages müssen dann so benannt sein: "img1", "img2", ... ohne führende Nullen.
Der Code macht alle 40 Bilder sichtbar (oder wie viele es beim Monopoly sind).

Grüße
  Mit Zitat antworten Zitat
AcidBurn

Registriert seit: 29. Mär 2009
6 Beiträge
 
#7

Re: Monopoly-Gundlagenprobleme

  Alt 29. Mär 2009, 18:41
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
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Monopoly-Gundlagenprobleme

  Alt 29. Mär 2009, 18:47
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.
Markus Kinzler
  Mit Zitat antworten Zitat
matashen

Registriert seit: 29. Jan 2007
Ort: daheim
460 Beiträge
 
Delphi XE2 Enterprise
 
#9

Re: Monopoly-Gundlagenprobleme

  Alt 30. Mär 2009, 08:23
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
Matthias
Das Leben ist eines der härtesten.
  Mit Zitat antworten Zitat
AcidBurn

Registriert seit: 29. Mär 2009
6 Beiträge
 
#10

Re: Monopoly-Gundlagenprobleme

  Alt 30. Mär 2009, 20:36
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:
procedure TForm1.Opt_NewGame;
begin
  Form2.ShowModal;
end;
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.
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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:11 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