Subject: Re: Idea for cave generation CODE (python) From: amonroejj@yahoo.com (R. Alan Monroe) Date: Mon, 26 May 2003 17:46:00 GMT Group: rec.games.roguelike.development In article , amonroejj@yahoo.com (R. Alan Monroe) wrote: >Pseudocode... > >pick a random x,y point a >for a number of iterations > pick a random destination point b > for each point along the line from a to b > draw a random sized filled circle centered here > a=b def dump(): for row in board: for col in row: sys.stdout.write(chr(col+48)) print def filledcircle(cenx,ceny,r): x=0 #r=10 y=r d=3-(2*r) while (x <= y): board[ceny-y][cenx-x:cenx+x+1]=[1 for j in range(x*2+1)] board[ceny-x][cenx-y:cenx+y+1]=[1 for j in range(y*2+1)] board[ceny+x][cenx-y:cenx+y+1]=[1 for j in range(y*2+1)] board[ceny+y][cenx-x:cenx+x+1]=[1 for j in range(x*2+1)] x += 1 if (d>=0): y -= 1 d += (4 * (x-y)) + 10 else: d += (4 * x) + 6 #debug() def caveline(x,y,u,v): print "input", x,y,u,v dx=u-x dy=v-y print "input delta", dx,dy d=0 if (abs(dx)>abs(dy)): print "across", x,y,u,v if (x>u): x,u=u,x y,v=v,y print "swapped", x,y,u,v dx=u-x dy=v-y print dx,dy while (x <= u): r = random.expovariate(4) r = int(5*r) filledcircle(x,y, r) # board[y][x]=1 x += 1 d += dy if (dy<0): if (d<=-dx): y -= 1 d += dx else: if (d>=dx): y += 1 d -= dx print x,y,d else: print "down",x,y,u,v if (y>v): x,u=u,x y,v=v,y print "swapped", x,y,u,v dx=u-x dy=v-y print dx,dy while (y <= v): r = random.expovariate(4) r = int(5*r) filledcircle(x,y, r) #board[y][x]=1 y += 1 d += dx if (dx<0): if (d<=-dy): x -= 1 d += dy else: if (d>=dy): x += 1 d -= dy print x,y,d board=[[0 for col in range(68)] for row in range(35)] sx=random.randint(10,55) sy=random.randint(10,25) for loop in range(5): ex=random.randint(10,55) ey=random.randint(10,25) caveline(sx,sy,ex,ey) sx=ex sy=ey dump()