lehrkraefte:blc:informatik:glf20:oxoaccel

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()
  • lehrkraefte/blc/informatik/glf20/oxoaccel.1607868550.txt.gz
  • Last modified: 2020/12/13 15:09
  • by Ivo Blöchliger