Dies ist eine alte Version des Dokuments!
Der Agent
Um das Programmieren mit Python in Minecraft Education einfacher zu erlernen, steht jedem Lernenden neben der Spielfigur, welche die Position des Spielers samt Inventar und Handlung im Spiel darstellt, auch ein sogenannter Agent zur Verfügung. Der Agent selbst kann durch Programmieren gesteuert werden. Dafür gibt es verschiedene Befehle. Jeder Spieler hat nur einen Agenten und das Gute ist, Agenten können nicht verschwinden («sterben»)!
Wir können den Agenten mit Hilfe von Befehlen/Programmen steuern und so dafür sorgen, dass er Arbeiten für uns erledigt. Er kann beispielsweise Dinge für uns bauen, oder Gegenstände einsammeln etc.
Sobald man mit der Taste C den Code-Editor zum Programmieren öffnet, erscheint in der Minecraft-Welt der Agent. Es handelt sich um einen kleinen Roboter bzw. um eine kleine Spielfigur, die man mit den Agent-Befehlen steuern kann. Der Agent ist genau ein Block hoch. Einige der Befehle für den Agenten sind samt Kommentar und einem Beispiel unten aufgelistet.
Damit der Agent bauen kann, muss sein Inventar befüllt werden. Dieses Inventar des Agenten ist separat vom Spieler und kann per Rechtsklick auf den Agenten eingesehen und verändert werden. Man kann es auch durch Programmierung und den Befehl agent.set_item verändern (siehe weiter unten).
Aufgaben
Allgemeiner Auftrag:
Probiert in mindestens drei verschiedenen Beispielen die unten aufgelisteten Befehle aus und lasst den Agenten bewegen und bauen. Dazu könnt ihr Euch auch in Zweiergruppen gegenseitig kleine Aufgaben stellen, die der Agent ausführen soll. Tipp: Beginnt mit einer sehr einfachen Aufgabe und stellt Euch dann langsam den grösseren Herausforderungen.
Aufgabe 1
Betrachte das untenstehende Programm und überlege dir, was es macht. Kopiere es in Minecraft und teste es ('c' drücken und dann in „Python“ einfügen).
# Grundeinstellungen agent.set_assist(PLACE_ON_MOVE, True) agent.set_item(GOLD_BLOCK, 64, 1) agent.set_slot(1) # Programm agent.move(FORWARD,5) agent.turn_left() agent.move(FORWARD,5) agent.turn_left() agent.move(FORWARD,5) agent.turn_left() agent.move(FORWARD,5)
Aufgabe 2
Ich möchte, dass der Agent ein Quadrat der Seitenlänge 5 baut, doch irgendetwas funktioniert nicht?
Versuche das Programm so zu ändern, dass er wirklich ein Quadrat der Seitenlänge 5 baut.
Aufgabe 3
Füge deinem Programm eine Variable mit dem Namen Seitenlaenge hinzu, sodass du über diese Variable steuern kannst, wie gross dein Quadrat wird.
Aufgabe 4
Erkläre, was der Agent baut, wenn das untenstehende Programm ausgeführt wird. Erstelle eine Skizze.
agent.set_assist(PLACE_ON_MOVE, True)
agent.set_item(GOLD_BLOCK, 64, 1)
agent.set_item(GRASS, 64, 2)
agent.set_item(DIAMOND_BLOCK, 64, 3)
distances = [4,6,2]
for i in range(1,4):
agent.set_slot(i)
agent.place(LEFT)
agent.move(FORWARD, distances[i-1])
Welche Erkenntnisse sollen gewonnen werden?
- Wie kann ich den Agenten durch ein Pyhtonprogramm bewegen?
- Wie kann ich den Agenten etwas bauen lassen und was ist dabei zu beachten?
- Was muss beim Programmieren des Agenten in bezug auf folgende Aspekte beachtet werden:
- Was muss beim Verwenden von Kooridnaten beachtet werden?
- Was muss beim Befüllen des Inventars des Agenten beachtet werden?
- Welche Voreinstellungen in den ersten Codezeilen sind nützlich?
- Welche Programmierfehler sind passiert, und warum sind diese passiert!
</WRAP>
Einige Agentenbefehle im Überblick
In der folgenden Liste findest du schon viele Agenten-Befehle, jedoch kann auch über den Code-Builder über das Menu links auch direkt per drag and drop Codezeilen eingefügt und dann angepasst werden. Diese Befehle werden im Codebuilder (Editor) eingebeben und werden vom Agenten nach dem der In der folgenden Liste findest du schon viele Agenten-Befehle, jedoch kann auch über den Code-Builder über das Menu links auch direkt per drag and drop Codezeilen eingefügt und dann angepasst werden. Diese Befehle werden im Codebuilder (Editor) eingebeben und werden vom Agenten nach dem der „PlayPlay“-Button geklickt wurde, ausgeführt. Wichtig ist, dass der Codebuilder in einer neu erschaffenen Welt gestartet werden muss, um überhaupt einen Agenten entstehen zu lassen!-Button geklickt wurde, ausgeführt. Wichtig ist, dass der Codebuilder in einer neu erschaffenen Welt gestartet werden muss, um überhaupt einen Agenten entstehen zu lassen!
Den Agenten bewegen
Um den Agenten zu bewegen, gibt es einige einfache Befehle, die sehr nützlich sind.
| Befehl | Beispiel | Kurzerklärung |
|---|---|---|
agent.move(Richtung, Anz.Felder) | agent.move(BACK,3) | Agent bewegt sich um die Anzahl Felder in die gewünschte Richtung (FORWARD, BACK, LEFT, RIGHT, UP, DOWN) |
agent.turn(Richtung) | agent.turn(LEFT) | Agent dreht sich um 90 Grad in die gewünschte Richtung (LEFT, RIGHT) |
| Den Agenten teleportieren | ||
agent.teleport(Position, Himmelsrichtung) | agent.teleport(pos(10,5,2),WEST) | pos teleportiert bezüglich der Position des Agenten |
agent.teleport(world(3,10,5), NORD) | world | teleportiert absolut bezüglich der Weltkoordinaten |
agent.teleport_to_player() | Der Agent wird an die Position des Spielers teleportiert, d.h. der Agent wird, egal wo er ist, zum Spieler versetzt, ohne dabei den Raum zu durchqueren. | |
Bemerkung: Wenn von einer Richtung die Rede ist, kann meist zwischen FORWARD, BACK, LEFT, RIGHT, UP, DOWN gewählt werden. Im Zusammenhang mit Himmelsrichtung dann EAST, WEST, NORTH, SOUTH.Bemerkung: Wenn von einer Richtung die Rede ist, kann meist zwischen FORWARD, BACK, LEFT, RIGHT, UP, DOWN gewählt werden. Im Zusammenhang mit Himmelsrichtung dann EAST, WEST, NORTH, SOUTH.
Das Inventar des Agenten
Wie bereits genannt, kann das Inventar des Agenten manuell über den Rechtsklick und das Inventar des Spielers aufgefüllt werden. Es kann aber auch über die Funktion agent.set_item ein auffüllen vom Inventar vorgenommen werden. Erinnerung: Der Agent kann nur bauen, wenn das Inventar nicht leer ist! ein auffüllen vom Inventar vorgenommen werden. Erinnerung: Der Agent kann nur bauen, wenn das Inventar nicht leer ist!
| Befehl | Beispiel | Kurzerklärung |
|---|---|---|
agent.set_item(Material, Anzahl, Slot) | agent.set_item(GRASS, 6, 1) | 6 Grasblöcke in den ersten Slot des Inventars legen. |
agent.drop_all(Richtung) | agent.drop_all(FORWARD) | Das ganze Agenten-Inventar kann auch wieder geleert werden, um so eventuell neu befüllt zu werden. Dies geschieht über die Funktion agent.drop_all(Richtung). Die Blöcke werden dann in der angegebenen Richtung neben dem Agenten sichtbar schweben und verschwinden nach einiger Zeit, falls diese nicht eingesammelt werden. Im Beispiel wird hier das Inventar so geleert, dass die gesamten Materialien vor dem Agenten liegen. |
agent.transfer(Von Slot, zu Slot, Anzahl) | agent.transfer(5, 1, 2) | Das Agenten-Inventar kann auch umgeordnet werden, indem Materialien von einem Slot in einen anderen gelegt werden. |
Der Agent baut und arbeitet für uns
Neben dem Bewegen kann der Agent auch für uns bauen. Auch hier gibt es einige praktische Grundbefehle.Neben dem Bewegen kann der Agent auch für uns bauen. Auch hier gibt es einige praktische Grundbefehle.
| Befehl | Beispiel | Kurzerklärung |
|---|---|---|
agent.place(Richtung) | agent.place(FORWARD) | Der Agent plaziert vor sich einen Block. Er nimmt das Material immer aus dem aktiven Slot. Falls dies nicht der gewünschte Slot ist, kann durch agent.set_slot(Slotnummer) dieser gewechselt werden. |
agent.set_slot(Slotnummer) | agent.set_slot(2) | Der aktive Slot wird gewählt, aus dem dann das Material genommen wird. |
agent.set_assist(assist, on-off) | agent.set_assist(PLACE_ON_MOVE,True) | Setzt man PLACE_ON_MOVE auf wahr (True), dann baut der Agent während er sich bewegt. |
agent.set_assist(assist, on-off) | agent.set_assist(DESTROY_OBSTACLES,True) | Setzt man DESTROY_OBSTACLES auf wahr (True), dann zerstört er die Hindernissse, während er baut. |
Der Parameter assist kann folgende Werte annehmen:Der Parameter assist kann folgende Werte annehmen:
PLACE_ON_MOVEwas bedeutet, dass der Agent mit jeder Bewegung baut.PLACE_FROM_ANY_SLOTheisst, wenn der aktive Inventarslot kein Material beinhaltet, wird das gesamte Inventar durchsucht und so zu einem gefüllten Slot wechseln und weiterfahren.DESTROY_OBSTACLESwird gebraucht, um zu vermeiden, dass der Agent durch Hindernisse blockiert wird. Der Agent kann durch Blöcke, Tiere oder anderes blockiert sein und nicht vorwärts kommen. Durch diese Funktion und diesen Parameter kann ddas Hindernis aus dem Weg geräumt, sprich zerstört werden.
Der Parameter on-off kann folgede Werte annehmen:Der Parameter on-off kann folgede Werte annehmen:
True, dadurch ist die Funktino agent.set_assist aktiviert.False, durch diesen Parameterwert wird die Funktion deaktiviert.
Der Agent wird mit diesem Befehl bei jeder Bewegung bauen. Im gegebenen Beispiel oben baut der Agent bei jeder Bewegung einen Block aus den aktiven Slot.Der Agent wird mit diesem Befehl bei jeder Bewegung bauen. Im gegebenen Beispiel oben baut der Agent bei jeder Bewegung einen Block aus den aktiven Slot.
Ein Beispiel wäre das Folgende. Hier wird der Agent zuerst einen GRASS-Block in sein Inventar in Slot 1 nehmen, sich danach um 4 Felder vorwärts bewegen, anschliessend einen Block vor sich hin setzen, nach links drehen und von sich aus gesehen 5 Felder rückwärts bewegen.Ein Beispiel wäre das Folgende. Hier wird der Agent zuerst einen GRASS-Block in sein Inventar in Slot 1 nehmen, sich danach um 4 Felder vorwärts bewegen, anschliessend einen Block vor sich hin setzen, nach links drehen und von sich aus gesehen 5 Felder rückwärts bewegen.
agent.set_item(GRASS, 5, 1) agent.move(FORWARD,4) agent.place(FORWARD) agent.turn_left() agent.move(BACK,5)
Durch ein Rechtsklick auf den Agenten ist klar, dass es noch 4 GRASS-Blöcke in Slot 1 hat. Einer wurde ja begraucht.Durch ein Rechtsklick auf den Agenten ist klar, dass es noch 4 GRASS-Blöcke in Slot 1 hat. Einer wurde ja begraucht.