Sechster Programmierwettbewerb gestartet

Alle Jahre wieder … ist sicherlich auch Weihnachten, aber dieses Jahr kommt vor Weihnachten erst noch ein neuer Programmierwettbewerb von freiesMagazin.

Dieses Jahr ist man auf einer einsamen Insel gestrandet und versucht gegen die drohende Überflutung anzukämpfen. Auf der Insel kann man sich bewegen und überflutete Inselfelder trockenlegen. Die Flut steigt im Laufe des Spiels aber immer höher, sodass viele Teile der Insel unwiederbringlich untergehen und verloren sind. Wenn man sich auf so ein untergegangenes Feld bewegt bzw. das Feld, auf dem man steht, untergeht, wird man von den Fluten erfasst und das Spiel ist vorbei. Ziel ist es natürlich am längsten den Kopf über Wasser zu halten. Die Idee für den Wettbewerb stammt von dem Spiel „Die verbotene Insel“.

Webseite mit Regeln zur Teilnahme

Quellcode zur Teilnahme

Jeder Teilnehmer hat bis zum 31. Januar 2013 Zeit, seinen Bot einzureichen. Die Bots werden von uns getestet und wir geben Rückmeldung, soweit möglich. Die Teilnehmer können den Bot bis zu fünfmal bis zum Stichtag ausbessern. Auch im Team darf man arbeiten.

Bei den Preisen wagen wir uns auf fremdes Terrain, da es einmal nicht irgendwelche Buchgutscheine zu gewinnen gibt, sondern Preise, die eher das Thema „Spiel“ treffen. Die ersten drei Plätze dürfen aus den Adventures „Ankh – Herz der Osiris“ und „Jack Keane“ (beides natürlich für Linux) sowie dem Solo-Brettspiel „Pinguintanz“ wählen. Ansonsten gibt es noch als Trostpreis Doppel-CDs des diesjährigen Free! Music! Contest 2012 zu gewinnen.

Wir wünschen allen Teilnehmern viel Erfolg und freuen uns auf eine rege Beteiligung.

Ihre freiesMagazin-Redaktion

PS: Um immer auf den aktuellen Stand zu sein, was den Wettbewerb angeht, kann man die Kommentare zur Wettbewerbsseite per RSS abonnieren. Kommentare können dort aber nur vom freiesMagazin-Team verfasst werden!

Preise naja

Hmm die Preise sind jetzt nicht so toll. Mit Gutscheinen oder sowas würde man mehr anfangen.

Re: Preise naja

Ich denke, wer nur wegen der Preise bei den Wettbewerben von freiesMagazin mitmacht, ist eh nicht der richtige Ansprechpartner. Die Preise sollen nur einen kleinen Anreiz bieten. Die Hauptmotivation soll Spaß am Programmieren sein. Das erfordert dann zum Mitmachen eigentlich gar keine Preise mehr.

Fehler im Spiel?

Hallo!

Ich vermute es gibt einen kleinen Fehler in der Engine. Ab einem bestimmten Flutlevel (5 oder 6?) hört der Server auf "FLOOD" Kommandos zu senden, wodurch der Bot unendlich lange überlebt.
Log: http://pastebin.com/ubyv3j3j (Hab irgendwann abgebrochen)

Re: Fehler im Spiel?

Vielen Dank fürs Melden. Ich versuche einmal, das zu reproduzieren. Ist mir beim Test nicht aufgefallen.

Wenn es reproduzierbar ist, bitte die Engine im Debug-Modus kompilieren und nochmal laufen lassen. Dann sieht man ggf. wo der Fehler genau liegt, dass er keine FLOOD-Befehle mehr geben mag.

Ich versuche mich auf alle Fälle an der Analyse der Logdatei.

Re: Fehler im Spiel?

Fehler behoben!

Ist schon fast peinlich: Ein Bot konnte sich auf ein untergegangenes Feld bewegen und danach weitere Kommandos ausführen. Es war damit möglich, „übers Wasser zu laufen“. Daneben konnte man ein untergegangenes Feld auch trocken legen, was ebenfalls nicht möglich sein sollte. Der Fehler führte zu einem Endlosprogramm, da das untergegangene Felder nicht mehr zur Auswahl beim Überfluten stand.

python auch erlaubt?

Hi,

ist da python auch erlaubt?
Wenn ja, wie kann ich das beim Start an das script mitgeben?
Bin da leider nicht so bewandert drin.
Danke!

Re: python auch erlaubt

Python ist natürlich auch erlaubt. Das Skript einfach ausführbar machen und exakt genauso wie den derzeitigen Dummy-Bot aufrufen:

$ ./start.sh "fields/simple.txt" "pfad/zum/bot/pythonbot.py"

Hallo, ich bins

Hallo, ich bins nochmal,

