memory

ARBEITSBLATT 2: "MEMORY" MIT CALLIOPE

 

 

SPIELBESCHREIBUNG

 

Das Ziel des Spiels ist es, sich an eine möglichst lange  Folge von Links-Rechts-Pfeilen zu erinnern. Du kannst damit dein Gedächtnis trainieren!

Das Programm zeigt eine zufällige Folge von Links- bzw. Rechtspfeilen an. Danach musst du diese Folge durch Drücken des linken bzw. rechten Buttons wiedergeben. Ist die Wiedergabe richtig, wird der Vorgang mit einer um einen Pfeil längeren Folge wiederholt, sonst ist das Spiel fertig.

 

 

 

TEILAUFGABE 1: ZUFÄLLIGE FOLGE MIT ZAHLEN 0 UND 1 ERZEUGEN

 

Als erstes schreibst du ein Programm welches eine zufällige Folge mit n Elementen der Zahlen 0 oder 1 erzeugt und diese in einer Liste seg speichert. Teste das Programm mit verschiedenen n und schreibe die Liste mit print(seq) aus.

Programm:

#from calliope_mini import *
from random import randint
     
n = 3
seq = []
repeat n:
    x = randint(0, 1)
    seq.append(x)    
print(seq)

 

 

TEILAUFGABE 2: ZUFÄLLIGE FOLGE MIT ← UND → ERZEUGEN

  Ergänze das erste Programm wie folgt: Wenn die Zufallszahl 0 ist, wird ein Linkspfeil angezeigt
display.show(Image.ARROW_W)
sleep(500)
sonst (wenn die Zufallszahl 1 ist), ein Rechtspfeil
display.show(Image.ARROW_E)
sleep(500)

Die Pfeile werden während 500 ms angezeigt ( sleep(500))
und danach mit display.clear() wieder gelöscht.

Teste das Programm mit verschiedenen n.

 

 

TEILAUFGABE 3: FOLGE MIT ← UND → MIT BUTTONS ERZEUGEN

 

Beim Drücken des linken bzw. rechten Buttons wird in eine zweite Liste seg2 eine 0 oder 1 eingetragen, je nachdem, ob der Spieler den linken oder rechten Button drückt

n = 3
seg2 = []

while len(seq2) < n:
    if button_a.was_pressed():
        seq2.append(0)
    if button_b.was_pressed():
        seq2.append(1) 
    sleep(10)

