Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Was bei größerem Projekt beachten? (Am Beispiel des Spiels "Risiko")
christKIN_D
myCSharp.de - Member



Dabei seit:
Beiträge: 33

Themenstarter:

Was bei größerem Projekt beachten? (Am Beispiel des Spiels "Risiko")

beantworten | zitieren | melden

Ich möchte das Spiel Risiko implementieren. Mir ist durchaus bewusst, dass sich damit kein Geld verdienen lässt und auch schon viele Implementierungen in unterschiedlichsten Sprachen existieren.

Mein Ziel ist einfach, durch ein etwas größeres Projekt mehr Erfahrung im Bereich .NET / C# zu sammeln und mein Wissen auszubauen.
Auch denke ich, dass mein Projekt sehr gut erweiterbar ist, da man nach einer einfachen Einspieler Test Version, sich optional mit so Themen wie Netzwerk, KI oder verbesserter Grafik beschäftigen könnte.

Worum es mir bei meinem Beitrag geht, sind ein paar grobe Fragen damit ich nicht direkt in Sackgassen laufe.

Ich möchte die Grafik (WPF) so sauber wie möglich von dem Logikbereich trennen. Erreiche ich das durch ein sauberes Klassen Design oder wie muss ich mir das vorstellen?

An dem Thema Threads komme ich logischerweise nicht vorbei. Kann man sagen ob einer der vielen Wege (BackgroundWorker, Dispatcher, ..) für meine Applikation besonders von Vorteil ist oder ist das eher eine Frage der persönlichen Vorlieben?

Falls euch noch der eine oder andere Tipp einfällt, was ich gerade in der Anfangs (Planungs- /Überlegungsphase) beachten sollte, würde ich mich sehr freuen.
private Nachricht | Beiträge des Benutzers
GMLOD
myCSharp.de - Member

Avatar #avatar-2654.jpg


Dabei seit:
Beiträge: 1.200

beantworten | zitieren | melden

Erstmal vorneweg: Threads halte ich für nicht so wichtig.

Die Logik vom GUI abzutrennen ist nicht besonders schwer. Am einfachsten wäre, "abstrakte" Logikklassen zu erstellen (Spiel, Spielfeld, Spieler, Einheit etc.) und dann GUI-Komponenten zu erstellen welche die jeweilige Logik-Klasse kapseln. Es sollte auch ein EventSystem geben, das es den einzelnen Bausteinen ermöglicht miteinander zu kommunizieren.

Dann brauchst du natürlich ein Grundgerüst, welches das "abstrakte" Spiel ablaufen lässt, also die Moves ausführt und zeichnet, weswegen du hier noch eine Schnittstelle einführen solltest, welche den Renderer repräsentiert.

Der Renderer nimmt dann deine Spielklasse, kapselt in seinem Subsystem die entsprechenden GUI-Klassen und stellt alles wie gewünscht dar. Für das RendererSubsystem und die Instanziierung der einzelnen GUI-Komponenten würde sich das Abstract Factory pattern anbieten.
Shift to the left, shift to the right!
Pop up, push down, byte, byte, byte!

YARRRRRR!
private Nachricht | Beiträge des Benutzers
Th69
myCSharp.de - Experte

Avatar #avatar-2578.jpg


Dabei seit:
Beiträge: 4.593

beantworten | zitieren | melden

Zitat
... da man nach einer einfachen Einspieler Test Version, sich optional mit so Themen wie Netzwerk ...
Ich kann dir hierzu nur den guten Tipp geben, daß es im nachhinein schwieriger ist, ein Spiel netzwerkfähig, d.h. Multi-User fähig zu machen, wenn es vorher nur als Solospiel implementiert wurde.
Ich spreche da aus Erfahrung, da ich selber mehrer Jahre in der Spielebranche tätig war...

Wie GMLOD schon geschrieben hat, ist auf jeden Fall die strikte Trennung der Logik von der GUI sehr wichtig. Dies heißt zwar erst einmal einen höheren Aufwand (Erstellen von Schnittstellen, viele Klassen und Dateien, Programmierung der Datenübergabe etc.), jedoch brauchst du für ein längerfristiges Projekt immer eine gute Struktur.

Am besten, du erstellst dir als erstes einmal eine Grobstruktur deines Programms (d.h. die benötigten Klassen) und erstellst daraus dann eine hierarchische Struktur.
private Nachricht | Beiträge des Benutzers
winSharp93
myCSharp.de - Experte