danke für den Hinweis, hat wirklich funktioniert. Problem war, dass ich den python-header (#!/usr/bin/env python) vergessen hatte.

Jetzt hakts aber an anderer Stelle. Irgendwie scheint sich die Konsole zu sträuben auch antworten von meinem Bot entgegenzunehmen.
Erst wenn mein Python-script korrekt beendet wird, wird meine zuvor getätigte Ausgabe ausgegeben. Der Server (das Spiel) reagiert dann noch drauf, bekommt aber dann logischerweise keinen Input nach dem "ROUND" Kommando und bricht dann mit "END" ab.

Vielleich kannst du mir evtl. nochmal nen Tipp geben.
Schon mal danke!

Gruß
Raph

Re: Python

Schau mal in das Archiv, da gibt es eine FAQ. Ggf. fehlt einfach nur das Flushen der Ausgabe. Geht mit sys.stdout.flush()

Du kannst auch einfach die Wettbewerbsbeiträge vom letzten Jahr durchschauen. Da waren auch Python-Programme dabei.

Hallo habe mal eine

Hallo habe mal eine Frage.

Wie kann ich meinen in Java programmierten Bot aufrufen?

wenn ich ./start.sh "fields/simple.txt" "java /bots/meinBot/Bot" ausführe klappt es nicht habe auch schon versucht denn bot erst ins hauptverzeichnis zu kopieren und von da aus zu starten was eben falls nicht möglich war

Re: Java

Eine Fehlermeldung wäre hilfreich. Einmal sehe ich, dass Du /bots/meinBot/Bot geschrieben hast. Das funktioniert nicht, weil Dein Bot sicher nicht im Root-Verzeichnis liegt, oder? Es sollte wohl eher bots/meinBot/Bot heißen.

Aber auch dann musst Du vermutlich den classpath mit angeben, grob geraten könnte das also java -classpath /bots/meinBot Bot lauten.

hi Die genau Fehlermeldung

hi

Die genau Fehlermeldung lautet

./start.sh: Zeile 39: java -classpath bots/ersterVersuch Bot: Datei oder Verzeichnis nicht gefunden

Der Aufruf erfolgt mit

./start.sh "fields/simple.txt" "java -classpath bots/ersterVersuch Bot" --log |& tee bot.log

Das /bot/meinBot/Bot war ein tipp fehler von mir natürlich liegt der bot nicht im root

Hallo, habe es mit folgenden

Hallo,

habe es mit folgenden befehl versucht

./start.sh "fields/simple.txt" "java bots/meinBot/Bot" --log |& tee bot.log

und

./start.sh "fields/simple.txt" "java -classpath bots/meinBot/Bot" --log |& tee bot.log

beidemale kam die fehlermeldung

./start.sh: Zeile 39: java bots/meinBot/Bot: Datei oder Verzeichnis nicht gefunden
./start.sh: Zeile 39: java -classpath bots/meinBot/Bot: Datei oder Verzeichnis nicht gefunden

Re: Java

Okay, Fehler gefunden und im neuen Archiv behoben.

Ich habe den Bot-Aufruf in der start.sh aus Versehen in Anführungszeichen stehen gehabt. So hat er versucht, die Datei java -classpath bots/meinBot Bot zu starten, die es natürlich nicht gibt.

Kompiliertipp

Oh, ein neuer Wettbewerb, nett. :)
Zumindest unter Archlinux wird zum Kompilieren der GUI auch noch das Paket `gdb` benötigt. Wenn man (wie ich) `qmake && make` ohne dieses Paket ausführt, muss (natürlich nach der enstprechenden Installation) zuerst die Datei `gui` gelöscht werden, danach funktioniert das Kompilieren ohne Probleme. :)
Grüße, Keba.

Re: Kompiliertipp

Ich habe grad ne Änderung am GUI-Projekt gemacht. Kannst Du mal alles neu laden, gdb entfernen und nochmal testen? Jetzt sollte gdb nicht mehr erforderlich sein.

Was habe ich geändert? CONFIG *= debug durch release ersetzt.

Funktioniert ohne Probleme,

Funktioniert ohne Probleme, d. h. die so kompilierte GUI kann ein Spiel nachspielen. :)

Frage zu den Regeln

Hallo wenn ich das richtig verstanden habe, wird je nach "überflutungsstand" eine Anzahl von noch nicht untergegangenen Felder geflutet. Ist es dabei möglich, dass ein trockenes Feld in einer Runde 2x überflutet wird und somit in einer RUnde untergeht ?

Vielen Dank.

Ich finde es wirklich toll das ihr wieder so eine Wettbereb startet. Die Preise sind egal ich würde auch so mitmachen ....

Re: Frage zu den Regeln

Ja, dazu habe ich am 01.12.2012 die Regel konkretisiert: http://www.freiesmagazin.de/sechster_programmierwettbewerb#comment-2713

