gf2:projekte:minecraft:2d1gruppe1

Dies ist eine alte Version des Dokuments!


X=0
Y=0
Z=150
zaehler=1
Teil2= False
Teil3= True
Hind1= True
Hind2=False
Hind3=False
Hind4=False
Hind5=False 
Hind6=False
zaehler2=1
 
def spielbediungen():
    gameplay.time_set(0)
    gameplay.set_difficulty(NORMAL)
    gameplay.set_game_mode(SURVIVAL, mobs.target(ALL_PLAYERS))
    mobs.clear_effect(mobs.target(ALL_PLAYERS))
    gameplay.set_game_rule(KEEP_INVENTORY, False)
    player.execute("immutableworld")
def raum1():
    player.execute("setworldspawn 0 150 0")
    player.execute("spawnpoint @s 0 150 0")
    blocks.fill(BLACKSTONE, world(X-1,Z-1,Y-5), world(X+8,Z+11,Y+6))
    blocks.fill(AIR, world(X, Z, Y-4), world(X+7, Z+10, Y+5))
    blocks.fill(GLOWSTONE, world(X, Z-1, Y-1), world(X+7, Z-1, Y+1))
    blocks.fill(AIR, world(X+8, Z, Y-1), world(X+8, Z+2, Y+1))
    blocks.fill(MONSTER_SPAWNER, world(X+8, Z, Y-1), world(X+9, Z+2, Y+1))
    blocks.fill(GLOWSTONE, world(X, Z-1, Y-1), world(X+7, Z-1, Y+1))
    raetselblock()
 
def raetselblock():# Blöcke fürs Rechnen(die Hinweis für den Zahlencode)
    blocks.fill(RESPAWN_ANCHOR, world(X, Z, Y-4), world(X+7, Z, Y-4),)
    blocks.fill(RESPAWN_ANCHOR, world(X, Z, Y+5), world(X+7, Z, Y+5),)
    blocks.fill(AIR, world(X+5, Z, Y-4), world(X+6, Z, Y-4),)
    blocks.place(AIR, world(X, Z, Y+5))
    blocks.place(AIR, world(X+4, Z, Y+5))
 
def dialog1(): # Text an Spieler einige Zeilen angenehmer zum Lesen
    player.say("Sei Gegrüsst Fremde*r")
    player.say("Der Weg zu den Schatzkammern der Magier ist dir verwehrt!")
    player.say("Zeige dich als Alchemist und gib nur die 3 Zahlen der Anordnung von Gold.")
    player.say("Für wackere Abenteurer*in gibt es 3 Tipps. Um sie zu erhalten schreibe «Tipp».")
 
def TippR1():# Für Tipps Durchgänge mit If+ Zähler
    global zaehler
    zaehler=zaehler+1
    if (zaehler==2):
        player.say("Tipp 1: In der Anordnung der Blöcke sind die Zahlen der Protonen, Elektronen, Neutronen versteckt")
 
    if (zaehler==3):
        player.say("Tipp 2: Die Protonen sind gleichviele wie die Elektronen.")
 
    if (zaehler==4):
        player.say("Tipp 3: Die Blöcke sind in zweimal in Modulo angeordnet von Süd nach Nord.")
 
    if (zaehler==5):
        player.say("Schau mit deinem 3 Auge nach Süden") # Hilf an der Wandtafel hinten
 
    if (zaehler>5):
        player.say("Du hast leider schon alle Tipps aufgebraucht.")
 
def rantwort():
    blocks.fill(AIR, world (X+8, Z, Y-1), world(X+9, Z+2, Y+1))
    player.say("Tritt ein, doch sei gewarnt, denn nun eine Umkehr ist unmöglich. Eile nicht sonst bleibt dir der Weg verwehrt")
 
 
