AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Anregung für Klassendesign

Ein Thema von Jumpy · begonnen am 26. Sep 2014 · letzter Beitrag vom 26. Sep 2014
Antwort Antwort
Seite 1 von 2  1 2      
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.733 Beiträge
 
Delphi 6 Enterprise
 
#1

Anregung für Klassendesign

  Alt 26. Sep 2014, 10:29
Hallo,

ich brauche (nicht direkt für ein Spiel auch wenn's so aussieht) ein paar Anregungen, wie ich die Klassen meiner Geschäftslogik aufbaue, bzw. welche Klassen ich eigentlich brauche und wer da wen kennen sollte.

- Ich habe ein "Spielfeld" bestehend aus einzelnen Feldern (entweder Schachbrett-Muster oder Hex-Felder).
- Jedes dieser Felder kann Eigenschaften haben (und natürlich Koordinaten).
- Auf jedem dieser Felder können Objekte liegen, die Eigenschaften haben, wobei die Eigenschaften der Felder beeinflussen können, was für Objekte auf dem Feld liegen können.
- Auf jedem dieser Felder können "Figuren" stehen, die sich über das Spielfeld bewegen können, wobei Art und Reichweite der Bewegung von den Objekten auf den Feldern, von den Feldern selber und von den Eigenschaften der Figur beinflusst werden können.

u.a. Aufgaben, die die Logik können muss:
Wenn ich ein Objekt auf dem Plan platzieren will, muss ich wissen, wo ich das ablegen darf und wo nicht.
Wenn ich eine Figur bewegen will, muss ich sehen können wie weit sie maximal kommt, und auf welche Felder ich sie stellen kann.

Die Aufgaben hören sich so beschrieben natürlich nach Dingen an, die eher die View betreffen ("Muss ich sehen können"), aber irgendwie muss die View ja später auch wissen, welche Felder sie mir irgendwie markiert, damit ich sehen kann, wohin eine Figur gesetzt werden darf. Daher die Zusatzfrage, wie würde man die Kommunikation mit einer View und der Logik umsetzen? Würden da einfach Listen mit Feldkoordinaten bereitgestellt, oder wie macht man sowas?
Ralph
  Mit Zitat antworten Zitat
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Anregung für Klassendesign

  Alt 26. Sep 2014, 11:11
Da müßte man erst mal wissen welche Form die Felder haben (Rechteck, Kreis, Polygon)?
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#3

AW: Anregung für Klassendesign

  Alt 26. Sep 2014, 12:02
Echt? Muss nicht. Ein Feld ist ein Feld und hat Nachbarn. Ein quadratisches Feld hat 4, ein hexagonales Feld eben 6. Aber es ist ein Feld. Dieses Model kann man später auf 5-dimensionale Hyperräume erweitern. Es bleibt dabei. Ein Feld ist ein Feld und ich kann von einem Feld auf bestimmte andere hüpfen.

Zur Frage:
Ich würde deine Klassen, Eigenschaften und Methoden erst einmal in Objectpascal aufschreiben, denn deine Beschreibung kannst Du 1:1 auf deine Klassen anwenden. Die genauen Eigenschaften sind zwar nicht bekannt, aber die Methoden ('Darf ich? Wo könnte ich hin?' etc) schon. Und damit sind auch die Abhängigkeiten grob skizziert, denn für eine bestimmte Entscheidung oder Aufgabe benötigt eine Figur das Wissen um 'Felder' und vielleicht sogar auch 'Objekte'.

Durch die Abhängigkeiten muss z.B. ein Objekt auch 'Felder' kennen, denn es muss ja wissen, ob es da rauf darf.
Wenn Du die groben Abhängigkeiten umgesetzt hast, schaust Du dir jede Klasse an. Wenn z.B. eine Figur -neben der schönen Aufgabe, eine Figur zu sein- noch andere Aufgaben hat (z.B. 'Darf ich auf dieses Feld?') dann schreibst Du dir eine Klasse, die diese Entscheidung fällt, also einen 'TFigurLocator' oder so. Damit hat die Figur diese Aufgabe delegiert. Da sich Objekte und Figuren bezüglich diverser Entscheidungen nicht unterscheiden, können sie eine gemeinsame Basisklasse haben, müssen aber nicht: Bloß weil ein Tisch und ein Pferd jeweils 4 Beine haben, sollte man keine Basisklasse hierfür erstellen. Die Gemeinsamkeit könnte sich auch über ein Interface und eben die 'TXXXXLocator'-Entscheiderklassen abbilden lassen.

Ich würde 'einfach mal anfangen' und hier den Ansatz posten. Wirst schon sehen, wie gut die Ratschläge sind...

Crossreferences solltest Du vermeiden, z.B. durch oben skizzierte Delegierung an eine separate Klasse:
a <-> b => a -> c <- b
Anstatt : 'a kennt b und umgekehrt' (was eine zirkuläre Referenz ist)
macht man: 'a kennt c und b kennt c, c kennt a und b. Aber a und b kennen sich nicht mehr'.

Mit Sicherheit gibt es noch andere Wege zum Ziel, aber ich würde es so machen bzw. so erst einmal anfangen.

Geändert von Dejan Vu (26. Sep 2014 um 12:08 Uhr)
  Mit Zitat antworten Zitat
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Anregung für Klassendesign

  Alt 26. Sep 2014, 12:38
Echt? Muss nicht. Ein Feld ist ein Feld und hat Nachbarn. Ein quadratisches Feld hat 4, ein hexagonales Feld eben 6. Aber es ist ein Feld. Dieses Model kann man später auf 5-dimensionale Hyperräume erweitern. Es bleibt dabei. Ein Feld ist ein Feld und ich kann von einem Feld auf bestimmte andere hüpfen.
Doch muß man m.E. schon wissen, weil die Klasse ja wissen soll, wo sie was platzieren kann. Dazu muß man ja vermutlich IsCollision, IsPtIn o.ä. ect. implemtieren..

Geändert von TBx (26. Sep 2014 um 13:07 Uhr) Grund: Anfeindung entfernt, könnt Ihr das mal unterlassen ....
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Anregung für Klassendesign

  Alt 26. Sep 2014, 12:43
Das ermittelt der Controller, dafür ist er da.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.429 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Anregung für Klassendesign

  Alt 26. Sep 2014, 13:03
Das Spielfeld unterscheidet sich nicht wesentlich, egal ob rechteckige oder Hexfelder:
Code:
Geometrie recheckige Felder
X X X X X X X X
X X X X X X X X
X X X X X X X X
X X X X X X X X
X X X X X X X X
X X X X X X X X
X X X X X X X X
X X X X X X X X

Geometrie Hexfelder horizontal versetzt
X X X X X X X X
 X X X X X X X X
X X X X X X X X
 X X X X X X X X
X X X X X X X X
 X X X X X X X X
X X X X X X X X
 X X X X X X X X

(für vertikal einfach 90Grad drehen)
Die einzelnen Felder haben abhängig von der Geometrie andere Nachbarfelder.
Will man diese bestimmen, braucht man dafür jeweils eine eigene Enumeratorklasse, die die einzelnen Nachbarfelder und Richtung zurückgibt.

Damit die Figuren bestimmen können, wo man diese setzen kann und welche Felder erreichbar sind, muss Ihnen das Spielfeld und dessen Geometrie bekannt sein.
Die Ergebnisfelder würde ich mit einem Enumerator zurückgeben.
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#7

AW: Anregung für Klassendesign

  Alt 26. Sep 2014, 13:30
Damit die Figuren bestimmen können, wo man diese setzen kann und welche Felder erreichbar sind, muss Ihnen das Spielfeld und dessen Geometrie bekannt sein..
Nö.
Type
Delphi-Quellcode:
 TFeld = class ...
   property Nachbarn : TFeldListe read fFeldListe;
 end;
Fertig. Im Schachbrett hat Feld 'A1' drei Nachbarn, H5 dagegen 8, wenn man die Diagonal erreichbaren hinzuzählt. Ansonsten 2 bzw. 4. Oder eben 6 oder 26 (3-D Schach). Alles ein und dieselbe Struktur.

Ich kann das komplett entkoppeln. Mit dem Modell kann ich auch komplette Labyrinthe bauen, oder beliebige topologische Netze aufspannen.

Ob das das schnellste ist und am wenigsten Speicherplatz verbrät, sei mal dahingestellt. Aber am flexibelsten ist es allemal, weil ich -entgegen allen Behauptungen- in der Logik komplett unabhängig vom Layout bin.
  Mit Zitat antworten Zitat
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: Anregung für Klassendesign

  Alt 26. Sep 2014, 13:38
Das ermittelt der Controller, dafür ist er da.
Meine Frage zielte eher darauf ab, ob man das Ganze als geometrisches Problem interpretieren kann, was m Falle von Rechtecken dann besonders einfach umzusetzen wäre? Ob dafür eine Extraklasse oder ob das die Liste mit erledigen kann muß man dann noch sehen?
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.733 Beiträge
 
Delphi 6 Enterprise
 
#9

AW: Anregung für Klassendesign

  Alt 26. Sep 2014, 13:52
Ich fang mal klein an, um zu erläutern, wie sehr ich mit der ganzen Geschickte noch am Anfang stehe. Ich würd halt gerne meine Klassen direkt von Anfang an sinnvoll planen als das immer wieder umzustricken.

Delphi-Quellcode:
TFigur = class
  private
    Bewegungsweite:integer;
    //X:integer;
    //Y:integer;
  public
    //procedure MoveTo(X,Y:Integer);
 end;
Hier fängt meine unsicherheit dann direkt schon an. Muss die Figur ihre Koordinaten wissen, oder weiß eine übergeordnete Kontroller-Klasse oder das Spielbrett wo sich die Figur befindet. Oder weiß das Spielfeld um seine Felder und die Felder wissen welche Figur auf ihnen drauf steht?
Ist die MoveTo Klasse überhaupt Sinnig bei der Figur oder gehört die auch in einen Kontroller?

Ich werde mich mal am WE hinsetzen und versuchen das UML-mässig entwerfen.
Anregungen sind bis dahin gerne weiter willkommen


Edit:
Es geht mir jetzt wirklich eher darum wie die Klassen zueinander stehen und welche ich alles brauche (und in Folge ein bißchen darum wie die Klasse designed werden musss). Nicht jetzt schon um konkrete Berechnungen oder sowas. Dazu habe ich mich (z.B. für Hexfelder hier) umgeschaut, was übrigens ein echt cooles Tutorial für sowas ist.
Ralph

Geändert von Jumpy (26. Sep 2014 um 14:05 Uhr)
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#10

AW: Anregung für Klassendesign

  Alt 26. Sep 2014, 14:05
Ich würde der Figur selbst definitiv keine Koordinaten als Zahlen geben. Zumindest dann nicht, wenn man seine Felder ohnehin schon als Klassen abbildet. In die Figur gehört dann allenfalls eine Referenz auf ihr aktuelles Feld - aber das auch nur, wenn unbedingt nötig. Je nach dem kann es schon reichen, wenn ein Feld seine auf ihm befindlichen Teile (inkl. Figuren) kennt.
Gerade bei solchen Doppelbeziehungen, wo sich zwei Instanzen gegenseitig kennen können, sind Controller-Klassen unbedingt sinnvoll. Sonst hat man schneller als man meint auf ein Mal ein Feld, dass meint Figur X stünde auf ihm, Figur X meint aber felsenfest ganz wo anders zu stehen.

Ein Koordinatensystem ist bei einem Spielfeld als Netz von Klassen sogar nichtmals mehr nötig, es sei denn man benötigt es aus irgendwelchen anderen Gründen. Lauf-Distanzen sind sogar noch über die Anzahl der genommenen Feld-Referenzen hin zum Ziel abzählbar.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  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 21:39 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