The Queens Cupcake Lösung

Aus microbit - Das Schulbuch
Version vom 15. Februar 2022, 09:35 Uhr von Matthias.huetthaler (Diskussion | Beiträge)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen

Detailschritte

  • Beginne das Beispiel damit, dass du alle notwendigen Variablen erstellst:
    • Die Variable "cupcake" stellt mittels eines "sprite" (Computergrafik, eine leuchtende LED am Micro:bit) den Cupcake dar.<spoiler text="Block">
let cupcake = game.createSprite(2, 2)

</spoiler>

    • Die Variable "cupcakeOnPlate" brauchst du, um überprüfen zu können, ob der Cupcake noch am Teller ist. <spoiler text="Block">
let cupcakeOnPlate = true

</spoiler>

    • Mit der Variable "tolerance" kannst du den Schwierigkeitsgrad des Spieles einstellen. Setze den Wert für den Anfang auf 200. <spoiler text="Block">
let tolerance = 200

</spoiler>

  • Fällt der Cupecake vom Teller, ist das Spiel beendet. Die "while do" - Schleife überprüft genau das für dich. Während das Sprite (Cupcake) auf der Anzeige des Micro:bits ist, wird alles innerhalb der Schleife ausführt. Fliegt das Sprite vom Display, wird die Variable "cupcakeOnPlate" auf falsch gesetzt. Die "while do" - Schleife ist damit beendet und "Game over" wird am Display ausgegeben.<spoiler text="Block">
let cupcakeOnPlate = false
while (cupcakeOnPlate == true) {
	
}
basic.showString("Game Over")

</spoiler>

  • Wenn der Micro:bit in eine Richtung (links, rechts, vor, zurück) geneigt wird, soll das erkannt und ein Programmcode (Cupcake soll am Display in die richtige Richtung wandern) ausgeführt werden. Der Beschleunigungssensor liefert den Wert dafür sowohl für die x-Achse (links rechts) als auch für die y-Achse (vor, zurück). Für die 4 Richtungen, in die sich das Sprite bewegen kann, brauchst du also 4 Bedingungen.<spoiler text="Block">
let cupcakeOnPlate = false
basic.showString("3-2-1 Go")
while (cupcakeOnPlate == true) {
    let tolerance = 0
    if (input.acceleration(Dimension.X) > tolerance) {
    	
    }
    if (input.acceleration(Dimension.X) < -1 * tolerance) {
    	
    }
    if (input.acceleration(Dimension.Y) > tolerance) {
    	
    }
    if (input.acceleration(Dimension.Y) < -1 * tolerance) {
    	
    }
}
basic.showString("Game Over")

</spoiler>

  • Damit das Sprite in die gewünschte Richtung wandert, muss es entsprechend der Bedingung verändert werden: Wird der Micro:bit beispielsweise nach rechts geneigt, soll das Sprite um eine Position entlang der x-Achse wandern. Wenn das Sprite allerdings schon am vierten und letzten Punkt des rechten Displayrands steht und der Micro:bit weiterhin nach rechts geneigt ist, fällt der Cupcake von der Platte und das Spiel ist vorbei. Mit einer weiteren bedingten Anweisung, kannst du genau das programmieren:
  • Mit dieser bedingten Anweisung überprüfst du, ob sich der Cupcake (Sprite) noch am Tablett befindet. Ist das nicht der Fall, wird die Variable "cupcakeOnPlate" auf falsch gesetzt und das Spiel ist beendet. Andernfalls wandert der Cupcake um eine Position nach rechts.<spoiler text="Block">
let cupcakeOnPlate = false
let cupcake: game.LedSprite = null
if (cupcake.get(LedSpriteProperty.X) == 4) {
    cupcakeOnPlate = false
} else {
    cupcake.change(LedSpriteProperty.X, 1)
    basic.pause(200)
}

</spoiler>

  • Zum Schluss musst du diese beiden bedingten Anweisungen nur mehr richtig verschachteln und für die übrigen drei Richtungen (links, oben und unten) anpassen. Hier siehst du, wie der fertige Code aussieht, damit der Cupcake beim Neigen des BBC micro:bit nach rechts, auch nach rechts wandert und vom Tablett fällt.<spoiler text="Block">
basic.showString("3-2-1 Go")
let cupcake = game.createSprite(2, 2)
let cupcakeOnPlate = true
let tolerance = 200
while (cupcakeOnPlate == true) {
    if (input.acceleration(Dimension.X) > tolerance) {
        if (cupcake.get(LedSpriteProperty.X) == 4) {
            cupcakeOnPlate = false
        } else {
            cupcake.change(LedSpriteProperty.X, 1)
            basic.pause(200)
        }
    }
}
basic.showString("Game Over")

</spoiler>

Zurück zur Aufgabe