def on_travelled_walk():
    x = player.position().get_value(Axis.X)
    z = player.position().get_value(Axis.Y)
    y = player.position().get_value(Axis.Z)
 
    if (x==X+8) and (y==Y) and (z==z>Z+-2) and (z==z<2+Z):# Raum1 zu Raum 2 Türe zu
        blocks.fill(ANVIL, world (X+8, Z, Y-1), world(X+8, Z+2, Y+1))
        player.execute("spawnpoint @s 10, 151 0")
        mobs.apply_effect(LEVITATION, mobs.target(NEAREST_PLAYER), 10, 1)
        global Teil2
        Teil2 = True
    if (x==X+10) and (z>Z-1):
        mobs.apply_effect(LEVITATION, mobs.target(NEAREST_PLAYER), 10, 1)
    if  (x==X+13) and (Z+14==z):
        player.execute("spawnpoint @s 18 163 0")
    if ((X+21==x) or (x==X+22)) and ((Y+5==y) or (Y+6==y)) and (z==Z+14):
        global Hind1
        Hind1=False
        global Hind2
        Hind2= True
        player.execute("spawnpoint @s 21 164 6")
    if (z==Z+10) and (X+23==x) or (X+24==x) and (y==Y+20) or (y==Y+21):
        global Hind2
        Hind2= False
        global Hind3
        Hind3= True
        player.execute("spawnpoint @s 23 160 21")
        if (zaehler2==1):
            global zaehler2
            zaehler2= zaehler2 +2
            mobs.give(mobs.target(NEAREST_PLAYER), ENDER_PEARL, 1)
            player.say("sehr gut gemacht weiter so")
    if ((X+15==x) or (X+14==x)) and (z==Z+16) and (y==Y+27) or (y==Y+28):
        global Hind3
        Hind3= False
        global Hind4
        Hind4= True
        player.execute("spawnpoint @s 14 167 27")
    if (X+13<x<X+16) and (Z+10) and (Y+37<y<Y+40):
        global Hind4
        Hind4= False
        global Hind5
        Hind5= True
        player.execute("spawnpoint @s 14 160 39")
    if (X+13<x<X+16) and (Z+10) and (Y+41<y<Y+44):
        global Hind5
        Hind5= False
        global Hind6
        Hind6= True
 
def raum2():
     blocks.fill(OBSIDIAN, world(X+9,Z-50,Y-2), world(X+13,Z+21,Y+2))# anderer Block???
     blocks.fill(AIR, world(X+10, Z-150, Y-1), world(X+12, Z+20, Y+1))
     blocks.fill(GLOWSTONE, world(X+10, Z-1, Y-1), world(X+12, Z-1, Y+1))
     blocks.fill(SEA_LANTERN, world(X+10, Z+13, Y-1), world(X+12, Z+13, Y+1))
     blocks.fill(SEA_LANTERN, world(X+10, Z+4, Y-1), world(X+11, Z+4, Y+0))
     blocks.fill(SEA_LANTERN, world(X+11, Z+9, Y), world(X+12, Z+9, Y+1))
     blocks.fill(GLOWSTONE, world(X+10, Z-50, Y-1), world(X+12, Z-50, Y+1))
     blocks.fill(SEA_LANTERN, world(X+10, Z+13, Y-1), world(X+12, Z+13, Y+1))
     blocks.fill(SEA_LANTERN, world(X+10, Z+18, Y-1), world(X+12, Z+18, Y))
     blocks.place(AIR, world(X+11, Z+13,Y))
     blocks.place(OBSIDIAN, world(10+X,Z-1,Y))
 
def blöckebewegen (M,x,z,y,x2,z2,y2,richx,richy,richz,länge,intervalldauer):# sie ist nich so schön fliessend jedoch meist besser geeignet
    running = True
    intervall=1
    gurke = gameplay.time_query(GAME_TIME)
    blocks.fill(M,world(x, z, y),world(x2, z2, y2)) # Block an erster Position bauen
    while gameplay.time_query(GAME_TIME) < gurke + länge: #zähler der ticks
        if gameplay.time_query(GAME_TIME) > gurke + intervall * intervalldauer: # immer weiter, wenn mindestens 10 Ticks vergangen sind...
                            blocks.fill(M,world(x + richx, z+richz, y+richy), world(x2 + richx, z2+richz, y2+richy)) # Block an neuer Position bauen
                            blocks.fill(AIR, world(x, z, y), world(x2, z2, y2)) # Block löschen
                            x = x + richx # Position anpassen
                            x2= x2+richx
                            y= y+richy
                            y2=y2+richy
                            z= z+richz
                            z2=z2+richz
                            intervall= intervall + 1
 
def blöckebewegen2 (M,x,z,y,x2,z2,y2,richx,richy,richz,länge,intervalldauer):# sie ist nich so schön fliessend jedoch meist besser geeignet
    running = True
    intervall=1
    gurke = gameplay.time_query(GAME_TIME)
    blocks.fill(M,world(x, z, y),world(x2, z2, y2)) # Block an erster Position bauen
    while gameplay.time_query(GAME_TIME) < gurke + länge: #zähler der ticks
        if gameplay.time_query(GAME_TIME) > gurke + intervall * intervalldauer: # immer weiter, wenn mindestens 10 Ticks vergangen sind...
                            blocks.fill(AIR, world(x, z, y), world(x2, z2, y2)) # Block löschen
                            blocks.fill(M,world(x + richx, z+richz, y+richy), world(x2 + richx, z2+richz, y2+richy)) # Block an neuer Position bauen
                            x = x + richx # Position anpassen
                            x2= x2+richx
                            y= y+richy
                            y2=y2+richy
                            z= z+richz
                            z2=z2+richz
                            intervall= intervall + 1
 
