====== 1. Minecraft Projekt ======
===== 1.1 Projektdefinition =====
Ihr sollt in 2er- oder 3er-Gruppen ein kleines Minecraft Projekt erstellen. Es handelt sich dabei um ein Coding-Projekt, d.h. es geht nicht so sehr darum, von Hand eine möglichst tolle Welt zu erschaffen. Ihr sollt eher Python-Programme erstellen, welche in Minecraft einen coolen Effekt erzielen. Dabei kann man zwei verschiedene Dinge anstreben. Entweder man verwendet Python, um Objekte automatisiert zu bauen, oder man verwendet Python, um Interaktivität in die Welt zu bringen (siehe unten).
Konkret ist also euer Auftrag:
- Bildet Gruppen von 2 bis 3 Personen.
- Erstellt einen Projektplan: d.h. sammelt Ideen, die ihr verwirklichen könntet. Erstellt eine Kurze Projektbeschreibung auf euerer Wiki-Seite.
- Erstellt eine Minecraft-Welt, die durch Python-Programme mitgesteuert ist:
- Objekte werden durch Programme automatisiert erstellt.
- In eurer Welt sind durch die Programme interaktive Dinge möglich
- Dokumentiert euer Projekt auf einer Wiki-Seite auf mathematix.ch
- Präsentiert am Schluss euer Projekt kurz der Klasse
Es ist wichtig, dass ihr jeweils die Programme extern speichert (z.B. in eine Textdatei oder direkt in das wiki reinkopieren). Auch die Welt würde ich jeweils exportieren, damit ihr nicht plötzlich eure Arbeit verliert.
===== 1.2 Objekte mit Python bauen =====
Auf der Wikiseite zum Agenten haben wir gesehen, dass man den Agenten verwenden kann, um Objekte zu bauen. dies ist jedoch recht kompliziert, da der Agent die Blocks nicht an seiner eigenen Position hinlegt, sondern vor oder hinter oder neben sich stellt. Dies macht die Programmierung nicht sehr einfach.
Will man Blöcke automatisch erstellen lassen, kann man dies auch direkt machen, d.h. ohne den Agenten. Dazu verwendet man hauptsächlich die Befehle: '' blocks.place'' und ''blocks.fill''. Damit kann man einen Block an einer bestimmten Position setzen, oder einen ganzen Quader von Blöcken auf einmal erstellen.
Eine Linie von Blocks erstellen, wobei jeder zweite Block aus Gold bzw. aus Blauer Wolle besteht:
(das %-Zeichen ist die Modulo-Rechnung vgl. Stunde)
for i in range(3,20,1):
if (i%2)==0:
blocks.place(GOLD_BLOCK, pos(i, 0, 0))
else:
blocks.place(BLUE_WOOL, pos(i,0,0))
Einen Grossen Goldblock erstellen und mit Luft aushöhlen:
blocks.fill(GOLD_BLOCK, pos(1, 1, 1), pos(10, 10, 10))
blocks.fill(AIR, pos(2,2,2), pos(9, 9, 9))
===== 1.3 Interaktionen programmieren =====
Man kann auch Python-Funktionen ausführen, wenn bestimmte Bedingungen erfüllt sind. Dazu verwendet man sogenannte "Listeners", Diese funktionieren genau wie bei Tigerjython:
Wenn der Spieler "baue_Goldhaus" in den Chat tippt, soll der ausgehöhlte Goldblock erstellt werden:
def on_chat():
blocks.fill(GOLD_BLOCK, pos(1, 1, 1), pos(10, 10, 10))
blocks.fill(AIR, pos(2,2,2), pos(9, 9, 9))
player.on_chat("baue_Goldhaus", on_chat)
Es gibt verschiedene von diesen Listenern. Alle beginnen mit ** player.on, ** oder mit ** blocks.on **.
(player.on_chat, player.on_item_interacted, blocks.on_block_broken, blocks,on_blocks_placed,)
Was ich noch selber rausfinden muss: wie ruft man am Besten eine Python-Funktion auf aus Minecraf (so dass man z.B. einen Schalter bewegen kann und die Funktion wird ausgeführt). Aktuell funktioniert für mich nur der Trick, dass ich einen Block erstelle und wenn man ihn zerstört wird die Funktion aufgerufen, die den Block gleich wieder hinzufügt. Dies ist dann ein "Pseudo-Schalter". Es wäre aber eleganter, wenn man z.B. Command_Blocks verwenden könnte (das scheint aber nicht zu gehen).
[[archiv:ef:ef2020_2022:minecraft:projekt:bewertung|Bewertung]]
==== Gruppen ====
* [[archiv:ef:ef2020_2022:minecraft:projekt:maximandrin:start| Maxim, Andrin]]
* [[archiv:ef:ef2020_2022:minecraft:projekt:rafaellaurent:start|Rafael, Laurent ]]
* [[archiv:ef:ef2020_2022:minecraft:projekt:leajasminsimon:start| Léa, Jasmin, Simon]]
* [[archiv:ef:ef2020_2022:minecraft:projekt:smantharebekkajehan:start|Jehan, Rebekka, Samantha ]]
* [[archiv:ef:ef2020_2022:minecraft:projekt:tiborleandrodandanil:start| Tibor, Leandro, Danil ]]