Projekt Podball: C++-Python-Anbindung von Spieler-Agenten-Modulen.



  • Hallo,
    ich habe eine Programmieraufgabe zu vergeben:

    Kontext:
    Beim Open-Source-Projekt Podball handelt es sich um ein Hobbyprojekt, welches ein futuristisches Ballspiel darstellt, bei dem KI-Agenten die Mannschaften steuern. Damit ist es letztlich ein Programmier-Wettbewerb, bei dem Wettbewerber ihre Agenten (Module) programmieren und gegeneinander antreten lassen.
    Intro-Video: https://youtu.be/wkvp-qvX68E
    Alles weitere zum Projekt auf der Homepage https://sourceforge.net/p/podball/wiki/Home/ .

    Es existieren bis jetzt die Möglichkeiten die Module als Windows-DLL oder Lua-Script einzubinden.

    Im Rahmen dieses Aufgabe soll nun eine Einbindung von Python3-Modulen realisiert werden.
    Also dass die Agenten in Python3 programmiert werden können.
    Diese Module werden von dem Hauptprogramm (C++) aufgerufen. Es existiert eine klar definierte Funktionenschnittstelle über die bestimmte Strukturen (einfache C structs) übergeben werden, die dann dem Script zur Auswertung zur Verfügung stehen. Die Funktionen müssen auch Strukturen zurückliefern. Es geht also darum von einem C++ Hauptprogramm heraus einen Python-Interpreter aufzurufen um eine/mehrere Funktionen auszuführen.
    Zwischen den Aufrufen müssen die Python Module aber auch Zustandsinformationen speichern können.
    Auch müssen zwei solcher Python-Module gleichzeitig gegeneinander spielen können, also die Zustände müssen eigene Instanzen sein und voneinander gekapselt. (nenne wir es im Folgenden Kontexte)
    Allgemein kann man sich dabei stark an das bestehende Lua-Modul anlehnen.

    Ich würde die Sache folgende Etappen untergliedern:

    Etappe0: (Voraussetzungen)
    Nach Anleitung vom Wiki und ggf per Email muss das bestehende Projekt heruntergeladen und gebuildet werden.
    Dazu muss man ggf Mercurial (TortoiseHg), CMake, Visual Studio Express oder -Community und die Lib-Dependencies installieren. Alles ist frei erhältlich. Ggf rückfragen.

    Etappe1: 25%
    - Erstellung eines Prototyps, bei dem eine Funktion in einem Python3-Script vom Podball Hauptprogramm aus aufgerufen wird. Mit Übergabe von Paramteren (eines WORLDSTRUCT), deren Inhalt das Script auslesen kann.
    Grundlage hierfür sind die offiziellen Python Docs:
    https://docs.python.org/3.6/extending/embedding.html, insb Abschnitt 1.3. Pure Embedding, und die darin enthaltenen Beispiele.
    - Es muss natürlich ein Mini-Pythonscript geschrieben werden um die Sache zu testen.
    - Erfolgreiches builden des Prototyps unter Windows-7 oder -10 (64bit) + Visual Studio Express 2013.
    - kurze Dokumentation der zum builden notwendigen Schritte, Installationen und Abhängigkeiten (per EMail).

    Etappe2: 25%
    - Implementierung der gesamten Podball-Agent-API (4 Funktionen), nach obigem Muster.
    - Darauf achten dass der Zustand des Python-Interpreters zwischen Aufrufen erhalten bleibt. Also Python Script kann zB in einem Aufruf eine globale Variable anlegen, die es in einem anderen Aufruf wiederfindet.
    - Gründliches Testen aller Funktionen. Dafür muss ein minimales Python Script geschrieben werden dass alle Funktionen wenigstens einmal benutzt, d.h. übergebene Werte printen, Rückgabewert zurückliefern.

    Etappe3: 25%
    - Zwei solcher Scripte müssen parallel ausgeführt werden können ohne sich in die Quere zu kommen. (parallel im Sinne von verschiedenen Kontexten, kein Multithreading!)
    Nach ersten Nachforschungen im Netz könnte Python da etwas zickig sein, sollte aber gehen.
    Hierzu sollte der Abschnitt https://docs.python.org/3/c-api/init.html#sub-interpreter-support nützlich sein.
    - Entsprechend testen und zeigen dass beide Instanzen der Scripts ihren Zustand wiederfinden.

    Etappe4: 25%
    - Implementierung der Möglichkeit das Debug-Drawing Interface zu nutzen (2 Funktionen). Hier muss das Python-Script während einer der API-Funktionen-Aufrufe Funktionen vom Hauptprogramm aufrufen können. Also die umgekehrte Richtung wie die anderen Aufrufe.
    Sollte durch das Kaptiel "1.4. Extending Embedded Python" abgedeckt sein:
    https://docs.python.org/3.6/extending/embedding.html#extending-embedded-python
    - Entsprechend das Mini-Python-Script erweitern um das zu testen.

    Was bekommt man dafür?
    Nun, das ist ein nichtkommerzielles Open-source Hobbyprojekt, insofern: Eternal Fame! 🙂
    Aber wenn mir jemand einen guten Eindruck macht, bin ich auch bereit was dafür zu zahlen.
    Zahlung eines entsprechenden Teilbetrags dann jeweils nach erfolgreicher Abnahme einer Etappe.
    (Überweisung per PayPal)
    Ich rechne in etwa mit 10 Stunden Entwicklungszeit (für einen etwas erfahrenen Progger).

    Kentnisse nötig: C++, Python, wünchenswert: Mercurial, CMake, Visual Studio (Express/Community).

    Koordination per Email oder bei Bedarf Skype oder Teamspeak (abends oder am Wochenende).

    Bei Interesse Email: scrontch [at] gmx.de



  • Neues Win32 Binary podball-win32-2.3.0.zip steht zum download bereit.
    https://sourceforge.net/projects/podball/files/latest/download



  • [quatsch]



  • Na, mag sich da niemand ranwagen?
    Ist ein schönes kleines überschaubares Spass-Projekt imho, und bei der Aufgabe kann man echt was lernen.
    Gibt auch noch zahlreiche andere klein-Aufgaben rund um das Mutter-Projekt.
    z.b. bräucht ich noch jemand der mal einen Linux-Build testet.