Starten mit Minecraft Pi

Mit Minecraft Pi starten

Minecraft ist ein weltweit populäres „Bau“-Spiel. Eine kostenlose Version von Minecraft ist für den Raspberry Pi verfügbar; außerdem gibt es eine integrierte Programmierschnittstelle. Das bedeutet, Du kannst Anweisungen und Skripte schreiben, die dann automatisch im Spiel ausgeführt werden. Es ist ein großartiger Weg, Programmieren zu lernen!

Minecraft Pi banner

Minecraft starten

Um Minecraft Pi zu starten, öffne es vom Desktopmenu aus oder tippe minecraft-pi in den Terminal.

Wenn Minecraft Pi geladen ist, klicke auf Start Game, gefolgt von Create new. Du siehst, dass das Fenster etwas versetzt ist. Das bedeutet, wenn Du das Fenster verschieben willst, musst Du die Titelleiste im Hintergrund anklicken und ziehen.

Du bist jetzt im Spiel Minecraft! Gehe herum, haue Dinge klein und baue Sachen neu auf!

Benutze die Maus., um Dich um zu sehen und die folgenden Tasten auf der Tastatur:

Key Action
W Vorwärts
A Links
S Rückwärts
D Rechts
E Inventar
Space Springen
Double Space Fliegen/Fallen/Hochsteigen
Hochstelltaste Sinken (beim Fliegen)
Esc Pause / Spiel Menu
Tab Den Mauszeiger lösen

Du kannst ein Element mit dem Scrollrad der Maus aus der Schnellansicht auswählen (oder mit den Zahlen auf der Tastatur) oder Du drückst E und kannst mit der Maus (oder A,W,D,S und Enter) Deinen Wunschblock auswählen.

Du kannst doppelt auf die Leertaste drücken, um in der Luft zu fliegen. Lässt man die Leertaste los, bleibt man in der Luft stehen und wenn man die Taste erneut doppelt drückt, fällt man auf den Boden zurück.

Mit dem Schwert in deiner Hand kannst du auf Blöcke vor dir klicken, um sie zu entfernen (oder zu graben). Mit einem Block in deiner Hand kannst du mit der rechten Maustaste diesen Block vor dir platzieren oder mit einem Linksklick wieder entfernen.

Python Programmierschnittstelle benutzen

Wenn Minecraft läuft und die Welt erstellt ist, wenden wir unseren Fokus weg vom Spiel in dem wir die Tab Taste drücken, damit wird die Maus freigegeben. Öffne Python 3 aus dem Anwendungsmenü und verschiebe die Fenster so, dass sie Seite an Seite sind.

Du kannst entweder Befehle direkt in das Python-Fenster eingeben oder eine Datei erstellen, damit sie Ihren Code speichert, um es erneut ein anderes Mal ausführen zu können.

Wenn Du eine neue Datei erstellen willst gehe zu File > New window und File > Save as. Man kann die Datei dann im Home-Verzeichnis oder einem Projektordner speichern, wie man möchte.

Als Erstes müssen wir die Minecraft-Bibliothek importieren (d.h. wir holen uns vom System schon fertige Befehle, die wir anschließend nutzen können – das wird sehr oft in der Programmierung gemacht, um sich Arbeit zu sparen ;-)), in der zweiten Zeile verbinden wir uns mit dem Spiel und in der Dritten geben wir „Hallo Welt“ aus:

from mcpi.minecraft import Minecraft

mc = Minecraft.create()

mc.postToChat("Hallo Welt")

Wenn Du einen Befehl direkt in das Python-Fenster eingibst, drücke einfach nach jeder Zeile die Enter Taste. Wenn Du eine Datei erstellt hast, musst Du sie mit Ctrl + S speichern und mit F5 starten. Wenn Dein Code läuft, erhälst Du eine Nachricht im Spiel.

Finde Deinen Standort

Um Deinen Standort zu finden, gibt folgendes ein:

pos = mc.player.getPos()

pos enthält jetzt Deinen Standort; Zugriff auf die Koordinaten bekommst Du mit pos.x, pos.y and pos.z.

Alternativ gibt es die schöne Möglichkeit, die Koordinaten in einzelne Variablen zu speichern:

