FAQ zum zweiten Programmierwettbewerb

Obwohl der zweite Programmierwettbewerb noch nicht einmal vor einer Woche startete, gab es in der Zeit schon zahlreiche Fragen, weil die Anleitung an einigen Stellen nicht detailliert genug ist. Aus dem Grund gibt es hier jetzt eine Liste mit den Fragen und Antworten. Die Webseite mit den Details zum Wettbewerb wurde bereits entsprechend geändert.

Wichtiger Hinweis: Dieser Beitrag kann zwar nicht von anderen kommentiert werden, bei jeder Aktualisierung wird aber ein Kommentar von uns hinterlassen, den man über ein Klick auf das RSS-Icon in der Browser auch abonnieren kann. So sieht man im Feedreader sofort, wenn sich hier auf der Seite etwas geändert hat.

Fragen zu Spielfeldern

-> Wie wahrscheinlich treten die einzelnen Elemente auf? Werden diese zufällig erstellt?

<- Die Spielbretter sind alle handgemacht, daher gibt es keine Wahrscheinlichkeit, mit der ein bestimmtest Spielfeld auftaucht.

Schieber gegen Wand

-> Verhält sich ein Schieber, der in Richtung einer direkt am Schieberfeld angrenzenden Wand zeigt, wie eine Schrottpresse?

<- Nein, denn der Bot ist maximal ein halbes Feld breit. Ein Schieber geht genau bis zur Hälfte eines Feldes. Das heißt, wenn der Schieber komplett ausgefahren ist, dotzt der Bot leicht gegen die Wand, aber es passiert nicht Schlimmes. Wenn keine Wand da ist, reicht der Schwung aber aus, damit er auf das nächste Feld rutscht.

-> Kann man eine Schrottpresse oder einen Schieber von allen vier Seiten betreten?

<- Nein, eine Schrottpresse und auch die Schieber haben an der jeweiligen Seite, an der der Schieber steht, eine Wand und können von dort nicht befahren oder verlassen werden.

-> Wird man beim Rutsch durch ein Ölfeld auf das am letzten Ölfeld angrenzende Feld gesetzt oder bleibt man auf dem letzten Ölspurfeld stehen?

<- Man landet auf dem letzten Feld nach der Ölspur (soweit kein anderes Objekt einen vorher stoppt).

-> Falls zwei Förderbänder in der Richtung aufeinander zeigen und man wird von einem auf das andere Band geschoben, wird man dann um 180° gedreht?

<- Nein, wird man nicht. Das mit der Drehung auf den Förderbändern kommt daher, dass diese „untrennbar“ verbunden sind und eigentlich grafisch einen Bogen beschreiben sollte. Das war aber zu umständlich zu realisieren. Stellt man es sich in real vor, wird man auf einem Gepäckförderband auch gedreht, wenn es um die Kurve geht. Aber man wird sicherlich nicht gedreht, wenn man auf einem Förderband steht, was gegen ein anderes läuft. Da fällt man maximal um.

Förderband und Ölfeld

-> Per Förderband gelangt man auf ein Ölfeld, nach dessen Durchrutschen man auf ein weiteres, aber andere Richtung zeigendes Förderband gelangt: Wird man dann auch gedreht?

<- Ja, derzeit wird der Bot auch gedreht, wenn er von einem Fließband über eine Ölspur auf ein anderes Fließband geschoben wird. Das klingt etwas ungewöhlich, aber ist so umgesetzt

-> Wie groß werden die Spielfelder sein? Signifikant größer als die chop.dat?

<- Die Wettbewerbsspielfelder werden voraussichtlich alle eine Größe von 12x12 Felder haben.

-> Es gibt das Leerzeichen für ein leeres Feld und es gibt das Zeichen a für ein Feld ohne Wände. Stellen diese zwei Zeichen das gleiche dar oder gibt es irgend einen Unterschied zwischen diesen Feldern?

<- Nein, die Felder sind identisch. Der Grund ist einfach, dass die erste (linke) Wand nicht bei b anfangen sollte. Wenn also ein a gelesen wird, ist das wie ein leeres Feld.

-> Wenn der Roboter das erste Feld eines langen Förderbandes betritt, wird er dann bis ganz ans Ende geschoben?

