Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

14.12.2013, 18:02

Gesellschaftsspiele (Karten, Brettspiele) nachprogrammieren

Hi Leute,

ich habe "einige Jahre" Programmiererfahrung in Java. Das "einige Jahre" ist in Anführungszeichen, weil ich nicht durchgängig immer programmiert habe, sondern immer zwischendurch mal ein bisschen. Nur bei mir ist das Problem, dass wenn ich mir ein Projekt vornehme (und das waren keine unrealistischen Projekte), ich nach einiger Zeit unzufrieden bin, weil es dann ziemlich durcheinander ist. Das Problem ist nämlich, dass ich nie genau weiß, wie ich so ein Projekt architekturmäßig aufbauen soll.
Also: Welche Klassen können auf welche zugreifen. Letztendlich muss dann doch eine Klasse eigentlich auf eine andere Klasse zugreifen können, obwohl es eigentlich geplant war, dass sie es nicht soll. Und dann muss eine Instanz dieser Klasse bis zu der anderen durchgereicht werden (was nicht so schön ist), oder man greift statisch mit dem Singleton-Pattern auf diese Instanz zu. Ich hoffe, ihr versteht, wie ich das meine. Am Schluss greift jede Klasse, dann wenn sie es gerade braucht, auf irgendeine Klasse zu und man verliert den Überblick. Es ist nicht so, dass ich nichts auf die Reihe bekommen hätte, mir gefällt nur nicht das Durcheinander, die Projekte sind dann auch irgendwann nicht mehr so leicht erweiterbar.

Bei mir ist die Sache, dass ich nicht unbedingt so ein Action-, Jump&Run-Spiel programmieren will, sondern ich würde gerne mal so ein Gesellschaftsspiel nachprogrammieren. Aber jetzt auch nicht so etwas wie Schach, sondern z.B. Dominion (wer das kennt) oder ähnliches (z.B. Strategiebrettspiele oder so). Hier ist die Sache: Es bewegt sich keine Spielfigur, wie bei einem Action- oder Jump&Run-Spiel und man muss die Tastatur- und Mauseingaben nicht dauernd überwachen, sondern es ist eher eventbasiert. Also jemand ist an der Reihe, kann bestimmte Aktionen ausführen, dann ist der nächste an der Reihe und so. Das ganze sind meistens natürlich Mehrspielerspiele. Das heißt, man müsste Netzwerkprogrammierung mit einbauen, dass die Leute es (z.B. übers Internet, LAN macht nicht viel Sinn, dann können sie sich auch gleich an den Tisch setzen und es richtig spielen) zusammen spielen können.

Hätte jemand Lust so ein Projekt (ich hätte Lust auf Dominion) anzupacken? Wie gesagt: Ich bringe die nötige Programmiererfahrung mit, aber ich bräuchte jemanden, der Erfahrung hat, wie man so etwas architekturmäßig aufsetzt; vor allem auch mit Netzwerkprogrammierung, wo ich nicht so viel Erfahrung habe (außer RMI). Und wie man die Netzwerkprogrammierung architekturmäßig aufsetzt, mit Server und Client oder doch was anderes (?), wie das am Besten wäre.

Wenn ihr noch Fragen habt, dann fragt ruhig!

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

19.12.2013, 16:16

Willkommen im Forum!

Ich habe zwar keine Lust und Zeit mitzuprogrammieren, will dir aber einen Tipp geben.
Gerade bei Karten- oder Brettspielen ist es recht einfach, den Zustand des Spiels (wer hat welche Karten, welche Figur steht auf welchem Feld etc.) und die Spiellogik von der Darstellung (Grafik, Benutzeroberfläche) zu trennen. Wenn du das beherzigst, wird dir schonmal vieles leichter fallen.

Singletons sind übrigens heute nicht mehr gern gesehen.

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

3

19.12.2013, 17:28

Ich habe auch nicht die Zeit mich an dem Projekt zu beteiligen, denke aber dass ich auch ein paar gute Tipps für dich habe. Wir haben in der Uni mal ein Kartenspiel entwickelt (Coloretto, falls dir das was sagt). Wir haben damals mit Swing gearbeitet (also auch Java). Mir gefällt Swing zwar nicht wirklich, aber du hast immerhin schon mal Buttons und all die Sachen die man so brauchen kann. Das ist schon mal ganz praktisch. Aber da du Java Erfahrung hast weißt du vielleicht selbst mit welchen Frameworks du da am besten arbeitest.
Wir haben damals das Programm als MVC (Model-View-Controller) umgesetzt. Dieses Entwurfsmuster ist auch für Einsteiger einigermaßen gut verständlich und leicht umsetzbar. Bei eventbasierter Entwicklung klappt das ganze ganz gut und man kann seine Komponenten schön trennen. Das hilft dir ja möglicherweise schon mal weiter um deinen Code zu strukturieren. Es gibt da noch andere Entwurfsmuster die helfen den Code für solche Anwendungen zu strukturieren. Bei Swing aber zum Beispiel bietet sich MVC an. Auch hier wirst du irgendwann zu dem Punkt kommen, wo alles nicht mehr so schön strukturiert ist wie es mal gedacht war. Das ist ganz normal. Das ist der Punkt an dem du dich hinsetzen musst und den Code aufräumst. Refactoring wird das ganze genannt. Code entwickelt sich mit der Zeit immer weiter und deswegen musst du das Design mit anpassen. Das was du dir am Anfang denkst ist an der Stelle vielleicht noch gut und richtig, nachdem dein Programm sich dann mit der Zeit weiterentwickelt kommen aber neue Anforderungen an den Code und dadurch musst du halt anpassen. Anpassen heißt nicht nur bestimmte Klassen an andere weiter zu reichen oder Singletons zu benutzen (von Singletons würde ich absehen, warum das so ist kannst du mal ergooglen oder noch mal hier im Thread nachfragen). Du musst viel mehr dein Codedesign anpassen. Das heißt Klassen umschreiben und neu überlegen wie du deine Dinge neu verwalten kannst. Das kostet Zeit und ist oft lästig, geht aber nicht anders;)
Was das Netzwerk angeht, hier würde ich wieder ein Entwurfsmuster in den Raum werfen. Hier kann dir das Proxy-Pattern helfen. Zumindest wenn du Single- und Multiplayer unterstützen möchtest. So schreibst du das Spiel ein mal für Singleplayer und kannst es mit Hilfe des Proxypatterns Netzwerkfähig machen und die Befehle weiterleiten. Die Proxyklasse sieht nach außen hin aus wie eine Steuerungsklasse die du im Singleplayer benutzt, leitet die Befehle jedoch über das Netzwerk weiter. Dabei musst du natürlich ein wenig beim designen aufpassen. Zum Beispiel bietet es sich dann an, nicht direkt Antworten zu fordern, sondern auf Rückruf bei Antwort zu warten. Ein Beispiel:

Quellcode

1
2
3
4
5
Proxy.GetNextCard(); // Code im Client um nächste Karte vom Kartenstapel anzufordern

Client.GiveCardFromStack(card); // Code im Server um die Karte dem Spieler zu übermitteln

//sobald deine Proxyklasse Antwort bekommt kann sie die Karte an deine aufrufende Schicht weiterleiten.

Wie die Weiterleitung aussieht ist egal. Im Prinzip ist das auch wieder Eventbasiert.
Das waren jetzt nur ein paar kleinere Tipps, helfen aber vielleicht schon weiter um dich zum Ziel zu bringen. Frag gerne nach wenn du was nicht ganz verstehst. Wenn du ncoh mehr Fragen hast, auch immer raus damit.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

Werbeanzeige