from oxocard import * from ivobuttons import * from oxoaccelerometer import * from random import randrange # Funktion randrange importieren # Gamestate als Dictionary, d.h. wie eine Liste aber mit Namen als Indizes laby = { "size" : 7, # Muss ungerade sein! "feld": None, # Wird das Feld enthalten "x": 1, # Position vom Punkt "y": 1, "next": [0,0], # Zeit zum nächsten Zeichnen } def myArrayShuffle(a): # Zufälliges verwürfeln eines Arrays l = len(a) for i in range(l): j = randrange(i,l) a[i],a[j] = a[j],a[i] def generate(): # Erzeugt ein zufälliges Labyrinth global laby laby['feld'] = [[1 if (x==0 or y==0 or x==laby['size']-1 or y==laby['size']-1) else (2 if x%2==0 or y%2==0 else 3) for x in range(laby['size'])] for y in range(laby['size'])] todo = [[1,1]] laby['feld'][1][1]=0 dirs = ((1,0),(0,1),(-1,0),(0,-1)) ind = [0,1,2,3] while len(todo)>0: index = max(len(todo)-1-int(randrange(101)**2/2000),0) pos = todo[index] del todo[index] myArrayShuffle(ind) for d in ind: a,b = pos[0]+dirs[d][0], pos[1]+dirs[d][1] if laby['feld'][a][b]==2: aa,bb = a+dirs[d][0], b+dirs[d][1] if laby['feld'][aa][bb]==3: laby['feld'][a][b] = 0 laby['feld'][aa][bb] = 0 todo.append(pos) todo.append((aa,bb)) break laby['x']=1 laby['y']=1 def dimmen(m, farben): for i in range(len(farben)): farben[i]=tuple(map(lambda x:min(m,x),farben[i])) def zeichnen(m=255): global laby farben = [BLACK, RED, BLUE, YELLOW] dimmen(m,farben) for x in range(8): xx = laby['x']+x-3 for y in range(8): yy = laby['y']+y-3 f = BLACK if xx>=0 and xx=0 and yy1 and zeit>laby['next'][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 pos[i] += dir # Kleine Beschleunigung, länger bis zur nächsten Bewegung warten, grosse Beschleunigung -> wenig warten. laby['next'][i] = zeit + 200 - abs(ac[i]*20) if (pos[0]!=laby['x'] or pos[1]!=laby['y']) and laby['feld'][pos[0]][pos[1]]==0: laby['x'] = pos[0] laby['y'] = pos[1] zeichnen() if (laby['x']==laby['size']-2 and laby['y']==laby['size']-2): for i in range(len(dimmwerte)-1,-1,-1): zeichnen(dimmwerte[i]) laby['size']+=4 generate() for i in dimmwerte: zeichnen(i)