Open Source im professionellen Einsatz

Newsletter abonnieren
Seite durchsuchen

HEFTARCHIV | NEWS | E-BIBLIOTHEK | VIDEO | BLOGS | WHITEPAPER | EVENTS | ACADEMY | ABO | SHOP

user friendly

  Home  »  Heft & Abo  »  Heftarchiv  »  2010  »  09  »  Reiz des Mitmachens  

RSS-Feed der aktuellen News von Linux-Magazin Online Folgen Sie Linux-Magazin Online auf Twitter
Diesen Artikel druckenDiesen Artikel weiterempfehlen Diesen Artikel kommentieren Newsletter abonnieren
Share/Bookmark

© Sebastian Duda, 123RF.com

Programmierwettbewerb

Reiz des Mitmachens

von Nils Magnus
Erschienen im Linux-Magazin 2010/09

Siegen künstliche Intelligenz, kühle Stochastik oder schlichte Kühnheit? Bis Mitte September dürfen Leser selbst programmierte Bots einsenden, die gegeneinander um die Wette würfeln müssen.

Die Aufgabe erscheint simpel: Ein Spieler würfelt wiederholt und addiert seine Augenzahlen. Wirft er eine Sechs, muss er alle Punkte streichen und von vorne beginnen. Gilt es etwa, eine Summe von 50 Punkten zu erreichen, sind im Durchschnitt knapp 122 Würfe nötig, wie etwas Stochastik oder ein empirisches Perl-Skript offenbaren (Listing 1).

Listing 1: Simulation eines
Spielers

01 #!/usr/bin/perl
02 # simuliert einen einzelnen Würfelspieler
03 srand(time ^ $$);
04 
05 foreach $i (1 .. 1000) { # Zahl der Testläufe
06     $turns = $sum = 0;
07     while ($sum < 50) {  # Nötige Punktzahl
08         $turns++;
09         $wurf = int(rand(6) + 1);
10         $sum += $wurf;
11         $sum  = 0 if ($wurf == 6);
12     }
13     $sumsum += $turns;
14 }
15 print "Mittlere Züge: ", $sumsum/1000, "n";

Mehr Spannung kommt auf, wenn zwei Spieler abwechselnd gegeneinander antreten: Wer nun die Sechs wirft, verliert seine gesammelten Punkte und der Mitspieler ist am Zug. Der aktive Spieler darf jedoch auch freiwillig an den Gegner abgeben: In dem Falle sichert er sich die bis dato gesammelten Punkte und fällt bei einer späteren Sechs nur auf diesen Stand zurück.

Spieltaktik mit Intelligenz

Ließ sich die erste Variante noch mit Schulmathematik in den Griff bekommen, erweist sich die zweite als kniffliger: Es kommt auf die Spieltaktik des Gegenübers an. Verspricht es mehr Erfolg, konservativ Punkte zu sammeln und fix abzugeben? Gelangt jener schneller ans Ziel, der mitzählt, wie häufig er schon der Sechs ausgewichen ist? Welchen Einfluss hat die Taktik des Mitspielers?

Um diese Fragen zu klären, schreibt das Linux-Magazin einen Wettbewerb aus, bei dem selbst programmierte Bots der Leser über das Netz gegeneinander antreten werden. Auf TCP-Port 3333 von [wettbewerb.linux-magazin.de] läuft dazu ein vorgegebener Gameserver, der Mitspieler vermittelt und auf die Einhaltung der Regeln achtet. Die Kommunikation erfolgt über ein einfaches Textprotokoll, das der Tradition vieler Unix-Handshakes wie etwa SMTP folgt. Tabelle 1 beschreibt die Kommandos des Servers, Tabelle 2 die Nachrichten des Spielers.

Tabelle 1:
Nachrichten des Server

 

Kommando

Beschreibung

HELO Version Nachricht

So meldet sich der Gameserver bei Verbindungsaufbau. Die Version besteht aus Majornumber, einem Punkt und der Minornummer.
Die Nachricht ist ein optionaler Freitext, die keine Auswirkung auf den Spielverlauf hat, aber auch Whitespace enthalten darf.

DENY Meldung

Aus einem Grunde verweigert der Server eine Anmeldung, typischerweise, weil der Client ein falsches Credential präsentiert hat. Die Nachricht ist optional. Anschließend beendet der Server die Verbindung.

TURN Deinepunkte Anderepunkte
Nachricht

So meldet sich der Gameserver, wenn der Client an der Reihe ist zu spielen. Die beiden Parameter Deinepunkte und Anderepunkte sind ganzzahlige, positive Zahlen und geben den bisherigen Punktestand an. Die Nachricht ist wieder optionaler Text.

THRW Punktezahl Nachricht

