Ursprungsmitteilung
Thema Unklarheit in Dokumentation 
Autor Ivo Blöchliger 
Eingangsdatum 2019-11-04 08:35:16.0 
Mitteilung In Dokumentation zur Oxocard auf tigerjython4kids (Link darf ich nicht setzen, sonst muss ich den Text ein drittes Mal schreiben) war mir die Beschreibung der Funktionen dot(x,y,color) und getColor(x,y) nicht klar.
Ich dachte, die Koordinaten bezogen sich auf das Canvas, tatsächlich beziehen sich die Koordinaten auf das Window (macht im Normalfall auch Sinn).

Gebraucht hätte ich das in folgendem Demo, das ihr gerne verwenden und weiterverbreiten dürft: (zu finden ist die rechte untere Ecke)



from oxocard import *
from oxoaccelerometer import *
import random

def myArrayShuffle(a): # Zufälliges verwürfeln eines Arrays
l = len(a)
for i in range(l):
j = random.randint(i,l-1)
a[i],a[j] = a[j],a[i]


acc = Accelerometer.create()

while True:

# Random seed from accelerometer
bigTextScroll("Shake", GREEN,BLACK,60)
while True:
r = abs(acc.getX()*acc.getY()*acc.getZ())
if r>150:
random.seed(int(r*10000))
break
clear(BLUE)

# Build Labyrinth
enableRepaint(False)
setOrigin(0,0)
clear(GREEN)
for x in range(24):
for y in range(24):
if (x==0 or y==0 or x>21 or y>21):
dot(x,y,BLUE)
elif x%2==1 and y%2==1:
dot(x,y,RED)
dot(1,1,BLACK)
todo = [(1,1)]
dirs = ((1,0),(0,1),(-1,0),(0,-1))
ind = [0,1,2,3]
while len(todo)>0:
pos = todo.pop()
myArrayShuffle(ind)
myArrayShuffle(todo)
for d in ind:
a,b = pos[0]+dirs[d][0], pos[1]+dirs[d][1]
if getColor(a, b)==GREEN:
aa,bb = a+dirs[d][0], b+dirs[d][1]
if getColor(aa,bb)==RED:
dot(a,b,BLACK)
dot(aa,bb,BLACK)
todo.append((aa,bb))
repaint()

# Init Game
x,y = 1,1
dot(x,y,RED)
cx,cy = 0,0
enableRepaint(True)
delay=0.25
while True:
ang = (acc.getRoll(),acc.getPitch())
moved = False
for i in range(2):
for d in (-1,1):
if ang[i]*d>10 and getColor(x-cx+d*(1-i),y-cy+d*i)==BLACK:
dot(x-cx,y-cy,BLACK)
x+=d*(1-i)
y+=d*i
dot(x-cx,y-cy,RED)
moved = True
if not moved:
delay=0.25
else:
delay*=0.8
sleep(delay)
if x==21 and y==21:
for k in [250, 100, 50, 20, 10, 5, 1, 0]:
clear((0,k,0))
sleep(0.1)
break
cx, cy = min(max(x-4,0),16),min(max(y-4,0),16)
setOrigin(cx,cy)
 
 
      
Antworten
Kein Eintrag