Dipl. User mit summa cum laude
ES IST VOLLBRACHT ... zumindest annaehrend ...
Ich hatte ja leider beruflich bedingt nur seit Montag Zeit, und diese hab ich auch genutzt. (Ich hab sogar dafuer Do und Fr Urlaub genommen und ausnahmsweise den Sa dran gehaengt, obwohl der eigentlich fuer die Familie reserviert ist.)
Leider habe ich es nicht mehr geschafft, einen GUI Client mit SDL zu programmieren (oder ueberhaupt anzufangen), aber dafuer ist mit Haengen und Wuergen der Server fertig geworden.
Um was geht es eigentlich ?
Ich habe einen Jumping Cubes Tactics Server programmiert, von einigen liebevoll auch Jumping Jihad genannt.
Jumping Cubes ist ein Spiel, das normalerweise auf einem quadratischem (2D) regelmaessigen Spielfeld mit n Feldern mit 2 Spielern gespielt wird. Am Anfang ist jedes Feld mit 1 belegt und gehoert keinem Spieler. Wenn ein Spieler in ein Feld setzt, das nicht seinem(/n) Gegner(/n) gehoehrt, so bekommt der Spieler das Feld und dessen Zaehler erhoeht sich um 1. Wenn der Zaehler eines Feldes einen Wert groesser als die Anzahl der benachbarten Felder annimmt, so wird der Zaehler des Feldes um die Anzahl benachbarter Felder verkleinert und "expandiert" auf alle benachbarten Felder, indem der Spieler Eigentuemer dieser Felder wird und ihr Zaehler um 1 erhoeht wird. Das ganze wird so lange rekursiv ausgefuehrt, bis kein Feld mehr expandiert. Wer sich das ganze mal ansehen will, sei auf KJumpingCubes aus dem KDEGames verwiesen.
Ich habe das ganze nun komplett neu auf einem beliebigen gerichteten Graphen als Spielfeld und mit n Spielern, n>1 aufgezogen. Diese variante nenne ich Jumping Cubes Tactics.
Eine Variante davon koennte z.B. auf einer Risiko-Weltkarte gespielt werden, wobei jedes Land ein Feld (Knoten im Graphen) ist und jede Grenze eine Verbindung (bidirektionale Kante im Graphen). Die Spieler sind in dieser Interpretation Goetter, die in den Laendern Wunder wirken. Wurden genug Wunder gewirkt (Expansion), so ziehen Missionare in die benachbarten Laender und ueberzeugen die "Glaeubigen" davon, das alle bisherigen Wunder von der eigenen Gottheit (also dem Spieler) vollbracht wurden. Gewonnen hat, wer alle Laender auf der Welt zu seinem eigenen Glauben ueberzeugt hat.
Zumindest war das der Ansatz, mit dem ich das Spiel begonnen habe. Um jedoch alles so flexibel wie moeglich zu halten, ging ich noch einen Schritt weiter, und erlaube beliebige Graphen, welche in einem Mapformat definiert werden. Diese werden vom Server bei bedarf gelesen, das Spiel erstellt, und die entsprechenden Daten zum Client weiter geleitet. Dazu wird ein selbst entwickeltes Netzwerkprotokoll auf Socket-Basis verwendet.
Leider wurde, wie gesagt, der GUI Client nicht fertig, aber der Server ist trotzdem schon mit einem Commandline Client benutzbar, indem man die Befehle per Hand eingibt und das, was einem der Server sendet, auf der Console ausgegeben wird. Das Protokoll ohnehin ist ohnehin menschenlesbar, auch wenn es etwas unhandlich ist.
Der Server verwendet low level Sockets, Multithreading mit pthreads sowie, C++ STL Container, Algorithmen und Streams (kein fopen und aehnliches C) und ist grossteils Object Orientiert angelegt, koennte also fuer den einen oder anderen interessant sein.
Das ganze wurde unter Dev-C++ entwickelt (Achtung, pthreads libs und header ueber den Packetmannager installieren) und ist mehr oder weniger Work In Progress und nicht mehr als ein paar Stunden lang getestet. Unter Linux sollte das Ganze theoretisch problemlos laufen (da ich mich versuche an POSIX zu orientieren) ist aber aus Zeitgruenden ungetestet.
Ich verwende gcc-3.4.2 (mingw-special) und anscheinend eine etwas aeltere glibc. Als Libaries brauch ich unter windows nur -lwsock32 und -lpthread. Unter Linux muss das ganze ggf entsprechend angepasst werden. Sonst wird eigentlich nichts exotisches gebraucht.
Eine Beschreibung des Netzwerkprotokolls ist in "Network Protocol.txt" enthalten, das Mapformat ist in "maps/default.map" beschrieben, ebenfalls eine Textdatei.
Da ich jetzt auch keine weitere Zeit habe, setze ich es einfach unter die MIT License. Eine LICENSE Datei befindet sich im Ordner.
Ich weiss, das ich mit einem Commandline Server ohne GUI keinen Hofstaat machen kann, aber seid gnaedig. Immerhin hatte ich nur 1/3 der Zeit, die andere fuer einen 3-Zeiler hatten ^^
Download: als ZIP oder als tar.gz
Gepackt mit WinZip 7.0 SR-1 bzw WinAce v2.2, Textdateien und SourceCodes im DOS-Format (Zeilenende = \r\n statt \n) !!
EDIT: Da bereits mehrfach danach gefragt wurde: Der Client gehoerte urspruenglich nicht dazu, wurde jedoch wegen der fehlenden GUI schnell noch hinzu kopiert. Daher ist die eigene IP Addresse (bzw die IP des Servers) im Quelltext einzutragen und der Client zu compilieren, ansonsten wird der Server nicht gefunden. Sorry fuer die Unannehmlichkeiten.
Geändert von Ineluki (28.03.2008 um 00:22 Uhr)