Damit zeigt der Server das Ergebnis eines Wurfes an. Für welchen Spieler der Wurf gilt, muss der Client aus dem Spielverlauf selbst herausfinden. Die Nachricht ist optional.

DEF Deinepunkte Anderepunkte
Nachricht

Damit zeigt der Gameserver an, dass der Client verloren hat. Die beiden Punkte geben noch einmal den Endstand wieder. Die Nachricht ist optional. Anschließend beendet der Server die Verbindung.

WIN Deinepunkte Anderepunkte
Nachricht

Damit zeigt der Gameserver an, dass der Client gewonnen hat.Die beiden Punkte geben noch einmal den Endstand wieder. Die Nachricht ist optional. Anschließend beendet der Server die Verbindung.

Tabelle 2:
Nachrichten des Clients

 

Kommando

Beschreibung

AUTH Spielername Nachricht

So reagiert der neu angemeldete Client auf eine HELO-Nachricht und meldet sich beim Gameserver an. Der Spielername besteht ausschließlich aus Kleinbuchstaben. Großbuchstaben, Umlaute, Sonder- und Interpunktionszeichen sowie Whitespace sind nicht erlaubt.

ROLL Nachricht

Entscheidet sich der Client zu würfeln, sendet er diese Nachricht. Das eigentliche Würfeln übernimmt der Gameserver.

SAVE Nachricht

Entscheidet sich der Client, in dieser Runde nicht weiter zu würfeln, gibt er mit diesem Kommando an den Gegner ab. Die Nachricht ist optional.

Die Details des Ablaufes verdeutlicht Abbildung 1: Zunächst meldet sich ein Client beim Server mit der »AUTH«-Meldung und einem Namen an. Der Gameserver wählt aus, wer beginnt: Sobald ein Spieler an der Reihe ist, teilt das der Server mit der »TURN«-Meldung mit. Der Spieler hat dann zwei Optionen: Entscheidet er sich für »ROLL«, begibt er sich in Fortunas Hand und würfelt.


Abbildung 1: Zustände des Protokolls zwischen Gameservern (links) und einem Spieler-Client (rechts): Die abgerundeten Flächen zeigen Zustände, die eckigen Kästen enthalten die Nachrichten, die die jeweilige Seite versendet. Bei Nachrichten mit dickem Rand endet ein Spiel.

Sendet er »SAVE«, ist der Mitspieler an der Reihe - dafür sind dem Spieler die bislang erzielten Punkte sicher. Über die Statusmeldung »THRW« erhält der Client Informationen darüber, wie viele Augen ein Wurf zählte, und zwar sowohl für den eigenen wie für den gegnerischen Spieler. Derjenige Spieler, der als erster 50 Punkte oder mehr erzielt, hat gewonnen und beendet damit das Spiel. Es gibt keine Möglichkeit des Nachziehens. Abbildung 2 zeigt, wie ein Spiel manuell per Telnet abläuft.


Abbildung 2: Zu Testzwecken lässt sich der Gameserver auch manuell ansteuern – etwa mit einem Telnet-Client. So verfolgen Entwickler das Protokoll.

Trainingslager

Ein naiver Client könnte beispielsweise immer so lange per »ROLL« würfeln, bis er entweder gewinnt »WIN« oder der andere Spieler an der Reihe ist. Listing 2 implementiert diesen Ansatz als Bash-Skript, das Anwender mit dem Netcat-Aufruf »nc -e client01.sh wettbewerb.linux-magazin.de 3333« starten. Netcat kümmert sich dabei um den Aufbau der Verbindung und verdrahtet die Standard-Ein- und -Ausgabe mit dem Skript. Als Kniff gibt dieser Bot mit einer Wahrscheinlichkeit von 1:4 (Zeile 13) an seinen Mitspieler ab, um Punkte zu sichern.

Listing 2: Demo-Bot
»client01.sh«

01 #!/bin/bash
02 
03 name=tux
04 
05 while read command a1 a2 a3
06 do
07    case $command in
08       HELO)
09          echo "AUTH $name Ich bin bereit!"
10          ;;
11       TURN)
12          echo "Spielstand ${a1}:${a2}" >&2
13          if (($RANDOM % 4 == 1))
14          then
15            echo "SAVE Das reicht erstmal ..."
16            active=0
17          else
18            echo "ROLL Auf gut Glück!"
19            active=1
20             fi
21          ;;
22       THRW)
23          if [ "$active" = "1" ]
24          then
25             echo "Ich würfle eine $a1." >&2
26             if [ "$a1" = "6" ]
27             then
28                echo "Du bist dran!" >&2
29                active=0
30             fi
31          else
32             echo "Du würfelst eine $a1." >&2
33             if [ "$a1" = "6" ]
34             then
35                echo "Ich bin dran!" >&2
36                active=1
37             fi
38          fi
39          ;;
40       WIN|DEF)
41          echo "Spielende: $command" >&2
42          exit 0
43          ;;
44       *)
45          echo "Unbekannt: $command" >&2
46          ;;
47    esac
48 done

