archiv:testseite

Dies ist eine alte Version des Dokuments!


1. Python-Game Projekt

Ihr sollt alleine oder in einer 2er-Gruppe ein kleines Pythonprojekt realisieren. Dabei solltet ihr die Game-Bibliothek Arcade verwenden (wenn ihr unbedingt eine andere Library verwenden wollt, bitte mit mir absprechen).

Konkret ist also der Auftrag

  1. Bildet Gruppen von 2 bis 3 Personen.
  2. Erstellt einen Projektplan: d.h. sammelt Ideen, die ihr verwirklichen könntet. Erstellt eine Kurze Projektbeschreibung auf euerer Wiki-Seite.
  3. Erstellt eine Minecraft-Welt, die durch Python-Programme mitgesteuert ist:
    1. Objekte werden durch Programme automatisiert erstellt.
    2. In eurer Welt sind durch die Programme interaktive Dinge möglich
  4. Dokumentiert euer Projekt auf einer Wiki-Seite auf mathematix.ch
  5. 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.

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))

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).

Bewertung

  • archiv/testseite.1670934005.txt.gz
  • Zuletzt geändert: 2022/12/13 13:20
  • von lehmannr