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 2 von 2     12   
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#11

AW: Anregung für Klassendesign

  Alt 26. Sep 2014, 14:15
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.
Wofür muß die Figur wissen wo sie auf dem Spielfeld steht?
(ich nehme mal an, es geht nicht um die Koordinaten für das selbstzeichnen)

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.336 Beiträge
 
Delphi 11 Alexandria
 
#12

AW: Anregung für Klassendesign

  Alt 26. Sep 2014, 14:33
Ich hatte meinen Beitrag vorhin verworfen, aber da Du von vorn anfangen willst:

Das wichtigste ist m.E. erst mal, dass Du GUI und BL trennst.
Also alles, was Du überlegst und in Klassen abbildest sollte sich auf reine Daten/Objekte beziehen.

Die Darstellung in einem Formular solte da erst mal noch keine Rolle spielen. Wenn Du das sauber einhältst wird Dein Projekt besser wartbar und scalierbar bleiben.

So kannst Du ein komplettes (virtuelles) Projekt in BL-Klassen definieren.

Die Darstellung und Bearbeitung im Formular wäre ein davon völlig losgelöstes (bzw. parallel zu entwickelndes) Thema. Natürlich brauchst Du eine Schicht dazwischen, die beide Seiten verbindet.

Der Aufbau der BL-Klassen ist dann eher Geschmacksache und von der Zielstellung des Projektes abhängig.
Grundsätzlich würde ich die Position einer Figur in Figur.x und Figur.y speichern. Das irgendwo in einem Array abzulegen würde vielleicht Sinn machen, wenn man extrem schnell Berechnungen mit den Berechnungen durchführen will und der Weg über die Figuren zu langsam wäre - aber normalerweise wäre das sicher nicht sinnvoll.

Auch ob man eine Figur in ein Feld einfügt (Owner) oder in das Spielfeld (und die Beziehung zu den Feldern explizit verwaltet) oder ob man jeder Figur ein Spielfeld und ein Feld zuweisen will hängt wohl von der Zielstellung ab.

Ich habe in meinem letzten Projekt jedenfalls nicht Owner benutzt um die Beziehungen abzubilden da dadurch in der Summe ziemlich viel Zeit verbraucht wurde (Observer), die ich lieber anders nutzen wollte.

Auch wo Du MoveTo implementierst musst Du vom Einzelfall entscheiden.

Wichtig ist jedenfalls, alles möglicht gut vonenander zu entkoppeln - sowohl die GUI von der BL als auch die Klassen untereinander.

Wenn Du irgendwann denkst, FigurA bräuchte jetzt mal schnell die dritte Figur auf Feld123 ... hmmm... ok, dafür muss die Figur mal schnell wissen, wie ein Feld aufgebaut ist und dessen Figursammlung durchsuchen ... dann solltest Du stutzig werden.

Und wenn Du in der Richtung weiter denkst wirst Du irgendwann auf Interfaces kommen.
Das ist aber ein weiteres Thema (für mich auch ein recht neues)...

Weiterhin wichtig ist die Persistenz der BL-Objekte. Wenn Du ein Spielfeld hast und darauf Felder und darauf Figuren, dann sind das Objekte mit (Speicher-)Adressen. Wenn Du den Zustand speicherst (z.B. in einer XML-Datei) und später wieder lädst, dann liegen die Objekte natürlich an ganz anderen Adressen im Speicher. Somit brauchst Du eine Möglichkeit, die früheren Beziehungen ("Figur134 hat Figur345 als Freund") wieder herzustellen. Daher müssten die Objekte eine ID erhalten, über die sie identifizierbar sind und über die auch Verweise wieder hergestellt werden können.
Gleiches gilt natürlich, wenn Du nicht alle Objekte gleichzeitig im Speicher halten willst oder kannst bzw. vielleicht über mehrere Clients auf den gleichen Datenbestand zugreifen möchtest (ich weiß, wovon ich rede ).

Fazit: Möglichst klare Klassen bauen, die möglichst wenig voneinander abhängen und die Objekte mit Id´s ausstatten. So wirst Du am weitesten kommen.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)

Geändert von stahli (26. Sep 2014 um 14:48 Uhr)
  Mit Zitat antworten Zitat
Blup

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

AW: Anregung für Klassendesign

  Alt 26. Sep 2014, 17:18
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.
Für Nachbarfelder ist ein eigener Enumerator schon sinnvoll.
Figur können aber nur bestimmte Bewegungen oder Richtungen zulassen und mehrere Felder zurücklegen oder überspringen (Läufer oder Springer).
Da braucht dann jede Figurtyp noch mal einen eigenen Enumerator (der auf das Spielfeld und dessen Enumerator(en) zugreifen kann) und der ist abhängig von der Feldgeometrie.
Aber das geht schon viel zu sehr ins Detail.
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#14

AW: Anregung für Klassendesign

  Alt 26. Sep 2014, 18:21
Mir ging es hier nicht um das 'sinnvoll', sondern ob es notwendig ist. Lies Dir mal bitte den ganzen Thread durch. Da wurde behauptet, ohne Spielfeldlayout ginge es nicht, was nicht stimmt. Es *geht* ohne.

Im Übrigen kann ich bei so einer Datenstruktur natürlich auch Springerzüge ermitteln. Und zwar schneller, als mit einer 8x8 Matrix auf herkömmliche Art und Weise. Man muss nur wissen, wie Aber das gehört hier ja nicht hin.

Hier geht es um ein Spielfeld mit Feldern, Figuren und Objekten. Bis es es nicht klar ist, wie die Felder angeordnet sind. Also würde ich mal behaupten, also ich behaupte sogar, das mein Ansatz der bisher einzig brauchbare.

... und der ist abhängig von der Feldgeometrie.
Muss aber nicht. Das ist doch der Sinn von abstraktem Klassendesign. Wir können dazu gerne einen eigenen Thread aufmachen, aber hier warten wir mal, ob noch was kommt. Einverstanden?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 05:26 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