<- Nein, der Roboter wird pro Phase (also nach dem Ausspielen einer einzelnen Karte) nur immer ein Feld auf dem Förderband geschoben und nicht bis ans Ende. Das hat vor allem den Grund, dass es auch Förderbänder geben kann, die im Kreis fahren. Der Roboter würde so nie mehr stillstehen blieben.

-> Wenn der Roboter auf eine Wand zufährt, verfallen dann überflüssige Bewegungen oder ist der Zug dann einfach nicht möglich?

<- Wenn der Roboter ein Feld vor einer Wand steht und über die Karte MF 3 drei Schritte vorwärts fahren soll, fährt er einen Schritt und die zwei anderen verfallen.

-> Wenn man direkt vor ein Ölspur steht und drei Felder mit MF 3 nach vorn geht, wo landet man?

<- Man macht einen Schritt, rutscht bis auf das erste Feld nach der Ölspur und geht dann noch zwei Schritte weiter.

-> Kann man von einem Schieber in eine Schrottpresse geschoben werden?

<- Nein. Da sich Presse und Schieber gleichzeitig bewegen, kann man nie direkt von einem Schieber in eine Presse geschoben werden.

Fragen zur Schnittstelle

-> Ist es erlaubt, dass der Bot während des Spiel Dateien schreibt, um sich bisschen was zu merken?

<- An Dateien darf man abspeichern, was man möchte, natürlich.

-> Wenn schon nur 6 Sekunden pro Spiel zur Verfügung stehen, gibt's dann eventuell ein wenig Vorlaufzeit für jedes neue Spielfeld?

<- Also 6 Sekunden sind schon sehr großzügig - natürlich auf dem späteren Testrechner. Wer seine KI auf einem 486er schreibt, wird wohl auch mit 20 Sekunden Ausführungszeit am Wettbewerb teilnehmen können.

-> In der Datei cards.txt scheinen nicht nur die 8 Karten zu stehen, aus denen man auswählen kann, sondern der ganze restliche Stapel. Darf die KI diese Information benutzen?

<- Genau genommen ist es sogar die Aufgabe der KI, die Datei cards.txt einzulesen. Aber: Wenn die KI dran ist, stehen in der Datei nicht mehr alle Karten des Stapels, sondern nur die 8, die zur Auswahl stehen. Es gibt daher für die KI keine Möglichkeit alle Karten komplett einzulesen - zumindest wenn die Engine keine Lücke hat.

-> Gibt es einen definierte Rückgabewert für die KI?

<- Nein, es gibt nur 0 oder nicht 0. Man sollte nur dann einen Wert ungleich 0 zurückliefern, wenn die KI Probleme hat, denn dies führt automatisch zu einem kompletten Spielabbruch.

Fragen zur 3-D-Oberfläche

-> Inwiefern soll das 3-D-Spielbrett wirklich 3-D sein? Ist damit nur isometrische Darstellung gedacht?

<- Es ist sowohl richtiges 3-D (also mit frei beweglicher Kamera), als auch 3-D in isometrischer Ansicht sowie 2-D mit isometrischer Ansicht gemeint.

-> Reicht eine isometrische Darstellung aus oder soll noch eine weitere (und wenn ja was für eine) Darstellung existieren?

<- Es wäre ggf. nicht falsch, wenn man alle vier Standardansichten der isometrischen Perspektive wählen kann oder gar frei rotieren und zoomen.

-> Soll die Kartengröße des 3-D-Spielbretts beliebig groß sein können?

<- Ja, es wäre gut, wenn zum Beispiel auch ein 100x100-Spielbrett dargestellt werden könnte.

-> Darf die 3-D-Darstellung voraussetzen, dass bestimmte Pakete installiert sind, wie z.B. die wxWidgets-Bibliothek oder verschiedene OpenGL-Bibliotheken?

<- Natürlich wird man für die grafische Darstellung auf vorhandene Bibliotheken zurückgreifen müssen. Die Mesa-Bibliotheken, wxWidgets 2.8 und andere unter neuen Linux-Distributionen vorhandenen Bibliotheken sind dabei kein Problem.

Allgemeine Fragen

-> Darf man außer Konkurrenz auch an den anderen Wettbewerbskategorien teilnehmen?