"Müssen mehr Felder überflutet werden als noch verfügbar sind, wird nach dem Ziehen der Ablagestapel gemischt und weiter gezogen. Dies kann dazu führen, dass ein Feld zweimal pro Runde überflutet wird."

Das passiert also eher zum Spielende. Am Spielanfang sind noch genügend "unverbrauchte" Felder da, die überflutet werden können.

an sich nicht

So wie ich das verstanden habe, ist das an sich nicht möglich, da die Karte mit diesem Feld auf den Ablagestapel kommt. Ausnahme: Es gibt nicht mehr genug andere Felder, die in einer Runde geflutet werden können.
Aber: Zitat:
"Wird eine Flut-steigt-Karte gezogen, werden zusätzlich die bereits überfluteten Felder gemischt und oben auf den Auswahlstapel gelegt. Untergegangene Felder werden nicht wieder hinzugefügt. Das heißt, dass kürzlich überflutete Felder sehr schnell erneut überflutet werden."

Das heißt in einer neuen Runde kann das geflutete Feld durchaus wieder gezogen werden.

super

Hallo,
ich finds auch super, dass es wieder einen neuen Programmierwettbewerb gibt!
Und jedes mal eine Spielengine und eine schöne GUI zu schreiben is sicherlich auch nicht unwesentliche Arbeit. Danke!
Tom

Re: super

Vielen Dank für das Feedback. Das motiviert für spätere Wettbewerbe. :) Ob die GUI schön ist, sei aber mal dahingestellt. ^^

Position.hh nicht gefunden

Kann es sein, dass durch das Update heute, ein neuer Fehler entstand?


freiesmagazin-2012-12-contest/gui$ qmake && make
g++ -c -pipe -O2 -Wall -W -D_REENTRANT -DQT_WEBKIT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -I../src/libtiles -I../src/libgame -I../src/libbot -I. -o CommandHandler.o CommandHandler.cpp
In file included from GameData.hh:22:0,
from CommandHandler.cpp:20:
../src/libgame/Gameboard.hh:23:23: fatal error: Position.hh: No such file or directory
compilation terminated.
make: *** [CommandHandler.o] Error 1

Re: Position.hh nicht gefunden

Danke, eben behoben.

Auch schon hochgeladen? Habs

Auch schon hochgeladen?

Habs Archiv gerade wieder heruntergeladen und der Fehler kommt noch.

Ich habe sicherheitshalber

Ich habe sicherheitshalber eben noch einmal das Archiv hochgeladen und das pro-File geprüft. Sollte nun passen!

Debug-Output

Es wäre schön, wenn es eine Möglichkeit gebe mit dem Bot Debug-Nachrichten auszugeben zu können, die von der Engine ignoriert werden. Diese könnten dann z.B. durch ein # davor gekennzeichnet werden. Es ist etwas nervraubend den Bot manuell zu starten und die befehle einzutippen.

Re: Debug-Output

Die Möglichkeit gibt es bereits, wenn Du Dir den Beispielbot anschaust. Schreib die Debug-Nachrichten nicht auf STDOUT, sondern auf STDERR: https://de.wikipedia.org/wiki/Stdout Wenn Du Java nutzt, schreib also auf System.err.

Frage zu den trocken gelegten Feldern

Hallo,

cooler Wettbewerb! Trotz der ausführlichen Regelbeschreibung stellt sich mir folgende Frage:
Was passiert genau mit wieder trocken gelegten Feldern? Bleiben solche Felder wie die restlichen überfluteten Felder trotzdem im Ablagestapel und landen mit diesen durchmischt bei der nächsten Flut wieder oben auf dem Auswahlstapel?
Oder kommen Sie nach einem anderen Verfahren wieder in den Auswahlstapel?

Grüße,
Christian

Re: Frage zu den trocken gelegten Feldern

Überflutete Felder, die man danach trocken gelegt hat, werden ganz normal wie alle anderen Felder auch behandelt. Sie landen, sobald die Flut steigt, wieder auf dem Auswahlstapel und werden durch das Trockenlegen nicht vom Ablagestapel entfernt.

Python Version

Hallo, wollte nachfragen welche Python Version auf eurem System läuft.
thx
greets

Re: Python-Version

Hier die Ausgabe:

$ python2.7 --version
Python 2.7.3
$ python3.2 --version
Python 3.2.3

Pingback

[...] 01/2013 erschienen » Noch eine Woche bis zum Ende des 6. Programmierwettbewerbs Wie am 2. Dezember 2012 angekündigt, geht der sechste freiesMagazin-Programmierwettbewerb langsam zu [...]

Pingback

[...] freiesMagazin 02/2013 erschienen » Vom 1. Dezember 2012 bis zum 31. Januar 2013 fand der sechste freiesMagazin-Programmierwettbewerb statt. In diesem [...]