Kartenspiel - Internet -- Fragen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
nemomuk
User
Beiträge: 862
Registriert: Dienstag 6. November 2007, 21:49

Sonntag 11. Mai 2008, 18:47

Hallo,

da ich auf der Suche nach einem neuen Projekt war/bin, habe ich mich entschieden ein Schafkopfspiel zu machen (wenn ich das schaffe...).

Nun wollte ich mich vorab mal informieren, wie man soetwas am besten angeht bzgl. Internet.

Wie mache ich die Verbindung zwischen den einzelnen Usern am besten?

Kommunikation via Server oder direktes Verbinden oder ein Spieler ist der Host? Oder besser gesagt, was ist da überhaupt realisierbar. Am liebsten wäre mir eine Lösung ohne Server.

Dann: Welche GUI würdet ihr verwenden? (Tkinter oder wxPython?) Ich habe mich bis jetzt noch nicht wirklich mit GUIs befasst.

Was wärs vorerst mal...

Danke!
MfG
EyDu
User
Beiträge: 4871
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Sonntag 11. Mai 2008, 19:09

Also ich würde mich erst mal um alles kümmern, was nicht mit Netzwerk oder GUI zu tun hat ;-)

Am einfachsten für die Benutzer ist es natürlich, wenn diese sich über einen Server verbinden können, da man so seine IPs nicht direkt austauschen muss. Unter Umständen tut es auch ein einfaches Script. Wenn du keinen eigenen Server besitzt, dann ist es sicherlich am einfachsten, wenn einer der Spieler diese Rolle übernimmt.

Die GUI kannst du ganz am Ende immer noch drauf setzen. Wenn du hier nach einer Empfehlung fragst, wird sicherlich jedes Toolkit einmal vorgeschlagen ;-) Falls du es nicht schon getan hast, solltest du dich aber auf jeden Fall in OOP einarbeiten, sonst bist du bei GUIs vollkommen verloren.
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Montag 12. Mai 2008, 10:45

Ich muss gestehen, ich kenne Schafskopf nicht. Aber ich würde in jedem Fall das Teile-und-Herrsche-Prinzip anwenden. Du hast drei Teilprobleme. Repräsentiere das Spiel (Domainmodell) und implementiere die Regeln (Geschäftslogik). Repräsentiere das Spiel in Form eines UIs. Löse das Architekturproblem für die Kommunikation der Clients.

Bei dem Spiel selbst kann ich nur vermuten, dass es eine gute Idee wäre, Karten, die "Hände", einen oder mehrere Ablagestapel zu modellieren. Die Regeln definieren wahrscheinlich, welche Karten welche Schlagen, was sie wert sind, usw. Das würde ich komplett eigenständig realisieren, sodass man das Spiel unit-testen und in einer Kommandozeile spielen könnte.

Bei einem UI würde ich an Webbrowser denken. Deine Frage zielt ja in Richtung traditionellen GUI. Kann man natürlich auch machen. Wenn du deine beiden Alternativen nicht kennst, würde ich zu wx raten. Ansonsten nimm, was du kennst. Hier denke ich ist die Frage, wie es aussehen soll und wie es sich verhalten soll, wesentlich schwerer als welches UI-Rahmenwerk es nun sein soll. Eine Handvoll Spielkarten als Grafiken und ein paar Statusanzeigen wird jedes Rahmenwerk zustande bringen. Oder mache eine Webanwendung daraus ;)

Dann hast du nämlich auch die Freiheitsgrade für dein Architektur verloren. Du sagtest, du fändest P2P interessant. Das ist nicht einfach und ich würde hier auf etwas fertiges zurückgreifen wenn ich es kennen würde. Wahrscheinlich würde ich diesen Weg aber gar nicht gehen, und einen dedizierten Server benutzen, den man dann später in jeden CLient integrieren kann, auf dass dann ein Spieler jeweils ein Spiel "veranstalten" kann. Also richtig "old skool". Eine Webanwendung erfordert natürlich einen Server und daher sagte ich, dass nimmt dir Freiheitsgrade. Hier musst du nur noch schauen, wie viel Interaktivität du haben willst.

Da ich erwarten würde, dass ein Kartenspiel eher wenig Mitspieler hat und diese nur sporadisch (wenn eine Karte ausgespielt wird) interagieren, würde ich vielleicht einfach alle Clients pollen lassen. Völlig frei in der Technologiewahl würde ich hier wohl gerne einmal Flex auf der Clientseite und BlazeDS (mit Java) auf der Server-Seite ausprobieren wollen - ist aber kein Python. Möglicherweise lohnt ein Blick auf PyAMF. Aber wahrscheinlich willst du den Client nicht in Flash bauen. Wo habe ich neulich erst gelesen, dass man Python in Flash kompilieren kann?

Nochmal zurück zu deinen Fragen. Wenn du einen dedizierten Server hast, der zwischen den Clients vermittelt, hast du im Prinzip einen Chat und genau das ist absolut ausreichend für ein Kartenspiel. Wenn du also einen Chat-Server in Python findest, der vielleicht ein Standardprotokoll wie XMPP oder IRC spricht, dann wäre das IMHO eine gute Grundlage für deine Kommunikationsschicht und du musst nicht selbst bauen - was aber eine interessante und nicht zu schwere Aufgabe sein kann. Stichwort wäre dort "Sockets".

Stefan
Antworten