# Problem 8C
#
# RUN:
# racing, gasping, hurting
#
import math
papercolor = 0
g.paper(papercolor)
g.norefresh()
g.antialias(1)
def random(rseed):
bb = 198621
mm = (98621+g.getTime(4))
bl = (long(rseed)*bb+1)
temp = bl%mm
return int(temp%100),int(temp)
def make_runners(number):
rseed = g.getTime(4)
runners = []
maxspeed = 10
for n in range(number):
rnd1, rseed = random(rseed)
rnd2, rseed = random(rseed)
runners.append((rnd1,rnd2%maxspeed+1))
return runners
def make_trigarray(amplitude,resolution):
sinarray = []
for n in range(resolution+1):
sinarray.append(int(float(amplitude)/(1+2+4+6)*(math.sin(math.pi/resolution*n)+math.sin(2*math.pi/resolution*n)+math.sin(4*math.pi/resolution*n)+math.sin(6*math.pi/resolution*n))))
return sinarray
def move_runners(runners):
runners_new = []
for runner in runners:
runners_new.append(((runner[0]+runner[1])%101,runner[1]))
return runners_new
def render(runners,trigarray,state,burst):
x = g.getMouse(1)
y = g.getMouse(2)
# burst
if state == burst:
for n in range(21):
g.paper(n*5)
g.refresh()
for n in range(21):
g.paper(100-n*5)
g.refresh()
# trigarray
amp = abs(trigarray[int(0.01*state*(len(trigarray)-1))])
g.field(x-amp,y-amp,x+amp,y+amp,abs(papercolor-amp))
# runners
k = len(runners)/2-len(runners)
for runner in runners:
g.setPixel(runner[0],y+k,abs(papercolor-100))
k = k+1
g.refresh()
g.paper(papercolor)
runners = make_runners(20)
trigarray = make_trigarray(120,40)
state = 0
rseed = g.getTime(4)
while 1:
burst, rseed = random(rseed)
for state in range(101):
render(runners,trigarray,state,burst)
runners = move_runners(runners)
state = (state+1)%101