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 # Farbe vom Punkt naechste = [0,0] # Zeit, ab wann die nächste Bewegung in x- und y-Richtung stattfinden darf. # Position und Farben vom Trail ntrail = 12 trail = [[0,0] for i in range(ntrail)] farben = [(255-i*20,0,i*20) for i in range(ntrail)] farben[ntrail-1]=BLACK trailstart = 0 wegmit = getms() # Maximale Zeit bis der Trail nachkommt # Beschleunigungssensor acc = Accelerometer.create() # Funktionen zum Zeichnen und löschen des Spielzustands def zeichnen(): global pos, farbe, trail, farben, trailstart, ntrail # Veriablen von ausserhalb dieser Funktion verwenden for i in range(ntrail): t = (i+trailstart)%ntrail fastDot(trail[t][0], trail[t][1], farben[i]) fastDot(pos[0], pos[1], farbe) fastRepaint() def loeschen(): global pos, trail, trailstart fastDot(pos[0], pos[1], BLACK) t = trailstart-1 # Negative Indizies sind ok und greifen von hinten auf die Liste zu fastDot(trail[t][0], trail[t][1], BLACK) def trailsave(): global pos, trail, trailstart trailstart = (trailstart+ntrail-1)%ntrail trail[trailstart][0] = pos[0] trail[trailstart][1] = pos[1] # 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 atls 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 + 100 - abs(ac[i]*10) # Nur wenn sich etwas geändert hat auch neu zeichnen. # Arrays sind dann gleich (==) wenn alle Elemente gleich sind. if pneu!=pos: trailsave() wegmit = zeit loeschen() pos[0], pos[1] = pneu[0], pneu[1] zeichnen() if zeit-wegmit>100: wegmit=zeit loeschen() trailsave() zeichnen()