Avatar #avatar-2918.png


Dabei seit:
Beiträge: 5.742
Herkunft: Stuttgart

beantworten | zitieren | melden

Zitat von GMLOD
Am einfachsten wäre, "abstrakte" Logikklassen zu erstellen (Spiel, Spielfeld, Spieler, Einheit etc.) und dann GUI-Komponenten zu erstellen welche die jeweilige Logik-Klasse kapseln.
Ob das wirklich die beste / einfachste Möglichkeit ist, ist IMHO sehr fraglich.

Gerade im Zusammenhang mit der WPF gibt es eigentlich nur ein Pattern: MVVM.

Wobei eigentlich schon ein Model, das INotifyPropertyChanged implementiert, reichen würde und das per DataTemplates und DataBinding an die Benutzeroberfläche gebunden ist.
private Nachricht | Beiträge des Benutzers
GMLOD
myCSharp.de - Member

Avatar #avatar-2654.jpg


Dabei seit:
Beiträge: 1.200

beantworten | zitieren | melden

Gut, ich kenne MVVM nicht, und er will mit WPF ran.

Ich habe mir darüber noch keine detaillierten Gedanken gemacht, finde aber, dass man prinzipiell nicht auf WPF angewiesen sein sollte, sondern auch einfach zwischen graphischen Frontends switchen können sollte, deswegen wäre ich gedanklich erstmal so naiv an die Sache rangegangen, das würde auch prinzipiell funktionieren.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von GMLOD am .
Shift to the left, shift to the right!
Pop up, push down, byte, byte, byte!

YARRRRRR!
private Nachricht | Beiträge des Benutzers
Rachidos
myCSharp.de - Member

Avatar #avatar-2698.jpg


Dabei seit:
Beiträge: 28
Herkunft: Aus dem Bauch meiner Mama :-)

Hüte Dich...

beantworten | zitieren | melden

Vor 2 Monaten hörte ich die Nachricht, dass Hasbro und Konsorten damit beginnen die Macher von Klone zu verklagen.

Das sollte nur im Hinterkopf sein.
private Nachricht | Beiträge des Benutzers
haarrrgh
myCSharp.de - Member



Dabei seit:
Beiträge: 208
Herkunft: Raum Köln

beantworten | zitieren | melden

So wie ich ihn verstehe will er das nur als Übung für sich selber nachprogrammieren und nicht verkaufen.
Dagegen können sie ja schlecht was machen :D
private Nachricht | Beiträge des Benutzers
christKIN_D
myCSharp.de - Member



Dabei seit:
Beiträge: 33

Themenstarter:

beantworten | zitieren | melden

Huui, so viele Antworten ..

Thema Grafik:
Also wenn ich mit den 6 Sätzen die ich bin in 4 Minuten zum Thema MVVM Pattern gelesen habe, das Ganze richtig verstandne habe.
Dann bau ich zwischen die Daten und die Darstellung eine weitere Schicht, die Kenntnis von den Daten und der Art der Darstellung hat und so steuernd beim weitergeben der Daten eingreifen kann.
Wie auch immer, ich denke das ich mit dem Thema DataBinding und der Schnittstelle INotifyPropertyChange genug beschäftigt bin und auf diese weitere Ebene verzichten werde, die vielleicht gerade bei extrem paralleler Entwicklung interessant ist, aber ich bin ja alleine.

Thema Netzwerk:
Da ich eher vorhabe das Spiel netzwerkfähig zu gestallten, als eine KI zu implementieren .. werde ich wohl nach Th69s Aussage, das Thema gleich von Anfang an in meine Planung mit aufnehmen.


Da ich weder vorhabe es zu verkaufen oder im größeren Stiel zum download anzubieten, denke ich das ich keine Post von Hasbro bekommen werde.
private Nachricht | Beiträge des Benutzers
kleines_eichhoernchen
myCSharp.de - Member

Avatar #avatar-2079.jpg


Dabei seit:
Beiträge: 3.971
Herkunft: Ursprünglich Vogtland, jetzt Much

beantworten | zitieren | melden

Im Buch Steve McConnell, Code Complete wird das Thema Projektplanung ausführlich ung gut verständlich erklärt.
Es gibt 3 Arten von Menschen, die die bis 3 zählen können und die, die es nicht können...
private Nachricht | Beiträge des Benutzers