Java Spiele Programmierung: RISIKO (Klassenstrukturierung)

Zerstoerer

Lieutenant
Registriert
Okt. 2010
Beiträge
685
Guten Abend zusammen,

nun hab ich mir ein neues Projekt gesucht. Und zwar will ich das Spiel RISIKO mal mit Java versuchen zu programmieren. Dies sollte ein Multiplayer basiertes Spiel auf Server-Client Basis werden.
Mein erster Schritt ist jetzt die grobe Klassenstrukturierung. Daran habe ich mich schon mal versucht, doch bin ich von meinem Ergebnis nicht so überzeugt.
Mein Problem ist das ich nicht genau weiß, wie ich am besten meine Hauptklasse "Spiel" mit der Server bzw. Client Klasse verbinde. Eine Idee war es in das Spiel beide Klassen zu bauen, sodass je nach Bedarf ein Server erstellt oder zu einem Server verbunden werden kann. Das ist sicher auch die beste Idee dazu, doch bleibt immer noch die Frage wie ich am besten am mein Spiel hänge.
Dann hatte ich noch Probleme, welche Methoden ich noch darin(Hauptklasse Spiel) einfügen sollte.

Ich wäre euch dankbar wenn ihr mal über die UML Datei gucken könntet um mir ein kleines Feedback bzw. paar Tipps zu geben.
 

Anhänge

  • UML Bild.png
    UML Bild.png
    281,4 KB · Aufrufe: 1.408
Du solltest den Client nur darstellen lassen. Er kann den Server fragen, wie denn die Karte im Moment aussieht oder wie der Spielstand allgemein ist (ich hab das nie gespielt, daher kann ich nichts Genaues dazu sagen).
Abgesehen davon ist der Client in der Lage dazu Spielzüge zu erbitten. Ist der Server einverstanden, dann führt er den Zug durch und gemäß Observer-Pattern informiert er die lauschenden Clients, dass sich was am Spielstand geändert hat.

Das mal so ganz grundlegend.
 
Ich kann Dir zwar nicht wirklich helfen, aber interessant finde ich Dein Projekt schon ziemlich! Ich hatte schon ewig vor eine Art Risiko auf Browserbasis zu programmieren. Ich bin gespannt...
 
Mir fallen mehrere Punkte auf:

1.) Die Klasse Spieler sollte ein Array oder eine Liste von Spielkarten haben, aber nicht Attribute a la ErsteKarte, ZweiteKarte, etc.

2.) Die Spieler integrierst du in das Spiel, in dem du der Klasse Spiel eine Liste mit Spieler-Objekten erzeugst. Das auch die Klasse ReihenfolgeRing durch ein einfache Schleife, bei der diese Spielerliste durchlaufen wird.

3.) Die Klassen Karte und Kontinent sind eher suptoptimal. Besser wäre eine Klasse Land mit seinen Attributen (Position auf der Welt, dazugehöriger Kontinent, List von Nachbarländern, stationierte Armeegröße, besitzender Spieler) sowie eine Liste in der Klasse Spiel, die alle Länder in sich aufnimmt.

Ich schicke dir nachher noch eine PN. Ich habe selber mal an so einem Spiel geproggt.
 
Schonmal ein guter Tipp von Tumbleweed, so kannst du auch Cheater ausschließen :)
 
Du hast da eine ziemliche Verknotung von Klassen drin - das macht dein Spiel ziemlich unflexibel. So wie es e-Laurin geschrieben hat, klingt es logischer und auch flexibler.

Das einfachste ist immer wenn du darauf achtest, dass das ganze möglichst flexibel ist. Nimmst du in deinem Beispiel ein Modul weg und ersetzt es durch ein anderes, hast du durch diese ganzen verzwickten Abhängigkeiten ein Problem.
 
Willst du Cheaten vermeiden, müssen die Berechnungen und Zustandsänderungen der Karte am Server ( dein sicherer Code) berechnet werden. Der Client bekommt einfach immer nur den Karten bzw. aktuellen Spielstand vom Server zugeschickt und visualisiert das.

Ist zwar keine Hilfe aber Ratschlag: Warum nicht erstmal nur clientseitig entwickeln? Da fällt die Komplexität Datenaustausch mit Server schon mal weg. Kannst dich mit Klassen und Java businesslogic austoben.

Du solltest dir auch gängige Design Patterns anschauen, welche häufige Probleme lösen. http://www.blackwasp.co.uk/GangOfFour.aspx
 
Zurück
Oben