Schiffe versenken

KBattleship

01.06.2001
Ab Version 2.2 wird KBattleship in das KDE-Games-Paket aufgenommen: Das neue Spiel, das Sie auch auf der Heft-CD finden, setzt einen alten Klassiker als Netzwerkspiel um: Schiffe versenken.

Alles begann an einem grauen, regnerischen Tag im November letzten Jahres. Daniel (18) aus Bonn saß vor seinem PC und chattete über Linux- und KDE-Themen im IRC. Hier traf er auf Nikolas (15), der ebenfalls schon einige Projekte der KDE-Community unterstützt hatte und immer mal ein eigenes Netzwerkspiel programmieren wollte. Beide waren keine Neulinge im Coden – schon bald entstand ein intensiver Austausch über IRC, Mail und Telefon. Ein erstes Treffen brachte direkt ein Grundgerüst für das Spiel hervor, und nachdem die beiden sich nächtelang Programm-Code um die Ohren geworfen haben, gibt es seit kurzem erste Veröffentlichungen von KBattleship – ab KDE 2.2 wird es fester Bestandteil des KDE-Games-Pakets sein.

Installation – Preview

Bevor Sie loslegen: Eine Installation von KBattleship ist im Moment leider nur möglich, wenn Sie aktuelle QT- und KDE-Versionen einsetzen: KDE muss mindestens in Version 2.1.0 vorliegen, bei Qt ist Version 2.2.1 die Minimalvoraussetzung. Ein Update Ihrer älteren Versionen ist z. B. mit den Paketen aus der LinuxUser-Heft-CD 05/2001 möglich, bleibt aber Experten vorbehalten. Für alle anderen: Kein Grund, traurig zu sein. Sehen Sie diesen Artikel als Preview auf ein tolles Netzwerkspiel, und freuen Sie sich auf KDE 2.2. Speziell für SuSE Linux 7.1 inklusive Update auf KDE 2.1.1 finden Sie auf der Heft-CD auch ein einfach installierbares RPM-Paket. Mit der 2.0er Version, die bei SuSE 7.1 enthalten ist, läuft das Programm nicht.

Installation aus den Sourcen – nur für Experten!

Stellen Sie zunächst sicher, dass Sie die richtigen Qt-Libraries installiert haben und mindestens KDE 2.1 läuft.

Wechseln Sie als Systemadministrator root in das Verzeichnis /usr/local/src/ und entpacken Sie dort das Archiv von der Heft-CD:

cd /usr/local/src
 tar xzf /mnt/cdrom/LinuxUser/kbattle/kbattleship.tar.gz

Tippen Sie im Quellverzeichnis (wie in der Datei INSTALL empfohlen) make -f Make.dist. Führen Sie jetzt ./configure aus. Danach folgt der Aufruf make und schließlich make install. Das Spiel lässt sich dann mit kbattleship & starten. Nach einem Neustart von KDE steht KBattleship übrigens als fester Eintrag im K-Menü unter Games bzw. Spiele.

Das Spiel ist schnell erklärt: Auf einem zweidimensionalen Spielfeld, das aus acht Feldern längs und quer besteht, ordnet man seine vier Schiffe an. Diese können senkrecht oder waagerecht stehen. Die vier Schiffe haben unterschiedliche Größen: ein Viererblock, ein Dreier-Schiff, ein Zweier und ein Boot, das ein Feld groß ist. Horizontale Ausrichtung des Schiffs ist voreingestellt, wenn Sie das Gefährt senkrecht anordnen möchten, halten Sie die [Shift]-Taste gedrückt und setzen es dann auf die gewünschte Position. Neben dem eigenen Spielfeld gibt es noch ein Feld für die gegnerische Flotte, auf das Sie schießen müssen. Dabei können Sie strategisch vorgehen oder einfach versuchen zu raten, wo die Schiffe plaziert wurden. Geschossen wird jeweils abwechselnd. Treffen Sie nicht, erscheint eine Art Wasserstrudel auf dem angezielten Feld. Wenn Sie ein Schiff des Gegners treffen, erscheint ein Feuerball. Ist das Boot komplett versenkt, sehen Sie ein zerstörtes Schiff (s. Abbildung 1). KBattleship lässt sich entweder alleine gegen einen Computer-Gegner (AI, engl. "artificial intelligence") oder gegen einen realen Gegner über das Netzwerk spielen.

Abbildung 1: Spiel gegen den Computer-Gegner

Wie Sie in Abbildung 1 sehen können, gibt es einige Menüpunkte, die schnell erklärt sind. Unter Settings legen Sie allgemeine Einstellungen für KBattleship fest, z. B. ob die Statuszeile unten im Fenster angezeigt werden soll. Sie können auch eine Art Raster um das Spielfeld herum legen (unter Settings/Show grid). Ebenso können Sie hier den Sound, der übrigens über gute Boxen ziemlich beeindruckend klingt, ein- und ausschalten. Unter Game finden Sie die Punkte Connect to server, Start server, Single Player, Highscore und Quit. Die meisten Punkte sind selbsterklärend; wenn Sie gegen einen Gegner aus Fleisch und Blut spielen wollen, schauen Sie sich die beiden Server-Optionen an. Um zusammen Flotten zu versenken, muss ein Teilnehmer einen Server starten. Hier gilt es neben einem Nicknamen (= Spitzname) einen Portanzugeben (voreingestellt ist 54321). Jetzt kann ein weiterer Schiffeversenker an dem Spiel teilnehmen. Über Connect to Server wird die IP des anderen Rechners (oder localhost für den Fall, dass es sich um einen Rechner handelt) und der gewählte Port angegeben – los geht's!

