archiv:gf:gf2020_2021:minecraft:projekt:2d1:juliabenedikt:code

Das steckt dahinter

Unser Code lässt sich grob in drei Teile unterteilen:

  • Der erste Teil bereitet das Spiel vor
  • Der zweite Teil wird während dem Spiel ausgeführt
  • Der dritte Teil beendet das Spiel und setzt die Spieler zurück

#Vorbereitung
h=75
player.say("Arena wird kopiert...")
blocks.clone(world(-27, 8, 25), world(3, 8+h,55), world(-74, 3, 25), CloneMask.REPLACE, CloneMode.NORMAL)
player.say("Arena kopiert.")
mobs.teleport_to_position(mobs.target(ALL_PLAYERS), world(-66, 5, 50))
gameplay.set_game_mode(ADVENTURE, mobs.target(ALL_PLAYERS))
gameplay.set_game_mode(CREATIVE, mobs.target(NEAREST_PLAYER))
player.teleport(world(-42,5,40))
player.say("Alle Spieler auf Positionen teleportiert.")
#Gameplay beginnt
gameplay.title(mobs.target(ALL_PLAYERS), "Die Lava wird in 60 Sekunden steigen","")
mobs.give(mobs.target(ALL_PLAYERS), COOKED_BEEF, 64)
loops.pause(53000)
for i in range(0,h-5,1):
    player.say("Die Lava wird in 7 Sekunden steigen.")
    player.say("Auf Höhe:")
    player.say(i)
    loops.pause(7000)  
    blocks.replace(LAVA, WATER, world(-44, 4+i, 25), world(-74, 4+i, 55))
    blocks.replace(LAVA, AIR, world(-44, 4+i, 25), world(-74, 4+i, 55))
    blocks.replace(LAVA, TALLGRASS, world(-44, 4+i, 25), world(-74, 4+i, 55))
#Nach Spielende
gameplay.title(mobs.target(ALL_PLAYERS), "Das Spiel ist zu Ende.","")
loops.pause(5000)
player.say("Die Spieler werden nun zurückgesetzt")
gameplay.set_game_mode(ADVENTURE, mobs.target(ALL_PLAYERS))
mobs.kill(mobs.target(ALL_PLAYERS))


Genauere Analyse

h=75
player.say("Arena wird kopiert...")
blocks.clone(world(-27, 8, 25), world(3, 8+h,55), world(-74, 3, 25), CloneMask.REPLACE, CloneMode.NORMAL)
player.say("Arena kopiert.")

In diesem Teil des Codes wird die Arena zurückgesetzt. Um leichter arbeiten zu können, ist die Höhe der Arena h im Code einstellbar.


mobs.teleport_to_position(mobs.target(ALL_PLAYERS), world(-66, 5, 50))
gameplay.set_game_mode(ADVENTURE, mobs.target(ALL_PLAYERS))
gameplay.set_game_mode(CREATIVE, mobs.target(NEAREST_PLAYER))
player.teleport(world(-42,5,40))
player.say("Alle Spieler auf Positionen teleportiert.")

Hier werden alle Spieler in die Arena teleportiert und in den „Abenteuermodus“ gesetzt, in welchem man sterblich wird und keine Blöcke mehr zerstören kann. Danach wird der Administrator wieder aus der Arena hinaus teleportiert. Der Spieler, welcher den Code ausführt, ist logischerweise immer am nächsten zu sich selbst, darum kann man dies verwenden.


gameplay.title(mobs.target(ALL_PLAYERS), "Die Lava wird in 60 Sekunden steigen","")
mobs.give(mobs.target(ALL_PLAYERS), COOKED_BEEF, 64)
loops.pause(53000)
for i in range(0,h-5,1):
    player.say("Die Lava wird in 7 Sekunden steigen.")
    player.say("Auf Höhe:")
    player.say(i)
    loops.pause(7000)  
    blocks.replace(LAVA, WATER, world(-44, 4+i, 25), world(-74, 4+i, 55))
    blocks.replace(LAVA, AIR, world(-44, 4+i, 25), world(-74, 4+i, 55))
    blocks.replace(LAVA, TALLGRASS, world(-44, 4+i, 25), world(-74, 4+i, 55))

In diesem Teil des Codes beginnt das Gameplay. Der Code gibt den Spielern 60 Sekunden Zeit, sich zu orientieren. Gleichzeitig erhalten sie Essen, da Hunger nicht ausgeschaltet ist. Dann beginnt die Lava zu steigen. Sie steigt alle sieben Sekunden, bis sie 5 Blöcke unter der Höhe der Arena zur Ruhe kommt. Dort befindet sich auch die Siegerebene. Die Spieler werden jedes mal informiert, wenn die Lava steigt.


#Nach Spielende
gameplay.title(mobs.target(ALL_PLAYERS), "Das Spiel ist zu Ende.","")
loops.pause(5000)
player.say("Die Spieler werden nun zurückgesetzt")
gameplay.set_game_mode(ADVENTURE, mobs.target(ALL_PLAYERS))
mobs.kill(mobs.target(ALL_PLAYERS))

Im letzten Teil des Spiels werden alle Spieler zurückgesetzt. Leider haben wir keinen anderen Weg gefunden, dies zu tun, als die Spieler zu töten. Der Befehl /clear (Spieler) existiert im Python des Spiels leider nicht.


Command-Blöcke bieten uns die Möglichkeit, als Folge von Aktionen wie z.B. einem Knopfdruck bestimmte Befehle ausführen zu können, ohne hierfür eine Gameloop benutzen zu müssen. Im Folgenden befindet sich eine Auflistung aller benutzten Blöcke.


Die offensichtlichste Verwendung ist die, auf Knopfdruck Blöcke verschwinden zu lassen. Hierfür gibt es den Command /fill, welcher mit dem Python-Befehl blocks.place gleichzusetzen ist. Insgesamt gibt es zwei Stellen in unserem Spiel, wo solche Blöcke verwendet werden.


Auch hier werden Commandblöcke benutzt, um nach jedem Knopfdruck die Werfer zu kopieren. Somit werden sie nach jedem Schuss zurückgesetzt, und es gibt unendliches Feuerwerk!


Eine weitere Verwendung ist, über den gesamten Verlauf des Spiels eine Aktion auszuführen, unabhängig vom Code. Dieser Block kopiert die ganze Zeit die Kiste von unten nach oben (/clone –> blocks.clone), wodurch eine unendliche Quelle entsteht.


Die letzte Verwendung ist die, Funktionen zu ersetzen, welche es im Code noch nicht gibt. Beispielsweise ein Befehl, den Spielern für eine festlegbare Zeit den Effekt „Nachtsicht“ zu geben, existiert in Python nicht. Wir benutzen also Commandblöcke, um dies zu umgehen.

  • archiv/gf/gf2020_2021/minecraft/projekt/2d1/juliabenedikt/code.txt
  • Zuletzt geändert: 2022/08/27 18:08
  • von lehmannr