Wir sind Lüko und Daniel und haben Anfang August 2017 unsere Ausbildung bei queo begonnen. Als angehende Fachinformatiker in der Anwendungsentwicklung sind wir momentan im C#-Team zu Hause. Wir haben schon einige Projekte umgesetzt. Vom obligatorischen Taschenrechner, bis zu komplexeren Aufgaben wie der Ansteuerung eines Bildverarbeitungstools oder eines Klassengenerators waren unsere Aufgaben vielseitig und anspruchsvoll.

Nachdem wir im Rahmen dieser Projekte unsere Erfahrungen mit C# ausbauen konnten, machte unser Teamleiter Uwe den Vorschlag, ein Spiel zu programmieren. Wir einigten uns daraufhin auf die Umsetzung von „Schiffe versenken“ und gaben dem Projekt den Namen BATTLESHIPS.

„BATTLESHIPS“

Die Aufgabenstellung erschien uns zunächst sehr übersichtlich. Das Spiel sollte in der Konsole dargestellt werden und über das Netzwerk spielbar sein. Obwohl die Aufgabenstellung anfangs überschaubar war, hat sich das Programm mit der Zeit stetig weiterentwickelt. Durch viele Absprachen mit unserem Teamleiter und durch umfangreichen Ideenaustausch wuchs BATTLESHIPS von einer einfachen Konsolenanwendung zu einem vollwertigen WPF-Programm mit ansprechender Grafik heran. Doch eines nach dem Anderen – zunächst musste das Projekt geplant werden.

1. Die Planung

In der Planungsphase erstellten wir sowohl für den Client als auch für den Server umfangreiche Klassendiagramme und besprachen unsere Vorgehensweisen mehrfach auf der sonnigen Dachterrasse. Dabei stellte sich unter anderem heraus, dass es wohl das Beste wäre, wenn wir die Arbeit zwischen Client- und Server-Anwendung aufteilten.

UML-Klassendiagramm: Client-Anwendung

 

UML-Klassendiagramm: Server-Anwendung

2. Die Entwicklung

Daniel übernahm die Aufgabe, den Client zu entwickeln. Das ist das Programm, mit dem der Anwender direkt interagiert. Da dieser Teil als Konsolenanwendung umgesetzt werden sollte, war es eine große Aufgabe, die Grafikausgabe ansprechend und flüssig darzustellen. Eines der Probleme, die dabei entstanden, war die langsame Aktualisierung der Windows-Konsole. Somit entschied sich Daniel einen Grafik-Puffer zu schreiben, um somit nur die Teile der Konsole zu aktualisieren, die sich geändert hatten. Dadurch war ein massiver Geschwindigkeitsgewinn zu verzeichnen. Eine große Aufgabe war es auch, entsprechend auf die Eingaben des Servers zu reagieren und den Client steuerbar zu machen. Deshalb entschieden wir uns gemeinsam, ein eigenes Protokoll für die Kommunikation zwischen Client und Server zu entwickeln.

Und da kommen wir auch schon zum Server: Bevor Lüko sich an die Entwicklung des Servers machen konnte, musste er sich zunächst informieren, wie er die Netzwerkkommunikation zwischen den beiden Programmteilen in C# realisiert. Nachdem er diese Funktionalität erfolgreich implementiert und getestet hatte, machte er sich Gedanken, wie er eine große Anzahl von Spielern auf dem Server organisiert. Dazu griff er auf die Nutzung von Threads zu. Jedes Spielerpaar bekam einen eigenen Thread zugewiesen – so war sichergestellt, dass die verbundenen Spielerpaare parallel und möglichst latenzarm abgearbeitet werden.

Nachdem wir die beiden Programmteile erfolgreich zusammengeführt hatten, begann zunächst das Testen sowie das Finden und Beheben von Fehlern. Während dieser Projektphase fielen uns einige Unklarheiten und Inkompatibilitäten zwischen den Programmteilen auf, obwohl wir dachten, umfangreich geplant zu haben. Beispielsweise hatten wir einige Sonderfälle nicht ausreichend geplant – was passiert, wenn einer der Spieler plötzlich nicht mehr erreichbar ist? Und wie reagiert der Client, wenn der Server beendet wird? Daraus lernen wir, dass man Projekte so detailliert wie möglich planen sollte, denn mangels Erfahrung stellten wir uns einige wichtige Fragen gar nicht erst.

