alexthescott.random walk

-- random walk
-- alexthescott
-- 9/21/21
-- https://w.wiki/46ny

p={8,136,130,11,139,131,12,140,129}
pal(p,1)

function new_walk(col)
	w={}
	w.c=col
	w.x=64
	w.y=64
	
	w.draw=function(self)		
		pset(self.x,self.y,self.c+1)
	end
	
	w.update=function(self)
		local d=rnd(4)\1
		if d==0 then
			self.x+=2
		elseif d==1 then
			self.y+=1
		elseif d==2 then
			self.x-=2
		else
			self.y-=1
		end
		
		if self.x<=0 then
			self.x=126
		elseif self.x>=128 then
			self.x=0
		end
		
		if self.y<=0 then
			self.y=126
		elseif self.y>=128 then
			self.y=0
		end
	end
	
	add(walks,w)
end

function burn()
	for p=0,1200 do
		x=rnd(128)\1
		y=rnd(128)\1
		pc=pget(x,y)
		coin=rnd(2)\1
		if pc!=0 and pc%3!=0 then
			if rnd(2)\1==0 then
				pset(x,y+1,pc+coin)
				pset(x,y+coin+1,pc+coin)
			end
		end
		if rnd(1)<0.25 then
			pset(x,y,0)
		end
	end
end

fc=0
global_color=1+3*(rnd(3)\1)
walks={}
for i=1,80 do
	new_walk(global_color)
end

cls()
::♥::
if t()<2 then
	print("random walk",42,64,global_color)
else
	burn()
	
	fc+=1
	
	if fc%800==0 then
		global_color+=3
		global_color%=9	
		for w in all(walks) do
			w.c=global_color
		end
		fc=0
	end
	
	for w in all(walks) do
		w:draw()
		w:update()
	end
end
flip()
goto ♥