TigerJython4Kids
HomeTurtlegrafikRobotikDatenbanken
fangEi

ARBEITSBLATT 1: "FANG DAS EI" MIT CALLIOPE

 

 

SPIELBESCHREIBUNG

 

Auf dem 5x5 LED-Display des Calliope bewegt sich ein Pixel auf einer zufälligen Spalte von oben nach unten, analog einem Ei, das von einem Tisch hinunter fällt.

Auf der untersten Zeile kannst du durch Drücken des Buttons A bzw. Buttons B einen Pixel hin und her bewegen, analog einem Korb, mit dem du das Ei auffangen möchtest, bevor es am Boden zerschlägt. Bist du mit dem Korbpixel auf der untersten Zeile dort, wo das Eipixel ankommt, so hast du es "gefangen" und kriegst einen Punkt gutgeschrieben. Das Spiel wird 10 x wiederholt und es geht darum, dass du möglichst viele Eier bzw. Punkte sammelst, also im Maximum 10 von 10.

Nach dem Prinzip von "Teile und Herrsche" teilst du das komplexe Problem in mehrere Teilaufgaben ein.

 

 

 

TEILAUFGABE 1: FALLENDES EIPIXEL

 

Als erstes schreibst du ein Programm, dass bei jedem Aufruf der Funktion moveEgg() das Eipixel auf der fixen Spalte x = 2  um eine Zeile nach unten bewegt. Du gehst von folgendem Programmgerüst aus, und fügt die fehlenden Anweisungen ein:

Programm:

from calliope_mini import *

def move():
    global y, yOld
    # erase old 
    ...
    # draw new 
    ...
    # update position
    yOld = y
    y = y + 1
    if y == 5:
        y = 0

# Initialization
x = 2
y = 0
yOld = 4

# Animation loop
while True:
    move()
    sleep(300)  # animation speed
► In Zwischenablage kopieren

 

 

TEILAUFGABE 2: AUF ZUFÄLLIGER LINIE FALLENDES EIPIXEL

 

Als nächstes erweiterst du das Programm so, dass die Falllinie zufällig gewählt wird. Verwende den Aufruf random(a, b) aus dem Modul random, der eine Zufallszahl zwischen a und b (a und b eingeschlossen) liefert Führe dazu analog zu yOld auch ein xOld ein.

 

 

TEILAUFGABE 3: VERSCHIEBBARES KORBPIXEL

 

Schreibe im gleichen Stil die Funktion moveBasket(), welche das Korbpixel auf der untersten Zeile links oder rechts verschiebt, wenn du den linken, bzw. rechten Button drückst. Das Hauptprogramm besteht aus:

# Initialization
z = 0

# Animation loop
while True:
    moveBasket()
    sleep(300)  # animation speed

wo z die aktuelle x-Koordinate das Korbpixels ist.

 

 

TEILAUFGABE 4:  ZUSAMMENFÜGEN VON EI UND KORB

 

Füge nun die Codeteile so zusammen, so dass sich sowohl das Eipixel wie der Korbpixel (allerdings noch unabhängig voneinander) bewegen. Das Hauptprogramm enthält die Schleife:

while True:
    moveEgg()
    mobeBasket()
    sleep(300)  # animation speed

Du kannst jetzt bereits etwas spielen, indem du versuchst, mit dem Korb am richtigen Ort das Ei zu fangen.

 

 

TEILAUFGABE 5:  HERAUSFINDEN, OB DER KORB DAS EI FÄNGT

 

Das Programm soll nun von sich aus herausfinden, ob das Eipixel und das Korbpixel am gleichen Ort zusammentreffen (kollidieren). In diesem Fall erhöhst du die Spielpunktzahl um eins. Den Kollisionstest fügst du am bestem im Hauptprogramm ein, wobei du beachten musst, dass die Position des aktuell angezeigten Eipixels mit xOld, yOld beschrieben wird (x, y ist die Position des nächsten Pixels). Bei einem Hit zeigst du das Bild Image.YES (ein Gutzeichen), bei Misserfolg zeigst du Image.NO (ein Kreuz).

if yOld == 4: # egg at bottom
        sleep(1000)    
        if xOld == z:  #  hit
            display.show(Image.YES, clear = True)
        else: # miss
            display.show(Image.NO, clear = True)

 

 

SPIEL FERTIGSTELLEN UND PERSONALISIEREN

 

Das Schwierigste ist hinter dir. Du muss jetzt nur noch eine Zählvariable hits einfügen, die um eins erhöht wird, falls Ei und Korb zusammentreffen und dann noch dafür sorgen, dass das Spiel genau 10 mal wiederholt wird. Nachher zeigst du auf dem Display die Zahl der Hits an und beendest das Programm. Du kannst es ja durch Klicken des Reset-Buttons beliebig oft starten.

Selbstverständlich ist es nun deiner Fantasie überlassen, dem Spiel durch einige Varianten und Verbesserungen einen persönlichen Touch zu geben. Viel Spass!