def blöckebewegen3 (M,x,z,y,x2,z2,y2,richx,richy,richz,länge,intervalldauer):# das der hintere Block nicht verschwindet (wachsende Form)
    running = True
    intervall=1
    gurke = gameplay.time_query(GAME_TIME)
    blocks.fill(M,world(x, z, y),world(x2, z2, y2)) # Block an erster Position bauen
    while gameplay.time_query(GAME_TIME) < gurke + länge: #zähler der ticks
        if gameplay.time_query(GAME_TIME) > gurke + intervall * intervalldauer: # immer weiter, wenn mindestens 10 Ticks vergangen sind...
                            blocks.fill(M,world(x + richx, z+richz, y+richy), world(x2 + richx, z2+richz, y2+richy)) # Block an neuer Position bauen
                            x = x + richx # Position anpassen
                            x2= x2+richx
                            y= y+richy
                            y2=y2+richy
                            z= z+richz
                            z2=z2+richz
                            intervall= intervall + 1
 
def raum3():
    blocks.fill(OBSIDIAN, world(X+13, Z+5, Y-2), world(X+25,Z+21,Y+50))
    blocks.fill(AIR, world(X+14, Z+6, Y-1), world(X+24, Z+20, Y+49))
    blocks.fill(LAVA, world(X+14, Z+6,Y-1), world (X+24, Z+8, Y+49))
    blocks.fill(AIR, world(X+13,Z+14,Y-1), world(X+13,Z+15,Y))
    blocks.fill(STONE, world(X+14,Z+13,Y-1), world(X+24,Z+13,Y))
    blocks.fill(STONE, world(X+21,Z+13,Y+5), world(X+22,Z+13,Y+6))
    blocks.place(OBSIDIAN, world(X+12, Z+13, Y+3))
    while Hind1: 
        blöckebewegen(STONE_BRICKS,X+14,Z+13,Y+2,X+13,Z+13,Y+3,2,0,0,70,10)
    while Hind2:
        blöckebewegen2(STONE_BRICKS, X+23, Z+10, Y+1, X+24, Z+10, Y+2, 0, 1, 0, 200,10)
    while Hind3:
        blöckebewegen (STONE_SLAB,X+22, Z+10, Y+21, X+21, Z+10, Y+20, -1, 1, 1, 160, 20)
    while Hind4:
        blocks.fill(AIR, world(X+14,Z+13,Y+33), world(X+15,Z+13,Y+33))
        blöckebewegen (BRICKS,X+12, Z+13, Y+33, X+13, Z+13, Y+33, 2, 0, 0, 40, 20)
        blocks.fill(STONE_BRICKS, world(X+14,Z+10,Y+38), world(X+15,Z+10,Y+39))
    while Hind5:
        blocks.fill(STONE_BRICKS, world(X+14,Z+10,Y+42), world(X+15,Z+10,Y+43))
    if (Hind6==True):
        blocks.fill(AIR, world(X+14, Z+10, Y-1), world(X+24, Z+19, Y+40))
        blöckebewegen3 (STONE_BRICKS,X+14, Z+10, Y+41, X+13, Z+10, Y+44, 2, 0, 0, 60, 10)
        blöckebewegen3 (ANVIL,X+14, Z+13, Y+41, X+14, Z+13, Y+41, 2, 0, 0, 60, 10)
        blöckebewegen3 (ANVIL,X+14, Z+13, Y+44, X+14, Z+13, Y+44, 2, 0, 0, 60, 10)
        blocks.fill(MONSTER_SPAWNER, world(X+25, Z+11, Y+42), world(X+25, Z+12, Y+43))
        player.say("Du hast dich wacker geschlagen.")
        player.say("JEDOCH BIST DU KEIN MAGIER*in")
        player.say("Angesicht deines Talentes gesttaten wir dir weiterzuleben.")
        player.say("Um weiter zum Schatz vorzudringen sag:aperta.")
        player.say("Wenn du klugerweise dich zurückziehen möchtest sag:beam mich hoch scotty.")
 
def antworttod():
    player.teleport(world(X+11, Z-48, Y))
    player.execute("spawnpoint @s 11 102 0")
    player.say("Wir sind so freundlich und geben dir den Schatz!")
    player.say("Ich hoffe du kanst ihn essen")
    player.say(" Wir garen dich schon etwas, dann ist deine Zeit in der Hähle kürzer ")
    player.say("Leb Wohl, du Totgeweihter")
    mobs.apply_effect(HUNGER, mobs.target(NEAREST_PLAYER), 1000000, 20)
    mobs.apply_effect(FIRE_DAMAGE, mobs.target(NEAREST_PLAYER), 1000000, 1)
    Materialien=[DIAMOND, GOLD_NUGGET, LAPIS_LAZULI, DIAMOND_BLOCK, GOLD_BLOCK]
    n=1
    for zahl in Materialien:
        mobs.give(mobs.target(NEAREST_PLAYER), Materialien[n], 128)
        n=n+1
 