x, y, z = mc.player.getPos()

Jetzt enthalten x, y, und z die Koordinaten Deines Standortes. x und z sind die Laufrichtungen (vor/zurück und links/rechts) und y ist auf/ab.

Beachte, dass getPos() den Standort speichert, den Du gerade im Spiel hast. Wenn Du Dich bewegst, musst Du den Befehl erneut aufrufen oder eben den gespeicherten Ort verwenden.

Teleport

Neben der Anzeige des aktuellen Ortes, kann man sich von dort auch an einen gewünschten Ort teleportieren.

x, y, z = mc.player.getPos()
mc.player.setPos(x, y+100, z)

Dies wird Deinen Spielerheld 100 Blöcke in die Luft transportieren. Das bedeutet, dass Du in die Mitte des Himmel teleportiert wirst und anschließend auf Deinen Startpunkt zurückfällst.

Versuche Dich wo anders hin zu teleportieren!

Block setzen

Du kannst einen einzelnen Block an den angegebenen Koordinaten setzen mc.setBlock():

x, y, z = mc.player.getPos()
mc.setBlock(x+1, y, z, 1)

Jetzt ist ein Block neben oder hinter Dir entstanden.  Gehe zurück zum Minecraft Fenster und drehe Dich, bis Du den Block siehst..

Die Werte (Argumente) die an  set block mitgegeben werden sind:  x, y, z und id. Die (x, y, z) beziehen sich auf die Position in der Welt (wir setzen den Block x+1 von uns entfernt) und die id bezieht sich auf die Art von Block, die wir setzen wollen. 1 ist Stein.

Andere Blöcke, die Du ausprobieren kannst sind:

Luft:   0

Grass: 2

erde:  3

Jetzt, wenn Du den Block siehst, versuchen wir es mit etwas anderem:

mc.setBlock(x+1, y, z, 2)

Du solltest jetzt sehen wie der Steinblock sich ändert

Block Konstanten

Du kannst auch die programmeigenen Konstanten verwenden, wenn Du ihre Namen kennst. Du brauchst eine neue import Zeile am Anfang.

from mcpi import block

Jetzt kannst Du folgendes schreiben, um einen neuen Block zu erhalten:

mc.setBlock(x+3, y, z, block.STONE.id)

Die Block Id-Namen sind relative einfach zu erraten, wie man an den Beispielen sieht:

WOOD_PLANKS
WATER_STATIONARY
GOLD_ORE
GOLD_BLOCK
DIAMOND_BLOCK
NETHER_REACTOR_CORE

Block als Variable

Wenn Du die Id eines Blocks kennst, kann es sehr hilfreich sein, diese in einer Variablen zu speichern.

dirt = 3
mc.setBlock(x, y, z, dirt)

or

dirt = block.DIRT.id
mc.setBlock(x, y, z, dirt)

Spezielle Blocks

Es gibt einige Blocks mit Extraeigenschaften, wie z.B. Wolle, bei der Du die Farbe bestimmen kannst. Um das zu benutzen, verwende den 5. Parameter in setBlock:

wool = 35
mc.setBlock(x, y, z, wool, 1)

Hier setzt der 5. Parameter 1 die Farbe der Wolle auf orange. Ohne den Parameter wird immer der default (0) benutzt und der ist in diesem Fall weiß. Andere Farben sind:

2: Magenta
3: Light Blue
4: Yellow

Versuche es mit weiteren Zahlen!

Andere Blocks mit Extraeigenschaften sind Holz (17): Eiche, Fichte, Birke, etc; Langes Grass (31): Eiche, Fichte, Birke, etc; Langes Grass (50): Ausgerichtet nach Norden, Süden, Westen oder Osten; und vieles mehr. Schau in die API reference für alle Details.

Mehrere Blöcke setzen

Genauso wie man mit setBlock einen Block setzen kann, kann man mit setBlocks ganze Blockgruppen setzen::

stone = 1
x, y, z = mc.player.getPos()
mc.setBlocks(x+1, y+1, z+1, x+11, y+11, z+11, stone)

Dies baut einen 10 x 10 x 10 Würfel aus solidem Stein.

Du kannst größere Volumina mit der setBlocks Funktion erstellen, aber dies kann längere Zeit der Generierung in Anspruch nehmen!

