This is an old revision of the document!
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()
- trail.py
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()