def antwortend():
    player.say("Gratulation du hast überlebt")
    player.teleport(positions.ground_position(pos(0,0,0)))
 
spielbediungen()
raum1()
player.teleport(world(X, Z, Y))
player.on_travelled(WALK, on_travelled_walk)
dialog1()
player.on_chat("Tipp", TippR1)
player.on_chat("79 79 118", rantwort)
player.on_chat("aperta", antworttod)
player.on_chat("beam mich hoch scotty", antwortend)
raum2()
raum3()

Notizen für das Projekt

Ideen für das Projekt Unser ursprünglicher Gedanke war eine Schatzsuche in einer mittelalterlichen Burg und oder die Entschärfung einer Bombe. Dabei muss man sich durch verschiedene Räume kämpfen. Am Schluss hat man die Wahl den Schatz zu nehmen oder die Bombe aufzuhalten. Wenn man den Schatz nimmt, löst sich der Boden auf und man fällt in die Tiefe (alles explodiert), aber man stirbt nicht daran. Eine letzte gehässige Nachricht erscheint, dabei bekommt der Spieler den Effekt Hunger, die Nachricht besagt, iss dein Gold und man verhungert.

Mögliche Hindernisse:

  • Einen Block, den man an die richtige Stelle setzen muss.
  • Ein kleines jump in run mit Effekten
  • Mit Pfeil und Bogen etwas in einer Reihenfolge abschiessen.
  • Ein Chemierätsel

Ergebnisse aus den Ideen Bei der aktuellen Version muss man sich durch drei Räume durchkämpfen. Wenn man das jeweilige Rätsel gelöst hat, öffnet sich der nächste Raum. Dabei wird man durch den Chat angeleitet. Bei ersten muss man sich einem Rätsel stellen. Beim Zweiten fliegt man hoch und muss Blöcken ausweichen. Beim Dritten ist es erforderlich sich über einen Lavasee zu bewegen. Am Schluss muss man sich entscheiden, ob man den Schatz weiter verfolgen will oder ob man die Mission abbrechen möchte. Wer sich für den Schatz entscheidet, bekommt ihn auch. Jedoch bekommt man auch Hunger und stirbt. Man könnte zwar den Boden zerstören und rausspringen. Jedoch stirbt man dann am Fallschaden. Wer sich dagegen für den Abbruch entscheidet, wird weg transferiert und überlebt.

Unsere Problematiken beim Programmieren

Blöcke Bewegen: Das Problem bestand darin, die Blöcke in verschiedenen Geschwindigkeiten zu bewegen. Dabei sollen sie nur eine bestimmte Bewegung vollführen und nicht unbegrenzt auf einer Achse weglaufen.

Um dies zu lösen, haben wir die spieleigene Zeitrechnung als Basis genommen. Diese Zeiteinheit erhöhte jedoch schneller, als das Programm sie abfragen konnte. Deshalb mussten wir Intervalle einführen: Das Programm fragt die Zeit ab, und immer wenn der erfragte Zeitpunkt in einem neuen Intervall liegt, wird die Einheit bewegt. So konnten wir auch die Geschwindigkeit anpassen, indem wir die Intervalle grösser oder kleiner definierten. Durch Vorgabe der Anzahl der Takte und der Schrittgrösse kann auch die Bewegung im Raum limitiert werden.

Fehlende Blöcke: Einige Blöcke, die im Inventar und auch in den Chatbefehlen vorhanden sind, stehen beim Programmieren nicht zur Verfügung. Das ist ärgerlich.

Absolute und relative Koordinaten: Zuerst haben wir relative Koordinaten verwendet, was auch kein Problem war. Als wir aber Blöcke durch eine Interaktion ersetzen wollten, mussten wir auf absolute Koordinaten zurückgreifen. Sonst erscheinen die Blöcke nicht am gewünschten Ort, sondern an verschiedenen Orten, je nach der Position der Spielerfigur.

Programm Fehler: Wir haben den Code kopiert und in verschiedenen Welten ausgeführt. Es zeigte sich, dass die Spawnpoints, aber auch Positionen der Blöcke, nicht immer gleich funktionierten. Wir haben die Ursache nicht ermitteln können. Es ist doch der exakt gleiche Code, in gleich konzipierten Welten.

  • gf2/projekte/minecraft/2d1gruppe1.1675611639.txt.gz
  • Zuletzt geändert: 2023/02/05 16:40
  • von emmeneggerm