Abbildung 2: Im Netzwerk – mit Chat

Besonders gelungen ist an der Netzwerk-Variante, dass es ein Chat-Fenster gibt, in dem auch zwei IRC-Befehle funktionieren. Dazu gehört einmal /nick Neuernickname und auch das Kommando /me, das eine Art "Handlung" des eigenen Nicks simuliert. So wird aus /me ist geknickt im Chat "* Nick ist geknickt". In der Statuszeile ganz unten im Fenster erkennen Sie übrigens, wer als nächster schießen darf, falls Sie über dem Chat einmal vergessen haben sollten, dass Sie eigentlich Schiffe versenken müssten.

Interview mit den Entwicklern

LinuxUser: Wie wurde die Idee zu dem KDE-Spiel geboren?

Nikolas: Ich wollte so etwas schon immer mal machen. Ich hab zu Hause auf meinem Schrank ein altes "Schiffe versenken" gefunden. Außerdem gab es bisher noch kein KDE-Game, das man auch über ein Netzwerk spielen konnte.

LinuxUser: Wie habt Ihr Euch denn kennengelernt?

Daniel: Wir haben uns im IRC getroffen auf dem KDE-Channel. Nach einigen Unterhaltungen entstand die Idee, zusammen dieses Spiel zu programmieren.

LinuxUser: Ihr habt also jeder am eigenen Rechner gehockt und Euch so die Nächte chattend um die Ohren geschlagen?

Daniel: Ja, und dann bin ich an einem Abend mal zu Niko rausgefahren. Ich hatte damals gerade meinen Führerschein. Ja, dann haben wir da die ganze Nacht gehockt, es ist ziemlich spät geworden.

Nikolas: Es sollte erst ein Abend werden, daraus sind dann aber zwei ganze Tage geworden.

Daniel: Nachdem das Grundkonzept einmal stand, haben wir direkt losgelegt.

Nikolas: Wir haben direkt am Anfang das Netzwerkprotokoll implementiert, ohne Sinn und Zweck eigentlich. Dann haben wir irgendwas zusammengehackt und dann langsam immer mehr drum herum gebastelt, bis irgendwie KBattleship daraus geworden ist. Dann haben wir es ins CVS gestellt, von anderen Vorschläge bekommen, eine kleine TODO-Liste geführt und es ging immer weiter.

LinuxUser: In welcher Sprache ist KBattleship programmiert?

Daniel: C++ mit QT/KDE. Das Interessante an diesem Spiel ist, dass es, wie Niko schon sagte, mit diesem Netzwerkprotokoll anfing. Da haben wir uns überlegt: Ja, wenn wir schon Netzwerk in dieses Spiel einbauen, dann soll das auch was Reizvolles und Interessantes haben. Da bin ich auf die Idee gekommen: Wenn KDE schon so transparente Standards führt, warum machen wir das Netzwerkprotokoll nicht via XML über TCP/IP statt über ein proprietäres Binärformat? Ich meine, wir haben nicht viele Daten zu übertragen, und deswegen können wir uns das auch eigentlich leisten. Das hat den Vorteil, dass es dann Clients für verschiedene Plattformen geben kann, für verschiedene Toolkits und für verschiedene Sprachen.

LinuxUser: Wie sahen die ersten Versionen des Spiels überhaupt aus?

Nikolas: Es war von Anfang an eine minimale Grafik da. Ich habe zunächst ein grünes Hintergrundbild gezeichnet, ein Rechteck, dann haben wir darauf die Schiffe gesetzt. Das erste Schiff war ein oranger Block, das nächste Schiff war lila, und irgendwann hat jemand mal das Spiel beta-getestet. Kevin Krammer, der die AI ("artificial intelligence") programmiert hat, hat einen guten Freund – Elmar – gebeten, für uns die Grafiken zu zeichnen.

Daniel: Nachdem ich ihm von KBattleship erzählt habe, hat Sebastian, ein Freund von mir, sich gesagt: Es wäre doch gelacht, wenn wir das XML-basierte Protokoll nicht tatsächlich für eine Portierung ausnutzen könnten… Er hat dann wirklich in drei bis vier Tagen einen Client für Macintosh (Mac KBattleship) entwickelt, basierend auf unserem Protokoll.

