lehrkraefte:blc:informatik:glf20:oxoaccel

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
Last revision Both sides next revision
lehrkraefte:blc:informatik:glf20:oxoaccel [2020/12/13 16:37]
Ivo Blöchliger
lehrkraefte:blc:informatik:glf20:oxoaccel [2020/12/13 18:08]
Ivo Blöchliger
Line 2: Line 2:
  
 Der folgende Code sollte auf direkt auf der OxoCard getestet werden (macht sonst kaum Spass). Der folgende Code sollte auf direkt auf der OxoCard getestet werden (macht sonst kaum Spass).
-<code python>+<code python accel.py>
 from oxocard import * from oxocard import *
 from ivobuttons import * from ivobuttons import *
Line 153: Line 153:
                  
 </code> </code>
 +</hidden>
 +
 +<hidden Sand>
 +Hinweis: Auf Ihrer OxoCard könnte sich noch eine fehlerhafte ivobuttons-Bibliothek befinden. Laden Sie dazu die Datei install.py auf die OxoCard, siehe 
 +<code python shaker.py>
 +from oxocard import *
 +from ivobuttons import *
 +from oxoaccelerometer import *
 +
 +# Zustand vom Spiel
 +
 +# Positionen und Farben vom Trail
 +n = 24
 +pos = [[i%8,i//8] for i in range(n)]
 +farben = [(255-i*10,0,i*10+15) for i in range(n)]
 +
 +# Beschleunigungssensor
 +acc = Accelerometer.create()
 +
 +for i in range(8):
 +    if i<4 or i>4:
 +        fastDot(i,3,GREEN)
 +
 +# Funktionen zum Zeichnen und löschen des Spielzustands
 +
 +def zeichnen():
 +    global pos, farben,  # Variablen von ausserhalb dieser Funktion verwenden
 +    for i,p in enumerate(pos):
 +       fastDot(p[0], p[1], farben[i])
 +    fastRepaint()
 +    
 +def loeschen():
 +    global pos, farben,  # Variablen von ausserhalb dieser Funktion verwenden
 +    for i,p in enumerate(pos):
 +       fastDot(p[0], p[1], BLACK)
 +    
 +    
 +# Begrenzt einen Wert zwischen 0 und 7 (damit man sicher auf dem Display bleibt).
 +def clip(v):
 +    if v<0:
 +        v=0
 +    if v>7:
 +        v=7
 +    return v
 +    
 +zeichnen()
 +
 +pneu = [0,0] # Variable für neue Position
 +while True:
 +    ac = acc.getValues()  # Aktuelle Beschleunigung auslesen
 +    dir = [0,0]
 +    for c in range(2):       # i=0 für x-Koordinate, i=1 für y-Koordinate
 +        dir[c] = 1         # Richtung positiv
 +        if ac[c]<0:     # Ausser wenn Beschleunigung negativ
 +            dir[c] = -1
 +    dir[1]=-dir[1]    # Vorzeichenwechsel in y-Richtung
 +
 +    for i in range(n):
 +        x,y = pos[i][0], pos[i][1]
 +        a,b = clip(x+dir[0]), clip(y+dir[1])
 +        if a!=x or b!=y:
 +            change = False
 +            if fastGetDot(a,b)==BLACK:
 +                change = True
 +            elif (abs(a-x)+abs(b-y))==2:
 +                if fastGetDot(a,y)==BLACK:
 +                    b=y
 +                    change = True
 +                elif fastGetDot(x,b)==BLACK:
 +                    a=x
 +                    change = True
 +            if change:
 +                fastDot(x,y, BLACK)
 +                pos[i][0], pos[i][1] = a,b
 +                fastDot(pos[i][0], pos[i][1], farben[i])
 +                fastRepaint()
 +        
 +</code>
 +</hidden>
 +
 +<hidden Shaker Tetris>
 +Versuchen Sie in der oberen Hälfte, vertikal die drei gleichen Farben hinzukriegen. Dieser verschwinden dann. Ziel ist es, alle Pixel zum Verschwinden zu bringen.
 +<code python shakertetris.py>
 +from oxocard import *
 +from ivobuttons import *
 +from oxoaccelerometer import *
 +
 +# Zustand vom Spiel
 +
 +# Positionen und Farben vom Trail
 +n = 24
 +pos = [[i%8,i//8] for i in range(n)]
 +choice = [RED, YELLOW, MAGENTA, BLUE]
 +farben = [choice[(i//3)%4] for i in range(n)]
 +
 +# Beschleunigungssensor
 +acc = Accelerometer.create()
 +
 +for i in range(8):
 +    if i<4 or i>4:
 +        fastDot(i,3,GREEN)
 +
 +# Funktionen zum Zeichnen und löschen des Spielzustands
 +
 +def zeichnen():
 +    global pos, farben,  # Variablen von ausserhalb dieser Funktion verwenden
 +    for i,p in enumerate(pos):
 +       fastDot(p[0], p[1], farben[i])
 +    fastRepaint()
 +    
 +def loeschen():
 +    global pos, farben,  # Variablen von ausserhalb dieser Funktion verwenden
 +    for i,p in enumerate(pos):
 +       fastDot(p[0], p[1], BLACK)
 +    
 +    
 +# Begrenzt einen Wert zwischen 0 und 7 (damit man sicher auf dem Display bleibt).
 +def clip(v):
 +    if v<0:
 +        v=0
 +    if v>7:
 +        v=7
 +    return v
 +    
 +zeichnen()
 +
 +pneu = [0,0] # Variable für neue Position
 +while True:
 +    ac = acc.getValues()  # Aktuelle Beschleunigung auslesen
 +    dir = [0,0]
 +    for c in range(2):       # i=0 für x-Koordinate, i=1 für y-Koordinate
 +        dir[c] = 1         # Richtung positiv
 +        if ac[c]<0:     # Ausser wenn Beschleunigung negativ
 +            dir[c] = -1
 +    dir[1]=-dir[1]    # Vorzeichenwechsel in y-Richtung
 +
 +    p=0
 +    while p<n:
 +        x,y = pos[p][0], pos[p][1]
 +        a,b = clip(x+dir[0]), clip(y+dir[1])
 +        if a!=x or b!=y:
 +            change = False
 +            if fastGetDot(a,b)==BLACK:
 +                change = True
 +            elif (abs(a-x)+abs(b-y))==2:
 +                if fastGetDot(a,y)==BLACK:
 +                    b=y
 +                    change = True
 +                elif fastGetDot(x,b)==BLACK:
 +                    a=x
 +                    change = True
 +            if change:
 +                fastDot(x,y, BLACK)
 +                pos[p][0], pos[p][1] = a,b
 +                fastDot(pos[p][0], pos[p][1], farben[p])
 +                fastRepaint()                
 +                for x in range(8):
 +                    f = fastGetDot(x,0)
 +                    if f!=BLACK and f==fastGetDot(x,1) and f==fastGetDot(x,2):
 +                        print("x=%d" % x)
 +                        for flash in range(10):
 +                            for y in range(3):
 +                                fastDot(x,y,WHITE)
 +                            fastRepaint()
 +                            sleep(0.1)
 +                            for y in range(3):
 +                                fastDot(x,y,f)
 +                            fastRepaint()
 +                            sleep(0.1)
 +                            
 +                        i=0
 +                        while i<n:
 +                            if pos[i][0]==x and pos[i][1]<3:
 +                                fastDot(pos[i][0],pos[i][1],BLACK);
 +                                del pos[i]
 +                                del farben[i]
 +                                if i<=p:
 +                                    p-=1
 +                                n-=1
 +                            else:
 +                                i+=1
 +                    fastRepaint()
 +                        
 +        p+=1                    
 +                
 +        
 +        
 +</code>
 +</hidden>
  • lehrkraefte/blc/informatik/glf20/oxoaccel.txt
  • Last modified: 2020/12/16 10:37
  • by Ivo Blöchliger