Bis zum 12. September 2010 haben die Bots Zeit, eine ausgefeiltere Taktik zu finden. Bis zu diesem Termin dürfen Leser ihre Programme an [wettbewerb@linux-magazin.de] einsenden, um am Abschlussturnier teilzunehmen. Dabei treten alle Teilnehmer mehrfach gegen jeden anderen Teilnehmer an. Jeder Leser darf nur mit einem einzigen Bot teilnehmen. Erhält die Redaktion mehrere Einsendungen vom selben Absender, startet die letzte fristgerechte Einsendung.

Sie können diesen Artikel als PDF für 99 Cent kaufen. Klicken Sie dazu einfach auf eine der beiden Bezahloptionen Paypal oder ClickandBuy.


Diesen Artikel druckenDiesen Artikel weiterempfehlen Diesen Artikel kommentieren Newsletter abonnieren
Share/Bookmark
Ähnliche Artikel
Auto-Fahrschule Künstliche Intelligenz programmieren mit dem Rennspiel Torcs
Konservierungsmittel Objektdatenbank Db4o für Java und Mono
Erweiterungsbau Mit NSE den Netzwerkscanner Nmap erweitern
Projekteküche Aktueller Überblick über freie Software und ihre Macher Macher
Tooltipps Werkzeuge im Kurztest
Schöner schicken Perl-Skript tunnelt Mailverkehr auf Zuruf
Whitepaper
Open Source Datenintegration in der Praxis: Fallstudien und Anwendungsbeispiele

Über die letzten Jahre hinweg haben sich Open Source Lösungen als fester Bestandteil des gesamten Datenintegrationsmarktes etabliert. Viele Unternehmen haben bereits das Open Source Modell für Ihre Datenintegrationsprojekte aufgegriffen. Das vorliegende White Paper illustriert anhand ausgewählter Fallstudien und Anwendungsbeispiele die Implementierung von Open Source Datenintegration in der Praxis und benennt die daraus resultierenden Vorteile.

Download PDF (Registrierung erforderlich)
The Role of Open Source in Data Integration

Obwohl in den letzten Jahren viele technische Fortschritte erzielt werden konnten, verfügen die meisten Datenintegrationsprozesse nach wie vor nur über eine sehr begrenzte Automatisierung. Das vorliegende White Paper von dem Industry Analyst Mark Madson wird zunächst ein grundlegendes Verständnis von Daten Integration vermitteln, die Vorzüge von Open Source Lösungen für Daten Integration erläutern und Ihnen professionelle Empfehlungen geben, damit Sie Ihre Integrationsjobs noch einfacher und produktiver gestalten können.

Download PDF (Registrierung erforderlich)
Kommentare (7)
von
test0x7b,
26.08.2010 04:50
Weitere Sprace
Was haltet ihr davon javascript als Sprache zuzulassen und hierfür nodejs zur Verfügung zu stellen?
Bisher hat es einfach Spaß gemacht einen Client damit zu schreiben, aber ohne Starterlaubnis schwindet die Lust weiter an der engine zu feilen.
von
monsterDice,
07.08.2010 16:37
Was is denn da los?
Der Server funzt nicht.
Das verdirbt einem regelrecht die Lust am Mitmachen...
von
Jörn,
05.08.2010 20:54
Server nicht erreichbar
Also ich erreich den Server zwar, kriege aber kein HELO ..., sondern einfach nichts. Getestet mit Telnet von verschiedenen Clients (Windows, Linux, Android ).
von
Rainer,
05.08.2010 18:54
online?
Was ist mit eurem Server?
Ich erreich den nicht immer!
von
Nils Magnus,
04.08.2010 16:39
Wiki und Server nun aktiv
Die Website ist heute fertiggeworden und der Gameserver sollte nun auch laufen.

Wenn es Probleme gibt, bitte auf

http://wettbewerb.linux-magazin.de/

eintragen. Dort habe ich auch Kontaktangaben und eine Art Forum (als Wiki) aufgesetzt.
von
worf,
04.08.2010 15:24
50 ist zu wenig, wie wär's mit 300
Superidee, ein Sch****-Bot-Wettbewerb ^^, 50 als Zielwert finde ich ja ein bischen wenig. 100, 500 oder 1000 fänd ich interessanter. So hat man kaum die Möglichkeit, Rückstände aufzuholen. Alternativ könnte der Server noch die aktuelle Platzierung und die Anzahl der Mitspieler übermitteln.
von
Alaroid,
04.08.2010 12:10
bin ich zu früh dran?
Die Wiki-Seite geht nicht und der Server wohl auch noch nicht.

Habe wohl mein Programm zu schnell fertig bekommen.