„112 Botclient.ipynb“ löschen
This commit is contained in:
parent
dfb9c6e676
commit
df759d04e0
@ -1,160 +0,0 @@
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"# Software Entwicklung\n",
|
||||
"\n",
|
||||
"## Kapitel 11: Bots\n",
|
||||
"\n",
|
||||
"### 11.3 Bot-Client\n",
|
||||
"\n",
|
||||
"#### 11.3.1 Voraussetzung\n",
|
||||
"\n",
|
||||
"Das nachfolgende Beispielskript ist erst lauffähig, wenn der zugehörige Server läuft."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"#### 11.3.2 Implementierung\n",
|
||||
"\n",
|
||||
"Zunächst müssen dem Client die notwendigen Verbindungsdaten zur Verfügung gestellt werden."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"host=\"127.0.0.1\" # IP-Nummer des Rechners, auf dem der Bot-Server läuft\n",
|
||||
"port=12345 # Hier muss die Portnummer eingetragen werden"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Der Server wird immer wieder den für den Bot sichtbaren Weltausschnitt als mehrzeiligen Text liefern.\n",
|
||||
"Der Ausschnitt ist immer quadratisch, d.h. aus der Länge der ersten Zeile lässt sich ableiten,\n",
|
||||
"wie viele Zeilen noch gelesen werden müssen. Die nachfolgende Funktion <code>read_view</code>\n",
|
||||
"leistet dieses Einlesen und gibt den sichtbaren Ausschnitt als String zurück."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"def read_view(f):\n",
|
||||
" view = f.readline()\n",
|
||||
" if not view:\n",
|
||||
" return\n",
|
||||
" for x in range(2, len(view)):\n",
|
||||
" line = f.readline()\n",
|
||||
" if not line:\n",
|
||||
" return\n",
|
||||
" view += line\n",
|
||||
" return view"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Die Beispielimplementierung besitzt keine eigene Logik, sondern lässt nach Ausgabe des\n",
|
||||
"sichtbaren Ausschnitts die Steuerung des Bots über Tastatureingaben zu. Dabei bedeuten:\n",
|
||||
"\n",
|
||||
"* W -> Vorwärts\n",
|
||||
"* A -> Drehung nach links\n",
|
||||
"* D -> Drehung nach rechts\n",
|
||||
"* S -> Rückwärts\n",
|
||||
"* Jede andere Eingabe -> Beenden des Bots\n",
|
||||
"\n",
|
||||
"Die Funktion <code>game_loop</code> liefert dieses Verhalten."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"def game_loop(f):\n",
|
||||
" from IPython.display import clear_output\n",
|
||||
" \n",
|
||||
" commands = {'w':'^', 'a':'<', 's':'v', 'd':'>', 'W':'^', 'A':'<', 'S':'v', 'D':'>' }\n",
|
||||
"\n",
|
||||
" while True:\n",
|
||||
" try:\n",
|
||||
" view = read_view(f)\n",
|
||||
" if not view:\n",
|
||||
" break\n",
|
||||
" clear_output(wait=True)\n",
|
||||
" print(view)\n",
|
||||
" cmd = input(\"[WASD]:\")\n",
|
||||
" cmd = commands[cmd]\n",
|
||||
" s.send(str.encode(cmd))\n",
|
||||
" except Exception as e:\n",
|
||||
" print(e)\n",
|
||||
" break"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Im Hauptprogramm muss schließlich eine Socket-Verbindung zum Server aufgebaut und\n",
|
||||
"die <code>game_loop</code> gestartet werden."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"import socket\n",
|
||||
"\n",
|
||||
"with socket.socket() as s:\n",
|
||||
" s.connect((host, port))\n",
|
||||
" with s.makefile() as f:\n",
|
||||
" game_loop(f)\n",
|
||||
"print(\"Client stopped.\")"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Viel Spass beim Trainieren!"
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"celltoolbar": "Raw Cell Format",
|
||||
"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.9.2"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 2
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user