Heißer Draht Lösung: Unterschied zwischen den Versionen

Aus microbit - Das Schulbuch
Zur Navigation springen Zur Suche springen
Die Seite wurde neu angelegt: „== Grundsätzliche Überlegungen == Für dieses Beispiel sind folgende Ideen wichtig: * Was sind Ereignisse und welche gibt es beim micro:bit? * Wie funkti…“
 
Keine Bearbeitungszusammenfassung
 
(Eine dazwischenliegende Version desselben Benutzers wird nicht angezeigt)
Zeile 1: Zeile 1:
== Grundsätzliche Überlegungen ==
== Grundsätzliche Überlegungen ==
Für dieses Beispiel sind folgende Ideen wichtig:
Für dieses Beispiel sind folgende Ideen wichtig:
* Was sind [[Ereignisse]] und welche gibt es beim micro:bit?
* Was sind [[Ereignisse]] und welche gibt es beim BBC micro:bit?
* Wie funktionieren [[Alternativen|Abfragen]] und wie können dort Vergleiche verwendet werden?
* Wie funktionieren [[Bedingte_Anweisungen|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?
* Wie kann ich Kontakt an den Pins des BBC micro:bit abfragen? Wie können dort "Schalter" angeschlossen werden?


== Tipps und Tricks ==
== Tipps und Tricks ==
; Beim Starten des Programms, was müssen wir alles festlegen?
; 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.
: 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>
: 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.
; 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!  
: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 Kontakt beim Berühren der Drähte zählen?
; 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 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>
: 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.
: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.
; 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>
: 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 zB über das Drücken jeweils einer der beiden Knöpfe gemacht werden könnte):
; 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 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>
: 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>
: 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>
: 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 ==
== Komplettlösungen ==
; Beim Starten des Programms, was müssen wir alles festlegen?
; Was müssen wir beim Start des Programms 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"><pre id="pre4">
: Wir sollten die wichtigen Variablen auf null setzen und einen Text ausgeben, um anzuzeigen, dass es los geht. <spoiler text="Lösung"><pre id="pre4">
AnzahlKontakte = 0
AnzahlKontakte = 0
basic.showString("Los!")
basic.showString("Los!")
</pre></spoiler>
</pre></spoiler>
; Wie können wir ein Zurücksetzen und Neustarten des Spiels mit den Tasten A und B bewerkstelligen?
; 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"><pre id="pre4">
: Eigentlich ist das ja das gleiche, wie wenn man den BBC micro:bit einschaltet und er startet ... <spoiler text="Lösung"><pre id="pre4">
input.onButtonPressed(Button.AB, function () {
input.onButtonPressed(Button.AB, function () {
     AnzahlKontakte = 0
     AnzahlKontakte = 0
Zeile 34: Zeile 34:
</pre></spoiler>
</pre></spoiler>
; Und was muss passieren, wenn das Spiel läuft?
; 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"><pre id="pre4">
: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"><pre id="pre4">
input.onPinPressed(TouchPin.P0, function () {
input.onPinPressed(TouchPin.P0, function () {
     soundExpression.giggle.play()
     soundExpression.giggle.play()
Zeile 44: Zeile 44:
</pre></spoiler>
</pre></spoiler>
; Wenn wir nun am Ende des Labyrinths angelangt sind, wäre es gut zu wissen, wie der Endstand ist.
; 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"><pre id="pre4">
: Da nehmen wir am einfachsten eine der beiden Tasten und zeigen den Wert der Zählvariable an. <spoiler text="Lösung"><pre id="pre4">
input.onButtonPressed(Button.A, function () {
input.onButtonPressed(Button.A, function () {
     basic.showString("" + (AnzahlKontakte))
     basic.showString("" + (AnzahlKontakte))
Zeile 52: Zeile 52:
</pre></spoiler>
</pre></spoiler>
; Da war noch was mit Schummeln ... wie könnte man bei so einem Spiel schummeln einbauen?
; 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"><pre id="pre4">
: 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"><pre id="pre4">
input.onButtonPressed(Button.B, function () {
input.onButtonPressed(Button.B, function () {
     AnzahlKontakte += -1
     AnzahlKontakte += -1

Aktuelle Version vom 8. Februar 2022, 15:34 Uhr

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>