<- Da der Wettbewerb offen geführt und die spätere Wertung auch nicht geheim gehalten wird, kann jeder daheim bei sich selbst nachvollziehen, ob seine KI in einer anderen Kategorie besser oder schlechter abschneidet. Eine Einbeziehung aller KIs, die nur außer Konkurrenz teilnehmen, würde den Testaufwand auf unserer Seite wahrscheinlich zu sehr erhöhen.
Wer seine 3-D-Oberfläche außer Konkurrenz einreichen will, kann dies aber gerne tun. Wir stellen diese dann vor, sie kann aber nicht gewinnen, wenn der Teilnehmer bereits in einer anderen Kategorie vertreten ist.

-> Wie kann man auf die Bibliotheken (also z.B. die libcards.a) in C zugreifen?

<- In C gar nicht, nur in C++, da die Library Klassen enthält und keine Funktionen. Am besten schaut man sich für eine Verwendung das Makefile der Referenz-KI im Ordner KIs/robots-ki_dir an. Theoretisch muss man nur die Header-Dateien per #include "NAME.hh" in die jeweilige C++-Datei einbinden und dann beim Kompilieren die jeweilige Library mit angeben über

$ g++ -I./libbase -I./libcards -c main.cpp
$ g++ -o ki.bin main.o -L./libbase -L./libcards -lcards -lbase 

-> Ist der Wettbewerb nur für natürliche Personen oder kann man auch als Verein daran teilnehmen?

<- Es ist durchaus möglich, auch als Verein teilzunehmen, jedoch muss man sich den Preis dann natürlich untereinander aufteilen.

-> Muss das Ziel nur „überrollt“ werden oder muss die Bewegung direkt auf dem Ziel enden?

<- „Überrollen“ reicht. Sobald das Zielfeld einmal befahren wurde, endet das Spiel.

-> Beim Starten der GUI bekomme ich einen Fehler der Art "invalid multibyte char". Was soll ich tun?

<- Die GUI setzt Ruby in der Version 1.8.x voraus, mindestens jedoch 1.8.6. - Mit Ruby 1.9 funktioniert die Anwendung nicht.

-> Beim Starten der GUI (nicht des GUI-Helders) bekomme ich einen Fehler der Art "X Error of failed request: BadMatch (invalid parameter attributes)". Hab ich was kaputt gemacht?

<- Vermutlich unterstützt der aktuelle Grafikkartentreiber eine genutzte OpenGL-Funktion nicht und kann daher die GUI nicht öffnen. Hier bleibt einem keine Wahl außer den Grafiktreiber auf eine Version zu aktualisieren, mit der 3-D resp. OpenGL korrekt unterstützt wird.

-> Wieso darf man nur in einer Kategorie teilnehmen?

<- Der Gewinner aus der Kategorie "schwer" würde ansonsten mit hoher Wahrscheinlichkeit auch gleich die Preise für "mittel" und "leicht" einheimsen, was wir vermeiden wollen.

-> Was passiert, wenn zu wenige Programmierer in einer Kategorie teilnehmen?

<- Sollte das passieren, wird der Preis an den Zweitplatzierten aus der nächsthöheren Kategorie vergeben (mit Ausnahme der Kategorie "GUI").

01.10.2009, 20:53 Uhr: 1.

01.10.2009, 20:53 Uhr: 1. Version erstellt

04.10.2009, 09:51 Uhr: Zwei

04.10.2009, 09:51 Uhr: Zwei neue FAQ-Einträge zur GUI mit Ruby 1.9 und Verhalten bei einer Ölspur.

10.10.2009, 20:37 Uhr: Zwei

10.10.2009, 20:37 Uhr: Zwei neue FAQ-Einträge zu GUI-Problemen bei nicht aktuellem Grafiktreiber und zur Interaktion zwischen Schieber und Schrottpresse.

13.10.2009, 17:46 Uhr: Neue

13.10.2009, 17:46 Uhr: Neue FAQ-Einträge bzgl. KI-Rückgabewert und Teilnahme.

15.12.2009, 19:53 Uhr:

15.12.2009, 19:53 Uhr: Kleine Änderungen und Bugfixes an der GUI, die aber nichts am Verhalten ändern