|
|
|
|
|
|
|
|
|
|
|
{ |
|
|
|
|
|
"cells": [ |
|
|
|
|
|
{ |
|
|
|
|
|
"cell_type": "markdown", |
|
|
|
|
|
"metadata": {}, |
|
|
|
|
|
"source": [ |
|
|
|
|
|
"# Software Entwicklung\n", |
|
|
|
|
|
"\n", |
|
|
|
|
|
"## Kapitel 11: Bots\n", |
|
|
|
|
|
"\n", |
|
|
|
|
|
"### 11.2 Bot-Server\n", |
|
|
|
|
|
"\n", |
|
|
|
|
|
"Die wilde Welt des Donut-Planten wird von einem Bot-Server simuliert, der die Aktionen des Bots\n", |
|
|
|
|
|
"entgegennimmt und eine aktualisierte Welt zurückliefert. In einer Wettkampfsituation wird dieser\n", |
|
|
|
|
|
"Server von der Wettkampfleitung zur Verfügung gestellt, während der Entwicklung sollte jeder aber\n", |
|
|
|
|
|
"seinen eigenen Bot-Server nutzen können. In diesem Jupyter-Notebook wird erläutert, wie ein\n", |
|
|
|
|
|
"eigener Bot-Server gestartet werden kann." |
|
|
|
|
|
] |
|
|
|
|
|
}, |
|
|
|
|
|
{ |
|
|
|
|
|
"cell_type": "markdown", |
|
|
|
|
|
"metadata": {}, |
|
|
|
|
|
"source": [ |
|
|
|
|
|
"#### 11.2.1 Lösungsansatz\n", |
|
|
|
|
|
"Der Bot-Server ist ein C-Programm, das von Leuten bei [KURZ Digital](https://www.kurzdigital.com/)\n", |
|
|
|
|
|
"entwickelt und gepflegt wird. Der Quellcode ist Open Source und\n", |
|
|
|
|
|
"auf [Github](https://github.com/markusfisch/bots.git) verfügbar. Dort findet sich auch eine\n", |
|
|
|
|
|
"Anleitung zu den Optionen des Bot-Servers.\n", |
|
|
|
|
|
"\n", |
|
|
|
|
|
"Im Moodle-Kurs werden ausführbare Programmdateien der\n", |
|
|
|
|
|
"Serversoftware für alle notwendigen Betriebssysteme zum\n", |
|
|
|
|
|
"Download bereitgestellt." |
|
|
|
|
|
] |
|
|
|
|
|
}, |
|
|
|
|
|
{ |
|
|
|
|
|
"cell_type": "markdown", |
|
|
|
|
|
"metadata": {}, |
|
|
|
|
|
"source": [ |
|
|
|
|
|
"#### 11.2.2 Starten des Bot-Servers\n", |
|
|
|
|
|
"\n", |
|
|
|
|
|
"Nach der Installation kann die Serversoftware über einen\n", |
|
|
|
|
|
"Kommandozeilenbefehl im Installationsverzeichnis gestartet werden.\n", |
|
|
|
|
|
"\n", |
|
|
|
|
|
"<code>./bots </code>\n", |
|
|
|
|
|
"\n", |
|
|
|
|
|
"Das Ergebnis ist die Anzeige der möglichen Betriebsmodi des\n", |
|
|
|
|
|
"Servers und deren Optionen. Der\n", |
|
|
|
|
|
"Port, auf dem der Server lauscht, besitzt standardmäßig die\n", |
|
|
|
|
|
"Portnummer 63187.\n", |
|
|
|
|
|
"\n", |
|
|
|
|
|
"<code>port to listen for players, default is 63187 </code>" |
|
|
|
|
|
] |
|
|
|
|
|
}, |
|
|
|
|
|
{ |
|
|
|
|
|
"cell_type": "markdown", |
|
|
|
|
|
"metadata": {}, |
|
|
|
|
|
"source": [ |
|
|
|
|
|
"#### 11.2.3 Starten im Trainingsmodus und Verbinden eines Bots\n", |
|
|
|
|
|
"\n", |
|
|
|
|
|
"Der Bot-Server besitzt einen Trainingsmodus, in dem\n", |
|
|
|
|
|
"man seinen Bot ohn konkrete Aufgabe über die Oberfläche\n", |
|
|
|
|
|
"manövrieren kann.\n", |
|
|
|
|
|
"\n", |
|
|
|
|
|
"<code>./bots training</code>\n", |
|
|
|
|
|
"\n", |
|
|
|
|
|
"Nach dem Start wartet der Server, dass sich ein Client verbindet.\n", |
|
|
|
|
|
"\n", |
|
|
|
|
|
"<code>waiting for players (at least 1) to join ...</code>\n", |
|
|
|
|
|
"\n", |
|
|
|
|
|
"Das Client-Skript, das den Bot auf dem Donut steuert, soll dann als\n", |
|
|
|
|
|
"separates Python-Skript erstellt werden.\n", |
|
|
|
|
|
"Die Verbindungsdaten, die für die Kontaktaufnahme notwendig sind,\n", |
|
|
|
|
|
"sind die IP-Nummer des Servers (hier: *localhost* 127.0.0.1) und der Port 63187." |
|
|
|
|
|
] |
|
|
|
|
|
}, |
|
|
|
|
|
{ |
|
|
|
|
|
"cell_type": "markdown", |
|
|
|
|
|
"metadata": { |
|
|
|
|
|
"pycharm": { |
|
|
|
|
|
"name": "#%% md\n" |
|
|
|
|
|
} |
|
|
|
|
|
}, |
|
|
|
|
|
"source": [ |
|
|
|
|
|
"Um die Vorgehensweise bei der Clientprogrammierung zu verdeutlichen,\n", |
|
|
|
|
|
"wird [hier](112%20Botclient.ipynb) ein grundlegender Client gezeigt,\n", |
|
|
|
|
|
"der von den Kursteilnehmern als Start für eigene Implementierungen herangezogen werden kann." |
|
|
|
|
|
] |
|
|
|
|
|
} |
|
|
|
|
|
], |
|
|
|
|
|
"metadata": { |
|
|
|
|
|
"kernelspec": { |
|
|
|
|
|
"display_name": "Python 3", |
|
|
|
|
|
"language": "python", |
|
|
|
|
|
"name": "python3" |
|
|
|
|
|
}, |
|
|
|
|
|
"language_info": { |
|
|
|
|
|
"codemirror_mode": { |
|
|
|
|
|
"name": "ipython", |
|
|
|
|
|
"version": 3 |
|
|
|
|
|
}, |
|
|
|
|
|
"file_extension": ".py", |
|
|
|
|
|
"mimetype": "text/x-python", |
|
|
|
|
|
"name": "python", |
|
|
|
|
|
"nbconvert_exporter": "python", |
|
|
|
|
|
"pygments_lexer": "ipython3", |
|
|
|
|
|
"version": "3.8.2" |
|
|
|
|
|
} |
|
|
|
|
|
}, |
|
|
|
|
|
"nbformat": 4, |
|
|
|
|
|
"nbformat_minor": 2 |
|
|
|
|
|
} |