TigerJython4Kids
Robotique Robotik
memory

ARBEITSBLATT 2: "MEMORY" MIT OXOCARD

 

 

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 bei 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 ein Element 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, das beim Aufruf der Funktion createSeg(n) 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 oxocard import *
from random import randint
     
def createSeq(n):
    for i in range(n):
    x = randint(0, 1)
    seq.append(x) 
    
seq = []
n = 3
createSeq(n)
print(seq) 
► In Zwischenablage kopieren

 

 

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

 

Definiere eine Funktionen right(), die während 0.2 s einen Rechtspfeil angezeigt und danach wieder löscht. Auch nach dem Löschen soll das Programm 0.2 s warten. Definiere eine zweite Funktion left(), die auf die gleiche Art einen Linkspfeil anzeigt.

Ergänze die Funktion createSeg() so, dass bei 0 ein Rechtspfeil und bei 1 ein Linksspfeil angezeigt wird. Teste das Programm mit verschiedenen n.

 

 

TEILAUFGABE 3: WIEDERGABE DER FOLGE MIT BUTTONS

 

Im nächsten Entwicklungsschritt baust du die Interaktion mit dem Spieler ein. Beim Drücken des linken bzw. rechten Buttons wird in die 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(0.1)

Das sleep(0.1) verhindert, dass das Programm in der Wiederholschleife nicht unnötig viel Leistung vergeudet (und damit schwer abzubrechen ist). Ergänze das Programm mit den Funktionen right() und left(), so dass beim Drücken der Buttons die passenden Pfeile angezeigt werden.

 

 

TEILAUFGABE 4:  BEIDE FOLGEN VERGLEICHEN

 

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 alle Leds grün schalten bzw. das Zeichen '--' einblenden.

if seq == seq2:
    clear(GREEN)
    print("Ok")
else:
    display('-', RED)   
    ...

 

 

TEILAUFGABE 5:  SCHWIERIGKEITSGRAD STEIGERN

 

Bisher hat die gezeigte Sequenz immer noch die fixe Länge 3. Nun erweiterst du das Programm, dass das Spiel mit n = 2 beginnt und bei einer richtigen Wiedergabe jeweils n um 1 erhöht. Für die Wiederholung verwendest du eine while True-Schleife.

n = 2

while True:
    seq = []
    seq2 = []
    createSeq(n)    
    while len(seq2) < n:
        .....
        if seq == seq2:
           ....
           n += 1 
        ..... 
          

 

 

TEILAUFGABE 6:  SPIEL BEENDEN

 

Um das Spielende zu erfassen, musst du aus der Endlosschleife eine while-Schleife machen, die so lange läuft, bis die boolesche Variable gameOver True ist.

....
n = 2 gameOver = False while not gameOver: seq = [] seq2 = [] createSeq(n) while len(seq2) < n: if button_a.was_pressed(): ..... if seq == seq2: .... n += 1 else: .... gameOver = True

Am Schluss kannst du als Game Score noch die Länge der letzten korrekt wiedergegebenen Folge anzeigen, beispielsweise mit einem scrollenden Text.

Ein neues Spiel kannst du jederzeit durch Drücken der Reset-Tasten starten.

 

 

TEILAUFGABE 7:  DAS SPIEL NACH EIGENEN IDEEN ERWEITERN

 

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

 

 

ERGÄNZUNG: TÖNE MEMORISIEREN

 

Du kannst das Memory-Spiel auch mit Tonfolgen programmieren. Schau im Kapitel Sound nach, wie du Töne erzeugen und hörbar machen kannst.