Heißer Draht Lösung
Grundsätzliche Überlegungen
Für dieses Beispiel sind folgende Ideen wichtig:
- Was sind Ereignisse und welche gibt es beim micro:bit?
- Wie funktionieren Abfragen und wie können dort 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
- Beim Starten des Programms, was müssen wir 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, wieviele 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 natürlich 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 Kontakt 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 Ereigenis 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>Also Zähler zurücksetzen und auch einen Text anzeigen, dass es jetzt losgehen kann.</spoiler>
- Zwei Möglichkeiten sollte es noch geben (die zB über das Drücken jeweils einer der beiden Knöpfe gemacht werden könnte)
- Wir müssen am Ende ausgeben wieviele Berührungen es gegeben hat.<spoiler>zB "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>
- Je nach Belieben vielleicht noch eine Möglichkeit zum Schummeln, als das nicht ganz richtig gezählt wird?<spoiler>Psst, wenn man das niemandem sagt, könnte zB durch Knopf B (ohne das etwas am Bildschirm ausgegeben wird) der Zähler um eins verkleinert werden … ;)</spoiler>
Komplettlösungen
- Beim Starten des Programms, was müssen wir alles festlegen?
- Wir sollten die wichten Variablen auf Null setzen und vielleicht auch 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?
- Eigenlich 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 Kontakt 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ählvaribale 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 Schummel wäre es, wenn man die Anzahl der gezählten Kontakt einfach um den Wert 1 erniedrigt ... <spoiler text="Lösung">
input.onButtonPressed(Button.B, function () { AnzahlKontakte += -1 }) </spoiler>