import pygame import random from math import sqrt def main(): pygame.init() w, h = 640,480 screen = pygame.display.set_mode([w,h]) screen.fill([255,255,255]) mainloop = True x1, y1 = w/2+10, h/2 x2, y2 = w/2-10, h/2 fps = 60 Clock = pygame.time.Clock() zx = list() zy = list() zs = list() m = 0 # countdown to next zombie n = 0 # number of zombies myFont = pygame.font.SysFont("None", 30) p1 = 0 p2 = 0 while mainloop: tickFPS = Clock.tick(fps) pygame.display.set_caption("Press Esc to quit. FPS: %.2f" % (Clock.get_fps())) screen.fill((255,255,255)) screen.blit(myFont.render("%d"%n, 0, (0,0,0)), (5,5)) screen.blit(myFont.render("%d"%p1, 0, (0,0,255)), (50,5)) screen.blit(myFont.render("%d"%p2, 0, (255,0,0)), (100,5)) p1 = 0 p2 = 0 keys = pygame.key.get_pressed() # update player 1 if keys[pygame.K_UP] and y1 > 0: y1 -= 1 if keys[pygame.K_DOWN] and y1 < h-10: y1 += 1 if keys[pygame.K_LEFT] and x1 > 0: x1 -= 1 if keys[pygame.K_RIGHT] and x1 < w-10: x1 += 1 screen.fill((0,0,255), pygame.Rect(x1,y1,10,10)) # update player 2 if keys[pygame.K_v] and y2 > 0: y2 -= 1 if keys[pygame.K_i] and y2 < h-10: y2 += 1 if keys[pygame.K_u] and x2 > 0: x2 -= 1 if keys[pygame.K_a] and x2 < w-10: x2 += 1 screen.fill((255,0,0), pygame.Rect(x2,y2,10,10)) # decide whether to add new zombies m += 1 if m > fps*2: n += 1 while True: x = random.randrange(w) y = random.randrange(h) if sqrt((x-x1)**2 + (y-y1)**2) > 40 and sqrt((x-x2)**2 + (y-y2)**2) > 40: zx.append(x) zy.append(y) break zs.append(random.uniform(0.15,0.65)) m = 0 # draw zombies for i in range(n): screen.fill((0,0,0), pygame.Rect(zx[i],zy[i],5,5)) # check if any zombies collide for i in range(n): if x1zx[i] and y1zy[i]: mainloop = False if x2zx[i] and y2zy[i]: mainloop = False # update zombie pos for i in range(n): # determine closest player if (zx[i]-x1)*(zx[i]-x1)+(zy[i]-y1)*(zy[i]-y1) > (zx[i]-x2)*(zx[i]-x2)+(zy[i]-y2)*(zy[i]-y2): p2 += 1 x = x2 y = y2 else: p1 += 1 x = x1 y = y1 if x>zx[i]: zx[i]+=zs[i] else: zx[i]-=zs[i] if y>zy[i]: zy[i]+=zs[i] else: zy[i]-=zs[i] # get keyboard events for event in pygame.event.get(): if event.type == pygame.QUIT: mainloop = False elif event.type == pygame.KEYDOWN: if event.key == pygame.K_ESCAPE or event.key == pygame.K_q: mainloop = False pygame.display.flip() pygame.time.wait(2000) print n pygame.quit() if __name__ == "__main__": main()