# maze2 from kandinsky import * from random import * def vline(x,y,w,wl): if w: x1=x*wl+9 y1=y*wl+5 fill_rect(x1,y1,1,wl,color(0,0,0)) def hline(x,y,w,wl): if w: x1=x*wl+9 y1=y*wl+5 fill_rect(x1,y1,wl,1,color(0,0,0)) def cell(x,y,a,w,wl): z=a[x+y*w] hline(x,y,z&1,wl) vline(x+1,y,z&2,wl) hline(x,y+1,z&4,wl) vline(x,y,z&8,wl) def disp(w,h,a,wl): for x in range(w): for y in range(h): cell(x,y,a,w,wl) def nor(u,w,a,n): v=u-w if v>0: if a[v]==15: a[u]&=14 a[v]&=11 return v return u def eas(u,w,a,n): v=u+1 if v%w: if a[v]==15: a[u]&=13 a[v]&=7 return v return u def sou(u,w,a,n): v=u+w if v<n: if a[v]==15: a[u]&=11 a[v]&=14 return v return u def wes(u,w,a,n): v=u-1 if u%w: if a[v]==15: a[u]&=7 a[v]&=13 return v return u def move(u,c,w,a,n): for i in range(c): d=randrange(4) if d==0: u=nor(u,w,a,n) if d==1: u=eas(u,w,a,n) if d==2: u=sou(u,w,a,n) if d==3: u=wes(u,w,a,n) def maze(): print("*** maze2 ***") print("making now") # Initialize w=25 h=17 n=w*h c=n/4 wl=12 a=[15 for x in range(n)] t=[x for x in range(n)] a[0]=7 while 1: # Shuffle the indexes for i in range(n): j=randrange(n) t[i],t[j]=t[j],t[i] # Check each cell in index order done=True for i in range(n): u=t[i] if a[u]==15: done=False else: move(u,c,w,a,n) # Done if all cells connected if done: break # Done a[n-1]&=13 disp(w,h,a,wl) def ccheck(cxy): if cxy[1]>315: cxy[0]=1 if cxy[2]>212: cxy[0]=1 return cxy def cright(cxy): cc=get_pixel(cxy[1]+5,cxy[2]) if cc != color(0,0,0): set_pixel(cxy[1],cxy[2],'green') cxy[1]=cxy[1]+1 cxy[3]=1 else: cxy[3]=4 cxy=ccheck(cxy) return cxy def cdown(cxy): cc=get_pixel(cxy[1],cxy[2]+5) if cc != color(0,0,0): set_pixel(cxy[1],cxy[2],'green') cxy[2]=cxy[2]+1 cxy[3]=4 else: cxy[3]=2 cxy=ccheck(cxy) return cxy def maze2(): maze() cxy=[0,5,10,1] while True: if cxy[3]==1: cxy=cright(cxy) if cxy[3]==4: cxy=cdown(cxy) if cxy[0]==1: break draw_string("END",100,150,'green')