Trotz dieser kleinen Stolpersteine gelang es uns, eine erste laufende und zuverlässige Version von BATTLESHIPS bereitzustellen.

BATTLESHIPS in der Konsole mit Server-Anwendung im Hintergrund

3. Die Erweiterung

Die Konsolenversion war grafisch nicht besonders ansprechend. Da wir den Umgang mit WPF lernen wollten, entschieden wir uns, jeder einen eigenen Client zu entwickeln. Wir arbeiteten parallel und halfen uns gegenseitig wenn es Probleme gab. Eine große Hilfe beim Erlernen der Nutzung von WPF war Daniel Wuttig aus dem C#-Team, der uns das Framework detailliert vorstellte und uns bei Fragen stets zur Seite stand. Er brachte uns auch das Model-View-ViewModel-Schema (MVVM) bei, ein Entwurfsmuster zur Trennung von Darstellungs- und Logikteil des Programmcodes. Serverseitig  mussten wir keine Anpassungen vornehmen – die WPF-Clients nutzten das bereits entwickelte Protokoll weiter.

 

BATTLESHIPS WPF GUI
Quelle: Battleship by Agatha Hinkson, 03.23.12

BATTLESHIPS WPF GUI
Quelle: Hintergrund Seekarte

Nach dem auch die WPF-Clients zu unserer Zufriedenheit fertiggestellt waren, machten wir uns daran die Kommunikation mit dem Server zu überarbeiten. Die Entscheidung fiel auf die Entwicklung einer ASP.NET-WebAPI, da es für uns somit möglich wurde, ganze Objekte als JSON serialisiert zu übertragen. Für die Umsetzung mussten sowohl Server als auch Client angepasst werden. Ein schöner Nebeneffekt war, dass der Programmcode auf beiden Seiten übersichtlicher und lesbarer wurde. Auf der anderen Seite mussten wir Teile der Kommunikation grundlegend ändern, da es mit dem HTTP-Protokoll nicht mehr möglich war den Server jederzeit Nachrichten an den Client senden zu lassen. Denn bei Nutzung des HTTP-Protokolls wird die Verbindung nicht mehr aufrechterhalten, was bedeutet, dass der Client nun regelmäßig beim Server anfragen musste ob sich etwas am Spielstatus verändert hatte.

Nachdem wir auch diese Funktion implementiert hatten war es nun endlich soweit: Wir konnten BATTLESHIPS gegeneinander spielen, ohne dass uns noch ein Fehler oder eine Unzulänglichkeit auffiel. Es war ein schönes Gefühl, die Anwendungen nach vielen Wochen der Entwicklung zuverlässig arbeiten zu sehen.

Alles in allem haben wir im Rahmen dieses Projektes sehr viel gelernt, da BATTLESHIPS auf eine breit gefächerte Auswahl von Technologien zugreift. So haben wir mit WPF, ASP.NET und auch mit verschiedenen Arten von Datenbanken gearbeitet, unsere Arbeitsteilung durch Git-Quellcodeverwaltung organisiert, unsere Teamkommunikation verbessert und gelernt, auch bei großen Projekten die Übersicht zu behalten. Weiterhin war es sehr interessant zu lernen, wie man möglichst les- und wiederverwendbaren Code schreibt. Wir hatten sehr viel Spaß an der Entwicklung von BATTLESHIPS und freuen uns, dass wir im Rahmen unserer Ausbildung im C#-Team anhand eines Spiels die Prozesse der Softwareentwicklung kennenlernen konnten.

Wir suchen einen Web Developer (m/w)!
Du baust mit Leidenschaft und Erfindergeist Baupläne für begeisternde Webauftritte? Du möchtest nicht nur nach Vorschrift programmieren, sondern durch eigene Ideen den konzeptuellen Feinschliff liefern? Mit Liebe zum Detail baust du clevere Lösungen - individuell und User-optimiert - ohne den Blick für das große Ganze zu verlieren? Dann nichts wie auf zu queo!

Diskutieren Sie mit!

Alle mit einem markierten Felder sind Pflichtfelder und müssen ausgefüllt werden