# 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