def silly_inner_generator(self): while True: direction = random.choice(list(SK.STEPS.keys())) if direction == CM.TELEPORT: continue np = (self.p[0] + SK.STEPS[direction][0], self.p[1] + SK.STEPS[direction][1]) if cell_is_correct(np): yield CM.pack_bot_step(self.run_number, self.time_frame, CM.CAT, direction)
def __init__(self, run_number, game_map): self.p = [random.randint(0, GAME_CONF.FIELD_SIZE - 1) for _ in range(2)] self.run_number = run_number self.game_map = game_map self.send_to_bot(CM.pack_init(run_number, game_map, self)) self.time_frame = 1 self.silly_inner_gen = self.silly_inner_generator()
def run(self): while True: self.run_number += 1 print('Game Map, start, run_number=' + str(self.run_number)) self.cat = Cat(self.run_number, self.game_map) self.send_update_to_server_vis() s = sched.scheduler(time.perf_counter, time.sleep) for repeat in range(GAME_CONF.REPEATS_NUMBER): s.enter(TimesConf.BORDER_DELAY + repeat * TimesConf.BETWEEN_REPEATS_DT, 1, self.send_init) s.enter(TimesConf.TOTAL, 0, lambda *args: None) s.run() for t in range(GAME_CONF.STEPS_NUMBER): logger.info('Cat, run_number=' + str(self.run_number) + ', time_frame=' + str( self.cat.time_frame) + ', p=' + str(self.cat.p)) self.send_update_to_server_vis() s = sched.scheduler(time.perf_counter, time.sleep) s.enter(0, 2, self.cat.one_step) for i in range(GAME_CONF.FIELD_SIZE): for j in range(GAME_CONF.FIELD_SIZE): to_cat_direction = self.generate_step(t, i, j) msg = CM.pack_bot_step(self.run_number, self.cat.time_frame, CM.CAT, to_cat_direction) for repeat in range(GAME_CONF.REPEATS_NUMBER): s.enter(TimesConf.BORDER_DELAY + repeat * TimesConf.BETWEEN_REPEATS_DT, 1, self.send_step, argument=(msg, i, j)) s.enter(TimesConf.TOTAL, 0, lambda *args: None) s.run()
def one_step(self): self.time_frame += 1 self.send_to_bot(CM.pack_request_for_step(self.run_number, self.time_frame, CM.TELEPORT, self.p)) self.receive_from_bot()
def send_init(self): self.sender.send(CM.pack_init(self.run_number, self.game_map, self.cat), 0, 0)
def silly_inner_hunter(self): return CM.pack_bot_step(self.game_run.run_number, self.time_frame, CM.HUNTER, self.cat_direction)
def process_step(self): if self.game_run is None or self.cat_direction is None: return self.send_to_bot( CM.pack_request_for_step(self.game_run.run_number, self.time_frame, self.cat_direction, self.p)) self.receive_from_bot()