This is an old revision of the document!
Spiele auf der OxoCard mit dem Beschleunigungssensor
Der folgende Code sollte auf direkt auf der OxoCard getestet werden (macht sonst kaum Spass).
from oxocard import * from ivobuttons import * from oxoaccelerometer import * # Zustand vom Spiel pos = [0,0] # x- und y-Koordinaten in einer Liste, pos[0], und pos[1] farbe = RED naechste = [0,0] # Zeit, ab wann die nächste Bewegung in x- und y-Richtung stattfinden darf. # Beschleunigungssensor acc = Accelerometer.create()\ # Funktionen zum Zeichnen und löschen des Spielzustands def zeichnen(): global pos, farbe # Veriablen von ausserhalb dieser Funktion verwenden fastDot(pos[0], pos[1], farbe) fastRepaint() def loeschen(): global pos fastDot(pos[0], pos[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 pneu[0], pneu[1] = pos[0], pos[1] # Kopie der Position zeit = getms() # Aktuelle Zeit for i in range(2): # i=0 für x-Koordinate, i=1 für y-Koordinate if abs(ac[i])>1 and zeit>naechste[i]: # Mehr als 1 m/s^2 Beschleunigung in x- bzw. y-Richtung und nächste Bewegung kann schon stattfinden dir = 1 # Richtung positiv if ac[i]<0: # Ausser wenn Beschleunigung negativ dir = -1 if i==1: # Vorzeichenwechsel für y dir = -dir pneu[i] = clip(pos[i]+dir) # Neue Position, garantiert auf Display dank oben definierter clip-Funktion # Kleine Beschleunigung, länger bis zur nächsten Bewegung warten, grosse Beschleunigung -> wenig warten. naechste[i] = zeit + 200 - abs(ac[i]*20) # Nur wenn sich etwas geändert hat auch neu zeichnen. # Arrays sind dann gleich (==) wenn alle Elemente gleich sind. if pneu!=pos: loeschen() pos[0], pos[1] = pneu[0], pneu[1] zeichnen()