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!
Ich bin jetzt schon fast 6 Jahre angemeldet, habe aber noch nie ein Projekt veröffentlicht . Das will ich heute mal ändern .
Über Tilenet
Tilenet ist eine kleine Library, die es ermöglichen soll, ein Spiel lediglich serverseitig zu programmieren und dann den Inhalt zum Spieler (dem Client) zu "streamen".
Die Grafik ist dabei allerdings auf kleine Rechtecke (Tiles) begrenzt, die auf so genannte Layer gesetzt werden. Ein oder mehrere Layer können dann einem oder mehreren
Spielern zugewiesen werden. Diese sehen dann den entsprechenden Inhalt in einem Fenster. Zur Auswahl stehen verschiedene Tiles:
Ein NullTile, welches einfach nur ein Platzhalter ist.
Ein CharTile, mit dem man Text darstellen kann.
Und ein StdTile, mit dem dann Graphiken angezeigt werden können.
Setzt der Server StdTiles ein, gibt er lediglich einen Namen für das entsprechende Tile an (z.B. "tree" für einen Baum). Der Client wiederum lädt dann ein Paket, welches dann den Namen Grafiken zuweist.
Besonders angenehm ist es, dass man anstatt Graphiken erstmal die Standardzeichen aus der Konsole verwenden kann. So kann man erstmal an dem Spiel arbeiten, ohne gleich die Graphiken zu erstellen.
Tastatur Events werden vom Client zum Server versendet.
Samples
Zum testen und ausprobieren habe ich zwei Samples erstellt. Einmal ein Vier gewinnt und Multi-explore, ein kleiner Test auf dem viele Spieler als Smileys über eine Insel laufen können.
Beide Samples könnt ihr hier runterladen.
(Bei den samples liegen .bat datein, mit denen ihr die packete auswählen könnt)
Idee
Tja... wie sovieles ist auch mir die Idee zu dieser Library gekommen, als ich es endlich geschaft hatte, dass meine Zwerge in Dwarf Fortress ein bisschen länger als das erste Jahr überlebten
Dieses Spiel, obwohl die Graphik nicht gerade sehenswert ist, hat doch vom Inhalt so viel zu bieten, wie kaum ein anderes Spiel. Und wer hat sich noch nicht gewünscht, Dwarf Fortress im Multiplayer zu spielen?
So war dann auch schon die Idee für Tilenet da. Damit soll es möglichst einfach sein, Multiplayer Spiele zu entwickeln, ohne sich um das Netzwerk-Zeugs kümmern zu müssen. Dafür muss man dann leider Abstriche in der Grafik machen
... obwohl ... man kann theoretisch die Tile-Größe auf einen Pixel setzen... aber dann ist die Performance wahrscheinlich unterirdisch
Technik
Das Projekt setzt sich aus einem C-Interface, einer Server-Komponente, einer Netzwerk-Komponente, einer Client-Komponente und einem C++-Wrapper zusammen.
Die ersten drei bilden zusammen die tilenet library. Der C++-Wrapper besteht lediglich aus Header-Files und ich habe ihn spaßigerweise tiley getauft
Um den Code zu bauen (sowohl unter Linux als auch unter Windows) kommt CMake zum Einsatz.
Für das interne Threadmanagment und den Netzwerk-Verkehr kommt boost::asio zum Einsatz, sowie eine von mir selbst geschriebene Serialisierungs-Komponente.
Für Fenster und Grafiken verwende ich SFML, obwohl ich gerne etwas anderes benutzen will (z.b. opengl+freeglut)... aber ich bin zu faul das zu ändern
Die Library ist theoretisch multithreading fähig; wie gut und sicher das ist, weiß ich aber nicht genau
Wird der Inhalt eines Layers geändert, wird die Änderung von tilenet erkannt und nur die relevanten Daten werden verschickt.
Verschiebungen oder Ähnliches werden leider nicht erkannt. Die Nachrichten werden auch noch nicht komprimiert, was man aber leicht einbauen könnte.
Performance
Lokal (also auf dem eigenen System und im LAN) ist die Performance super. Über Internet wird es wohl etwas langsamer sein, aber ich hatte leider auch noch keine Gelegenheit das richtig zu testen.
Get It
Wenn ihr die Library benutzen oder mit weiterentwickeln wollt, könnt ihr euch den Sourcecode über git von google-code holen:
Hier gibt es den Code. Und hier gibt es eine Beschreibung wie ihr den Code ganz einfach mit CMake kompiliert, nachdem ihr das Repository mit git geklont habt.
Mit doxygen könnt ihr euch dann auch die Dokumentation erstellen, allerdings ist die noch nicht sehr ausführlich
Wenn ihr nur die samples haben wollt, könnt ihr sie hier runterladen.
Fortschritt und Aussicht
In letzter Zeit bin ich gut mit Tilenet vorangekommen. Besonders die Netzwerk-Komponente und die Server-Komponente sind sehr weit Fortgeschritten.
Dem Client fehlt noch eine Oberfläche, mit der er zum Beispiel Pakete mit Graphiken auswählen oder nach Spielen im LAN oder Internet suchen kann.
Der C++-Wrapper ist noch nicht sehr weit und eher provisorisch zusammen gehackt (damit ich Multi-Explore nicht mit C schreiben musste )
Weiterhin habe ich immer neue Ideen, die man einbauen könnte; Dazu gehört zum Beispiel ein Sound-Tile, mit dem man Soundeffekte abhängig vom Hörer einbauen kann.
Auch wäre ein bisschen Verschlüsselung nicht schlecht
Aja und die Dokumentation läuft auch etwas hinterher
Probiert einfachmal die Samples aus. Sollten Fehler auftreten oder ihr noch Fragen haben, dann meldet euch einfach hier. Ihr könnt auch gerne Anregungen oder Kritik posten