len(seq2) gibt Anzahl der Elemente des Liste seq2.
Das sleep(10) verhindert, dass das Programm in der Wiederholschleife unnötig viel Leistung vergeudet (und damit schwer abzubrechen ist). Ergänze das Programm so, dass zusätzlich beim Drücken der Buttons die passenden Pfeile (ARROW_W bzw. ARROW_E angezeigt werden.

Nach der Benutzereingabe vergleichst du die beiden  Listen seq und seq2. Sind sie gleich, so ist die Wiedergabe richtig, sonst ist das Spiel beendet. Als Rückmeldung kannst du zum Beispiel die Images YES bzw. NO anzeigen.

if seq == seq2:
    display.show(Image.YES)
...

 

 

TEILAUFGABE 4: INTERAKTION DES SPIELERS EINBAUEN

 

Im nächsten Entwicklungsschritt fünst du die Teilaufgaben 2 und 3 zusammen. Zuerst wird die Folge seq wie in der Teilaufgaben 2 erzeugt, dann versucht der Spieler mit den Buttons die Folge wiederzugeben.

from calliope_mini import *
from random import randint
     
n = 3
seq = []
repeat n:
    x = randint(0, 1)
    .....

seq2 = []
while len(seq2) < n:
    if button_a.was_pressed():
        ....
Nach der Benutzereingabe vergleichst du die beiden  Listen seq und seq2. Sind sie gleich, so ist die Wiedergabe richtig. Als Rückmeldung kannst du zum Beispiel die Images YES bzw. NO anzeigen.

if seq == seq2:
    display.show(Image.YES)
...

 

 

TEILAUFGABE 5:  SCHWIERIGKEITSGRAD STEIGERN

 

Bisher hat die gezeigte Sequenz immer noch die fixe Länge 3. Nun erweiterst du das Programm so, dass das Spiel mit n = 2 beginnt und bei einer richtigen Wiedergabe n um 1 erhöht wird. Dazu brauchst du eine alles umfassende repeat-Schleife, die so lange läuft, bis die Wiedergabe fehlerhaft ist, und die Schleife nach Anzeige des Image NO mit break abgebrochen wird.

from calliope_mini import *
from random import randint
     
n = 2
repeat:
    #zufallssequenz
    seq = []
    repeat n:
        x = randint(0, 1)
        ....
    
    #wiedergabe
    seq2 = []
    while len(seq2) < n:
        if button_a.was_pressed():
            .....

    #sequenzen vergleichen            
    if seq == seq2:
        ....
        n = n + 1
    else:
        display.show(Image.NO)
        sleep(1000)
        break

 

 

TEILAUFGABE 6:  SPIEL BEENDEN

 

Am Schluss kannst du noch die Länge der letzten korrekt wiedergegebenen Folge anzeigen, z. Bsp. mit
print("Anzahl richtig: ", n-1)
oder einem scrollenden Text
display.scroll(str(n - 1))

 

 

TEILAUFGABE 7:  DAS SPIEL NACH EIGENEN IDEEN ERWEITERN

 

Du hast sicher viele Ideen, wie du das Spiel individuell gestalten oder verbessern kannst.

Anregung:
Du kannst das Memory-Spiel auch mit Sound ergänzen. Schaue im Kapitel Sound nach, wie du Töne erzeugen und hörbar machen kannst.

 

Memo1
#from calliope_mini import *
from random import randint
     
n = 3
seq = []
repeat n:
    x = randint(0, 1)
    seq.append(x)    
print(seq) 
Memo2
from calliope_mini import *
from random import randint
     
n = 3
seq = []
repeat n:
    x = randint(0, 1)
    seq.append(x)    
    if x == 0:
        display.show(Image.ARROW_W)
    else:    
        display.show(Image.ARROW_E)
    sleep(500)
    display.clear()
    sleep(500)        
print(seq)
Memo3
from calliope_mini import *
from random import randint

n = 3
seq2 = []
while len(seq2) < n:
    if button_a.was_pressed():
        display.show(Image.ARROW_W)
        sleep(500)
        display.clear()
        seq2.append(0)
        print(seq2)        
    if button_b.was_pressed():
        display.show(Image.ARROW_E) 
        sleep(500)
        display.clear()
        seq2.append(1)
        print(seq2) 
Memo4
from calliope_mini import *
from random import randint
     
n = 3
seq = []
repeat n:
    x = randint(0, 1)
    seq.append(x)    
    if x == 0:
        display.show(Image.ARROW_W)
    else:    
        display.show(Image.ARROW_E)
    sleep(500)
    display.clear()
    sleep(500)        
print(seq) 

seq2 = []
while len(seq2) < n:
    if button_a.was_pressed():
        display.show(Image.ARROW_W)
        sleep(500)
        display.clear()
        seq2.append(0)
        print(seq2)        
    if button_b.was_pressed():
        display.show(Image.ARROW_E) 
        sleep(500)
        display.clear()
        seq2.append(1)
        print(seq2) 
        
if seq == seq2:
    display.show(Image.YES)
else:
    display.show(Image.NO)            
Memo4
from calliope_mini import *
from random import randint
     
n = 2
repeat:
    #zufallssequenz
    seq = []
    repeat n:
        x = randint(0, 1)
        seq.append(x)    
        if x == 0:
            display.show(Image.ARROW_W)
        else:    
            display.show(Image.ARROW_E)
        sleep(500)
        display.clear()
        sleep(500)        
    #print(seq) 
    
    #wiedergabe
    seq2 = []
    while len(seq2) < n:
        if button_a.was_pressed():
            display.show(Image.ARROW_W)
            sleep(500)
            display.clear()
            seq2.append(0)
            #print(seq2)        
        if button_b.was_pressed():
            display.show(Image.ARROW_E) 
            sleep(500)
            display.clear()
            seq2.append(1)
            #print(seq2) 

    #sequenzen vergleichen            
    if seq == seq2:
        display.show(Image.YES)
        sleep(1000)
        display.clear()
        n = n + 1
    else:
        display.show(Image.NO)
        sleep(1000)
        break

print("Anzahl richtig: ", n-1)