Beim Laufen „Klötze verlieren“

Du weißt jetzt, wie man Blöcke erstellt, lass uns nun Blöcke bauen in dem Du durch die Welt gehst:

Der folgende Code wird immer dann eine Blume bauen, wenn Du Dich bewegst:

from mcpi.minecraft import Minecraft
from time import sleep

mc = Minecraft.create()

flower = 38

while True:
    x, y, z = mc.player.getPos()
    mc.setBlock(x, y, z, flower)
    sleep(0.1)

Jetzt gehe vorwärts und drehe Dich um, Du siehst Blumen auf dem Weg, den Du gegangen bist.

Da wir eine Endlosschleife mit while True benutzen, geht dies ewig so weiter. Um es zu stoppen, drücke gleichzeitig Ctrl + C im Python Fenster.

Flieg in die Luft und siehe, wie die Blumen in den Himmel wachsen:

Was ist, wenn wir nur dann Blumen haben wollen, wenn wir auf dem Boden gehen? Wir benutzen getBlock um herauszufinden auf welcher Art Block wir stehen:

x, y, z = mc.player.getPos()  # Spieler position (x, y, z)
this_block = mc.getBlock(x, y, z)  # Block ID
print(this_block)

This tells you the location of the block you’re standing in (this will be 0 – an air block). We want to know what type of block we’re standing on. For this we subtract 1 from the y value and use getBlock() to determine what type of block we’re standing on:

x, y, z = mc.player.getPos()  # player position (x, y, z)
block_beneath = mc.getBlock(x, y-1, z)  # block ID
print(block_beneath)

This tells us the ID of the block the player is standing on.

Test this out by running a loop to print the block ID of whatever you’re currently standing on:

while True:
    x, y, z = mc.player.getPos()
    block_beneath = mc.getBlock(x, y-1, z)
    print(block_beneath)

We can use an if statement to choose whether or not we plant a flower:

grass = 2
flower = 38

while True:
    x, y, z = mc.player.getPos()  # player position (x, y, z)
    block_beneath = mc.getBlock(x, y-1, z)  # block ID

    if block_beneath == grass:
        mc.setBlock(x, y, z, flower)
    sleep(0.1)

Perhaps next we could turn the tile we’re standing on into grass if it isn’t grass already:

if block_beneath == grass:
    mc.setBlock(x, y, z, flower)
else:
    mc.setBlock(x, y-1, z, grass)

Now we can walk forward and if we walk on grass, we’ll leave a flower behind. If the next block is not grass, it turns into grass. When we turn around and walk back, we now leave a flower behind us.

Playing with TNT blocks

Another interesting block is TNT! To place a normal TNT block use:

tnt = 46
mc.setBlock(x, y, z, tnt)

However, this TNT block is fairly boring. Try applying data as 1:

tnt = 46
mc.setBlock(x, y, z, tnt, 1)

Now use your sword and left click the TNT block: it will be activated and will explode in a matter of seconds!

Now try making a big cube of TNT blocks!

tnt = 46
mc.setBlocks(x+1, y+1, z+1, x+11, y+11, z+11, tnt, 1)

Now you’ll see a big cube full of TNT blocks. Go and activate one of the blocks and then run away to watch the show! It’ll be really slow to render the graphics as so many things are changing at once.

Fun with flowing lava.

One block that’s a lot of fun to play with is flowing lava.

from mcpi.minecraft import Minecraft

mc = Minecraft.create()

x, y, z = mc.player.getPos()

lava = 10

mc.setBlock(x+3, y+3, z, lava)

Find the block you’ve just placed, and you should see lava flowing from the block to the ground.

The cool thing about lava is that when it cools down it becomes rock. Move to another location in your world and try this:

from mcpi.minecraft import Minecraft
from time import sleep

mc = Minecraft.create()

x, y, z = mc.player.getPos()

lava = 10
water = 8
air = 0

mc.setBlock(x+3, y+3, z, lava)
sleep(20)
mc.setBlock(x+3,y+5, z, water)
sleep(4)
mc.setBlock(x+3, y+5, z, air)

You can adjust the sleep parameters to allow more or less lava to flow.

lava

Creative Commons Lizenzvertrag