Nikolas: Die ganzen Netzwerkimplementationen waren ja schon da, und da konnte man wunderbar den offen liegenden Code benutzen, Protokoll und Grafiken übernehmen. Dieser Freund benutzt kein C++, er arbeitet mit Real Basic. Es ging dann sehr zügig, so dass er sehr schnell fertig wurde. Jetzt können wir mit ihm – er am Macintosh, wir am Linux-PC – gemeinsam spielen.

LinuxUser: Das ist jetzt die Version 0.8, was ist für die Nachfolger geplant?

Nikolas: Vor allem die AI soll besser werden: Im Moment haben wir in dieser Version nur das Framework der AI fertiggestellt, und jetzt kommen noch Strategien dazu. Eigentlich schon fertig, aber noch nicht eingebaut ist z. B. die Strategie, dass wenn ein Schiff teilweise getroffen wird, der Computergegner direkt versucht, es zu vernichten. Langweilig wird es sicher nicht!

Abbildung 3: Spielen erlaubt – Nikolas und Daniel

Das Interview führte Heike Jurzik.

Ausblick – weitere tolle Features

Während dieser Artikel entstand, erfuhr ich, dass die AI jeden Tag neue Dinge "dazulernt": Mittlerweile sucht sie gezielt horizontal und vertikal; eine diagonale Strategie ist geplant. Außerdem gibt es jetzt eine Taktik, nach der einmal gefundene Schiffe komplett zerstört werden. Schauen Sie doch mal auf der Homepage des Projekts nach, was Sie noch alles erwartet oder sprechen Sie direkt mit den Entwicklern im IRC, auf dem Server irc.kde.org im Channel #kbattleship.

Abbildung 4: Diskussionen im #kbattleship-Channel

Eine Portierung auf Macintosh hat, wie im Interview erwähnt, schon stattgefunden (s. dazu auch Abbildung 5). Ob es eine Windows-Version geben wird, steht noch in den Sternen. Der Kommentar der Entwickler zu diesem Vorschlag sprach für sich: "Hm, arghs, neeeeeeeeeee…" In diesem Sinne: Viel Spaß beim Versenken ganzer Seeflotten!

Abbildung 5: Mac KBattleship – alles ist möglich

Glossar

Port

Netzwerkdienste wie ssh oder http werden adressiert durch die Kombination des Rechnernamens und einer eindeutigen Nummer für einen Port, unter dem der Dienst zu erreichen ist. Die Datei /etc/services zeigt, auf welchen Ports bekannte Dienste lauschen würden (sie legt aber nicht fest, welche tatsächlich laufen).

LinuxCommunity kaufen

Einzelne Ausgabe
 
Abonnements
 

Ähnliche Artikel

Kommentare

Infos zur Publikation

title_2014_09

Digitale Ausgabe: Preis € 5,95
(inkl. 19% MwSt.)

Mit der Zeitschrift LinuxUser sind Sie als Power-User, Shell-Guru oder Administrator im kleinen Unternehmen monatlich auf dem aktuelle Stand in Sachen Linux und Open Source.

Sie sind sich nicht sicher, ob die Themen Ihnen liegen? Im Probeabo erhalten Sie drei Ausgaben zum reduzierten Preis. Einzelhefte, Abonnements sowie digitale Ausgaben erwerben Sie ganz einfach in unserem Online-Shop.

NEU: DIGITALE AUSGABEN FÜR TABLET & SMARTPHONE

HINWEIS ZU PAYPAL: Die Zahlung ist auch ohne eigenes Paypal-Konto ganz einfach per Kreditkarte oder Lastschrift möglich!       

Tipp der Woche

Schnell Multi-Boot-Medien mit MultiCD erstellen
Schnell Multi-Boot-Medien mit MultiCD erstellen
Tim Schürmann, 24.06.2014 12:40, 0 Kommentare

Wer mehrere nützliche Live-Systeme auf eine DVD brennen möchte, kommt mit den Startmedienerstellern der Distributionen nicht besonders weit: Diese ...

Aktuelle Fragen

Videoüberwachung mit Zoneminder
Heinz Becker, 10.08.2014 17:57, 0 Antworten
Hallo, ich habe den ZONEMINDER erfolgreich installiert. Das Bild erscheint jedoch nicht,...
internes Wlan und USB-Wlan-Srick
Gerhard Blobner, 04.08.2014 15:20, 2 Antworten
Hallo Linux-Forum: ich bin ein neuer Linux-User (ca. 25 Jahre Windows) und bin von WIN 8 auf Mint...
Server antwortet mit falschem Namen
oin notna, 21.07.2014 19:13, 1 Antworten
Hallo liebe Community, Ich habe mit Apache einen Server aufgesetzt. Soweit, so gut. Im Heimnet...
o2 surfstick software für ubuntu?
daniel soltek, 15.07.2014 18:27, 1 Antworten
hallo zusammen, habe mir einen o2 surfstick huawei bestellt und gerade festgestellt, das der nic...
Öhm - wozu Benutzername, wenn man dann hier mit Klarnamen angezeigt wird?
Thomas Kallay, 03.07.2014 20:30, 1 Antworten
Hallo Team von Linux-Community, kleine Zwischenfrage: warum muß man beim Registrieren einen Us...