Netzwerkfähiges Spiel programmieren

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
Markus12
User
Beiträge: 195
Registriert: Dienstag 6. März 2007, 19:32
Wohnort: Frankfurt am Main

Freitag 23. Mai 2008, 09:51

Hallo Freunde,
ich möchte ein kleines Spiel mit Python programmieren, das ich zum Beispiel mit Freunden über ein lokales Netzwerk spielen könnte.

Nun habe ich im Internet irgendwas von Protokollen gelesen, und Sachen, die gar nicht damit zu tun haben und viel zu kompliziert sind, deswegen wollte ich mal fragen, ob jemand weiß, wie man so etwas machen könnte?


Viele Grüße Markus :-)
BlackJack

Freitag 23. Mai 2008, 14:14

Das kommt sehr auf das Spiel an. Wenn es etwas ist, was nicht in "Echtzeit" funktionieren muss, sondern eher in Richtung Karten- oder Strategiespiel mit Zügen/Runden geht, würde ich das Programm in Server und Clients aufteilen die mit XML-RPC kommunizieren. Oder Pyro benutzen wenn es Python-Only bleiben kann/soll/darf.
Benutzeravatar
keppla
User
Beiträge: 483
Registriert: Montag 31. Oktober 2005, 00:12

Freitag 23. Mai 2008, 14:22

Markus12 hat geschrieben:Nun habe ich im Internet irgendwas von Protokollen gelesen, und Sachen, die gar nicht damit zu tun haben und viel zu kompliziert sind, deswegen wollte ich mal fragen, ob jemand weiß, wie man so etwas machen könnte?
Es ist zu befürchten, dass diese "viel zu komplizierten Sachen" genau so kompliziert sind, wie sie müssen, und leider doch was damit zu tun haben.

Ein "Protokoll" ist eine konvention darüber, was für daten die einzelnen Netzwerkteilnehmer austauschen, und wie sie das tun. Beispielsweise müssten für ein Strategiespiel die Positionen der Figuren, die Lebensenergie etc. ausgetauscht werden.

Entweder denkst du dir ein eigenes Protokoll aus, oder du guckst, ob ein vorhandenes deine Bedürfnisse abdeckt.
"Allgemeingeeignet" sind recht häufig RPC-protokolle, allerdings ist bei Spielen die Frage, ob die bezüglich geschwindigkeit und streaming-eigenschaften (was interessieren dich die Daten von vor 10 minuten) passend sind.

Hast du schon das eigentliche Spiel fertig?
Markus12
User
Beiträge: 195
Registriert: Dienstag 6. März 2007, 19:32
Wohnort: Frankfurt am Main

Freitag 23. Mai 2008, 18:14

Danke für eure Antworten erstmal :-)

BlackJack hat schon genau das richtige angesprochen.
Ich wollte nämlich als Spielerrei ein netzwerkfähiges Monopoly programmieren. Oder Poker, das sind einfach Dinge, die ich mal ausprobieren möchte und mich interessieren.

Ist also rundenbasierend.

Deswegen meine Frage nun:
eher in Richtung Karten- oder Strategiespiel mit Zügen/Runden geht, würde ich das Programm in Server und Clients aufteilen die mit XML-RPC kommunizieren.
Was genau muss ich jetzt machen bzw. mit welchen Modulen muss ich mich beschäftigen? :D


Ich habe bis jeztt noch nichts angefangen umzusetzen, da ich dachte, dass sich dadurch die Programmstruktur stark verändert, wie ich mir vorstellen kann. Deswegen habe ich noch nichts gemacht.

Viele Grüße Markus :)
Zuletzt geändert von Markus12 am Freitag 23. Mai 2008, 21:15, insgesamt 1-mal geändert.
lunar

Freitag 23. Mai 2008, 19:25

Die Doku lesen, insbesondere diejenigen Teil, bei denen xmlrpc im Namen vorkommt ;)
Benutzeravatar
keppla
User
Beiträge: 483
Registriert: Montag 31. Oktober 2005, 00:12

Montag 26. Mai 2008, 08:34

Was genau muss ich jetzt machen bzw. mit welchen Modulen muss ich mich beschäftigen? :D
Du könntest z.B.http://json-rpc.org anfangen, und etwas ganz Simples, wie z.B. einen "message of the day"-Server und client schreiben.
Ich habe bis jeztt noch nichts angefangen umzusetzen, da ich dachte, dass sich dadurch die Programmstruktur stark verändert, wie ich mir vorstellen kann.
Nicht notwendigerweise. RPC steht für "Remote Procedure Call", was darauf rausläuft, dass du eine Funktion aufrufst, die dir auch wie bekannt einen Wert zurückgibt, die eigentliche berechnung aber auf einem anderen Rechner ("remote") stattfindet.
Wenn du schon ein Spiel hast, wäre der erste schritt, globale variablen o.ä. zu vermeiden, das Spiel in einen client- und einen serverbereich zu teilen, und dafür zu sorgen, dass client und server nur mit einigen funktionen kommunizieren, die du dann ver-RPC-en kannst.
Antworten