def EvaluateDefaultActor(world, actor, niter=100): # iterate: return 1 if back at spot, else return -1 at end # return -1 if it ever leaves its lane or hits another actor too for i in xrange(niter): # prev_f = actor.getLocalWorld() world.tick() (code, res) = Evaluate(world, actor, i) # print # "x=%d,y=%d,location=%d,action=%d"%(actor.state.x,actor.state.y,actor.state.lookup(world),actor.last_action.idx) if not code == 0: return (code, res) return (0, "did not finish loop")
def EvaluateAndGetFeatures(world, actor, num_features, num_actions, get_features, niter=100, default_r=0): prev_fs = np.zeros((niter, num_features)) next_fs = np.zeros((niter, num_features)) actions = np.zeros((niter, num_actions)) rs = np.zeros((niter, 1)) terminal = np.zeros((niter, 1), dtype=bool) (code, res) = (-1, "did not finish loop") # iterate: return 1 if back at spot, else return -1 at end # return -1 if it ever leaves its lane or hits another actor too for i in xrange(niter): prev_f = get_features(world, actor) world.tick() next_f = get_features(world, actor) (code, res) = Evaluate(world, actor, i) # print # "x=%d,y=%d,location=%d,action=%d"%(actor.state.x,actor.state.y,actor.state.lookup(world),actor.last_action.idx) prev_fs[i] = prev_f next_fs[i] = next_f actions[i, actor.last_action.idx] = 1. rs[i] = default_r if not code == 0: rs[i] = code terminal[i] = True break if code == 0: code = -1 return (code, res, ExperienceInput(i + 1, prev_fs, rs, actions, next_fs, terminal))
def main(screen): screensize = (screen.get_width(), screen.get_height()) #hud = data.load_image("headerCropped.png") hud = data.load_image("header_colored.png") hud_shift = (screensize[0] - hud.get_width())/2 hud_center = hud_shift + (hud.get_width()/2) texture_manager = texture.TextureManager() texture_manager.register_texture('MUD', 'test.png') texture_manager.register_texture('monkey', 'monkey_resized.png') texture_manager.register_texture('vertPole', 'VerticalPoleSmall.png') texture_manager.register_texture('chain', 'Chain01.png') texture_manager.register_texture('balloon', 'Balloon.png') texture_manager.register_texture('crate1', 'Crate001.png') texture_manager.register_texture('bananacrate', 'BananaCrate.png') texture_manager.register_texture('floorBox', 'FloorBox1.png') texture_manager.register_texture('floorBoxRight', 'FloorBoxRight.png') texture_manager.register_texture('floorBoxLeft', 'FloorBoxLeft.png') texture_manager.register_texture('banana', 'Banana.png') texture_manager.register_texture('bananas', 'BananaS.png') texture_manager.register_texture('topPole', 'PoleToppers.png') texture_manager.register_texture('bottomPole', 'PoleBottoms.png') texture_manager.register_texture('MONKEY_L0', 'MonkeyWalk001.png') texture_manager.register_texture('MONKEY_L1', 'MonkeyWalk002.png') texture_manager.register_texture('MONKEY_L2', 'MonkeyWalk003.png') texture_manager.register_texture('MONKEY_L3', 'MonkeyWalk004.png') texture_manager.flip_texture('MONKEY_L0', 'MONKEY_R0') texture_manager.flip_texture('MONKEY_L1', 'MONKEY_R1') texture_manager.flip_texture('MONKEY_L2', 'MONKEY_R2') texture_manager.flip_texture('MONKEY_L3', 'MONKEY_R3') pymunk.init_pymunk() player = game_entities.Player() world = WorldInstance(player, texture_manager, level_num = 1) view = View(screensize) font = pygame.font.Font(None, 16) timerFont = pygame.font.Font(data.filepath("pointy.ttf"), 24) levelFont = pygame.font.Font(data.filepath("JANIS___.TTF"),50) clock = pygame.time.Clock() time = pygame.time MaxTime = 250 time_elapsed = 0 text_timer = timerFont.render("%4i" % world._level_max_time, 4, (0, 0, 0)) unused_time = 0 step_size = 0.005 keydown_map = {K_w: False, K_LEFT: False, K_RIGHT: False} #preprime event timers pygame.time.set_timer(USEREVENT, 1000) #pygame event loop is_running = True while is_running: screen.fill((0x28,0x08b,0xd7)) #perform physics in uniform steps space = world.get_space() dt = clock.tick()/1000.0 unused_time += dt while(unused_time > step_size): space.step(step_size) unused_time -= step_size #handle events for event in pygame.event.get(): if event.type == QUIT: is_running = False elif event.type == KEYDOWN: if event.key in keydown_map: keydown_map[event.key] = True if event.key == K_ESCAPE: is_running = False elif event.key == K_SPACE or event.key == K_UP: player.jump() elif event.key == K_z: player.begin_grabbing() elif event.key == K_c: player.begin_tagging() elif event.key == K_x: player.drop() elif event.key == K_v: player.begin_untagging() elif event.key == K_r: world.restart_level() elif event.key == K_LEFTBRACKET: world.previous_level() world.display_level_name( screen, font=levelFont, pos = (70+hud_shift, 165)) elif event.key == K_RIGHTBRACKET: world.next_level() world.display_level_name( screen, font=levelFont, pos = (70+hud_shift, 165)) elif event.type == KEYUP: if event.key in keydown_map: keydown_map[event.key] = False elif event.key == K_z: player.end_grabbing() elif event.key == K_c: player.end_tagging() elif event.key == K_v: player.end_untagging() elif event.type == USEREVENT: world._time_elapsed += 1 pygame.time.set_timer(USEREVENT, 1000) time_left = world.time_left() if time_left == 0: world.restart_level() # world.display_level_name(screen, font=levelFont, pos = (70+hud_shift, 165)) #render timer if time_left > 50: color = (0, 0, 0) elif time_left > 10: color = (155,0,0) else: color = (255,0,0) text_timer = timerFont.render("%4i" % time_left, 4, color) #perframe actions if keydown_map[K_LEFT]: player.left() elif keydown_map[K_RIGHT]: player.right() else: player.stop() #let entites know how much time has passed world.tick(dt) #draw entities view.set_position(player.get_position()) for entity in world.get_entities(): if entity.is_textured(): tex = texture_manager.get_texture_map(entity, entity.get_texture_name()) image = pygame.transform.rotate(tex.image, entity.get_body().angle * 180/math.pi) screen.blit(image, view.to_screen(entity.get_texture_origin())) # pygame.draw.polygon(screen, (255,255,255), map(view.to_screen, entity.get_vertices()), 1) #render hud, fps, & timer screen.blit(hud,(hud_shift,0)) text_surf = font.render("fps: %i" % clock.get_fps(), 1, (25,0,0)) screen.blit(text_surf, (5, 5)) #screen.blit(text_timer, (370 + hud_shift, 65)) screen.blit(text_timer, (hud_center - 30 , hud.get_height()- 34)) world.display_level_progress(screen, font=levelFont, pos = (700+hud_shift, 55)) if world._time_elapsed < 5: world.display_level_name(screen, font=levelFont, pos = (70+hud_shift, 165)) pygame.display.flip()
def run_events(self): if (frameno - 1) in self.cache: del self.cache[frameno - 1] if self.state in ('Connected', 'Synchronized'): remote_events = self.socket.inbuf.splitlines(True) if remote_events and remote_events[-1][-1] not in '\r\n': self.socket.inbuf = remote_events[-1] remote_events = remote_events[:-1] else: self.socket.inbuf = '' for ev in remote_events: timestamp, args = ev.split(None, 1) args = args.split() timestamp = int(timestamp) log.msg(5, 'RemoteEvent', args[0], remote=timestamp, args=args[1:]) if self.state == 'Synchronized': if args[0] not in ('ping', 'synchronize'): self.add_remote_event(args, timestamp) elif self.state == 'Connected': assert args[0] in ('ping', 'synchronize') if args[0] == 'ping': self.remote_frame = timestamp if int(args[1]) != 0: self.rtts.append(frameno - int(args[1])) log.msg(5, 'Clock', 'AddedRTT', start=int(args[1]), value=self.rtts[-1], remote=timestamp) if options.server and len(self.rtts) >= 30: self.state = 'Synchronized' rtt = sum(self.rtts)/(2*len(self.rtts)) self.remote_frame_offset = frameno - timestamp + rtt log.msg(3, 'Clock', 'Synchronized', rtt=rtt, frame_offset=self.remote_frame_offset) self.socket.outbuf += '%d synchronize %d\n' % \ (frameno, frameno-self.remote_frame_offset) self.add_event('randomize', random.getrandbits(32)) self.add_event('reset') if args[0] == 'synchronize': rtt = sum(self.rtts)/(2*len(self.rtts)) self.state = 'Synchronized' self.remote_frame_offset = int(args[1]) - timestamp log.msg(3, 'Clock', 'Synchronized', rtt=rtt, frame_offset=self.remote_frame_offset) if self.state == 'Connected': self.socket.outbuf += '%d ping %d\n' % (frameno, self.remote_frame) for ev in pygame.event.get(): log.msg(5, 'PygameEvent', pygame.event.event_name(ev.type), **ev.dict) func_name = 'H_PYGAME_%s' % pygame.event.event_name(ev.type) if hasattr(world, func_name): getattr(world, func_name)(**ev.dict) precedence = ['remote', 'local'] if options.server: precedence = ['local', 'remote'] world.frameno = frameno for p in precedence: for ev in (e for e in self.cache.get(frameno, []) if e[0] == p): log.msg(4, 'Event', ev[1], args=ev[2:]) func_name = 'H_EVENT_%s' % ev[1] if hasattr(world, func_name): getattr(world, func_name)(*ev[2:]) else: log.msg(2, 'Event', 'UndefinedHandler', func=func_name, args=ev[2:]) world.tick()