Heißer Draht Lösung

Aus microbit - Das Schulbuch
Zur Navigation springen Zur Suche springen

Grundsätzliche Überlegungen

Für dieses Beispiel sind folgende Ideen wichtig:

  • Was sind Ereignisse und welche gibt es beim BBC micro:bit?
  • Wie funktionieren Abfragen und wie können damit Vergleiche verwendet werden?
  • Wie kann ich Kontakt an den Pins des BBC micro:bit abfragen? Wie können dort "Schalter" angeschlossen werden?

Tipps und Tricks

Was müssen wir beim Start des Programms alles festlegen?
Denke immer daran: Sicherheit geht vor - alle Variablen initialisieren, d.h. auf einen vernünftigen Startwert setzen.
Was man natürlich auch braucht, ist eine Variable, mit der man sich merken kann, wie viele Kontakt es gegeben hat.<spoiler text="Hinweis">Diese sollte man zu Beginn und auch beim Zurücksetzen des Spiels („Reset“) auf null setzen, bei einem Kontakt um eins erhöhen und beim „Schummelknopf“ um eins erniedrigen.</spoiler>
Am besten verwendest du „Ereignisse“, die man abfragen kann.
Je nach persönlichem Geschmack können diese auch anders eingesetzt werden als hier in der Musterlösung. Also wähle beliebige Tasten für die jeweiligen Funktionen aus!
Wie können wir nun das Zählen der Kontakte beim Berühren der Drähte zählen?
Das Prüfen auf einen Kontakt macht der BBC micro:bit für uns automatisch, wenn wir das richtige Ereignis verwenden. Welches könnte das sein? Schau einmal, welche Möglichkeiten die makecode-Webseite dir anbietet!<spoiler>Das nennt sich nur etwas seltsam und heißt "Wenn P0 gedrückt", denn ein Schalter oder Knopf, den man anschließen könnte, ist im Endeffekt auch nichts anderes als 2 Drähte die sich berühren.</spoiler>
Damit wird ein Kontakt zwischen Drahtschleife und Drahtlabyrinth festgestellt, wenn alles richtig verbunden ist. Hier sollte auch der Kontakt mitgezählt werden und vielleicht kurz ein Symbol und/oder ein Geräusch ausgegeben werden.
Eine Möglichkeit zum Zurücksetzen des Spiels wäre noch gut.
Was muss man dafür eigentlich machen? Ist es nicht das gleiche wie beim Einschalten des BBC micro:bit?<spoiler>Man muss also den Zähler zurücksetzen und auch einen Text anzeigen, dass es jetzt losgehen kann.</spoiler>
Zwei Möglichkeiten sollte es noch geben (die z.B. über das Drücken jeweils einer der beiden Knöpfe gemacht werden könnte)
Wir müssen am Ende ausgeben, wie viele Berührungen es gegeben hat.<spoiler>z.B. "Wenn Knopf A gedrückt", gib die Anzahl der gezählten Kontakte für eine bestimmte Zeit aus und lösche dann den Bildschirm wieder.</spoiler>
Nicht vergessen auf die Möglichkeit zum Schummeln, also dass nicht ganz richtig gezählt wird?<spoiler>Psst, wenn man das niemandem sagt, könnte z.B. durch Knopf B (ohne dass etwas am Bildschirm ausgegeben wird) der Zähler um eins verkleinert werden … ;)</spoiler>

Komplettlösungen

Was müssen wir beim Start des Programms alles festlegen?
Wir sollten die wichtigen Variablen auf null setzen und einen Text ausgeben, um anzuzeigen, dass es los geht. <spoiler text="Lösung">

AnzahlKontakte = 0 basic.showString("Los!") </spoiler>

Wie können wir ein Zurücksetzen und Neustarten des Spiels mit den Tasten A und B bewerkstelligen?
Eigentlich ist das ja das gleiche, wie wenn man den BBC micro:bit einschaltet und er startet ... <spoiler text="Lösung">

input.onButtonPressed(Button.AB, function () { AnzahlKontakte = 0 basic.showString("Los!") }) </spoiler>

Und was muss passieren, wenn das Spiel läuft?
Wenn das Programm läuft, muss nur noch bei jedem Kontakt der beiden Drähte die Variable für das Mitzählen der Kontakte um eins erhöht werden. Vielleicht wäre es auch noch gut, (kurz) ein Symbol anzuzeigen, wenn es zu einem Kontakt kommt und eventuell auch einen Ton auszugeben.<spoiler text="Lösung">

input.onPinPressed(TouchPin.P0, function () { soundExpression.giggle.play() AnzahlKontakte += 1 basic.showIcon(IconNames.No) basic.pause(500) basic.clearScreen() }) </spoiler>

Wenn wir nun am Ende des Labyrinths angelangt sind, wäre es gut zu wissen, wie der Endstand ist.
Da nehmen wir am einfachsten eine der beiden Tasten und zeigen den Wert der Zählvariable an. <spoiler text="Lösung">

input.onButtonPressed(Button.A, function () { basic.showString("" + (AnzahlKontakte)) basic.pause(2000) basic.clearScreen() }) </spoiler>

Da war noch was mit Schummeln ... wie könnte man bei so einem Spiel schummeln einbauen?
Wir hätten ja noch einen Knopf frei, den man dafür verwenden kann. Nicht ganz so offensichtliches Schummeln wäre es, wenn man die Anzahl der gezählten Kontakte einfach um den Wert 1 verringert ... <spoiler text="Lösung">

input.onButtonPressed(Button.B, function () { AnzahlKontakte += -1 }) </spoiler>