Differences
This shows you the differences between two versions of the page.
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 |
from oxocard import * | from oxocard import * | ||
from ivobuttons import * | from ivobuttons import * | ||
Line 153: | Line 153: | ||
| | ||
</ | </ | ||
+ | </ | ||
+ | |||
+ | <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, | ||
+ | |||
+ | # Beschleunigungssensor | ||
+ | acc = Accelerometer.create() | ||
+ | |||
+ | for i in range(8): | ||
+ | if i<4 or i>4: | ||
+ | fastDot(i, | ||
+ | |||
+ | # Funktionen zum Zeichnen und löschen des Spielzustands | ||
+ | |||
+ | def zeichnen(): | ||
+ | global pos, farben, | ||
+ | for i,p in enumerate(pos): | ||
+ | | ||
+ | fastRepaint() | ||
+ | | ||
+ | def loeschen(): | ||
+ | global pos, farben, | ||
+ | for i,p in enumerate(pos): | ||
+ | | ||
+ | | ||
+ | | ||
+ | # 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() | ||
+ | dir = [0,0] | ||
+ | for c in range(2): | ||
+ | dir[c] = 1 # Richtung positiv | ||
+ | if ac[c]< | ||
+ | dir[c] = -1 | ||
+ | dir[1]=-dir[1] | ||
+ | |||
+ | for i in range(n): | ||
+ | x,y = pos[i][0], pos[i][1] | ||
+ | a,b = clip(x+dir[0]), | ||
+ | if a!=x or b!=y: | ||
+ | change = False | ||
+ | if fastGetDot(a, | ||
+ | change = True | ||
+ | elif (abs(a-x)+abs(b-y))==2: | ||
+ | if fastGetDot(a, | ||
+ | b=y | ||
+ | change = True | ||
+ | elif fastGetDot(x, | ||
+ | a=x | ||
+ | change = True | ||
+ | if change: | ||
+ | fastDot(x, | ||
+ | pos[i][0], pos[i][1] = a,b | ||
+ | fastDot(pos[i][0], | ||
+ | fastRepaint() | ||
+ | | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | <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// | ||
+ | |||
+ | # Beschleunigungssensor | ||
+ | acc = Accelerometer.create() | ||
+ | |||
+ | for i in range(8): | ||
+ | if i<4 or i>4: | ||
+ | fastDot(i, | ||
+ | |||
+ | # Funktionen zum Zeichnen und löschen des Spielzustands | ||
+ | |||
+ | def zeichnen(): | ||
+ | global pos, farben, | ||
+ | for i,p in enumerate(pos): | ||
+ | | ||
+ | fastRepaint() | ||
+ | | ||
+ | def loeschen(): | ||
+ | global pos, farben, | ||
+ | for i,p in enumerate(pos): | ||
+ | | ||
+ | | ||
+ | | ||
+ | # 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() | ||
+ | dir = [0,0] | ||
+ | for c in range(2): | ||
+ | dir[c] = 1 # Richtung positiv | ||
+ | if ac[c]< | ||
+ | dir[c] = -1 | ||
+ | dir[1]=-dir[1] | ||
+ | |||
+ | p=0 | ||
+ | while p<n: | ||
+ | x,y = pos[p][0], pos[p][1] | ||
+ | a,b = clip(x+dir[0]), | ||
+ | if a!=x or b!=y: | ||
+ | change = False | ||
+ | if fastGetDot(a, | ||
+ | change = True | ||
+ | elif (abs(a-x)+abs(b-y))==2: | ||
+ | if fastGetDot(a, | ||
+ | b=y | ||
+ | change = True | ||
+ | elif fastGetDot(x, | ||
+ | a=x | ||
+ | change = True | ||
+ | if change: | ||
+ | fastDot(x, | ||
+ | pos[p][0], pos[p][1] = a,b | ||
+ | fastDot(pos[p][0], | ||
+ | fastRepaint() | ||
+ | for x in range(8): | ||
+ | f = fastGetDot(x, | ||
+ | if f!=BLACK and f==fastGetDot(x, | ||
+ | print(" | ||
+ | for flash in range(10): | ||
+ | for y in range(3): | ||
+ | fastDot(x, | ||
+ | fastRepaint() | ||
+ | sleep(0.1) | ||
+ | for y in range(3): | ||
+ | fastDot(x, | ||
+ | fastRepaint() | ||
+ | sleep(0.1) | ||
+ | | ||
+ | i=0 | ||
+ | while i<n: | ||
+ | if pos[i][0]==x and pos[i][1]< | ||
+ | fastDot(pos[i][0], | ||
+ | del pos[i] | ||
+ | del farben[i] | ||
+ | if i<=p: | ||
+ | p-=1 | ||
+ | n-=1 | ||
+ | else: | ||
+ | i+=1 | ||
+ | fastRepaint() | ||
+ | | ||
+ | p+=1 | ||
+ | | ||
+ | | ||
+ | | ||
+ | </ | ||
+ | </ |