def parse_pregame(self): ''' Parse all the pre-game messages. These include begin, hit and detect. See the protocol description for more details ''' while True: try: parsed = protocol.parse_msg(self.recv_msg()) command = parsed['command'] if command == 'hit': logging.info('We were hit by {0} (angle: {1}, charge: {2})'.format( parsed['name'], parsed['angle'], parsed['charge'])) elif command == 'detect': logging.info('We detected {0}({1} energy) at (angle: {2}, distance: {3})'.format( parsed['name'], parsed['energy'], parsed['angle'], parsed['distance'])) elif command == 'begin': self.turn_number = parsed['turn_number'] self.energy = parsed['energy'] self.playing = self.energy > 0.0 return elif command == 'death': logging.info('We died! Dead for {} turns'.format(parsed['turns'])) self.playing = False else: continue except KeyError: # garbage received logging.exception('Pregame message parsing error:') continue
def parse_pregame(self): ''' Parse all the pre-game messages. These include begin, hit and detect. See the protocol description for more details ''' try: parsed = protocol.parse_msg(self.recv_msg()) command = parsed['command'] if command == 'hit': logging.info('We were hit by {0} (angle: {1}, charge: {2})'.format( parsed['name'], parsed['angle'], parsed['charge'])) self.env.was_hit = True self.env.hit_angle = parse['angle'] self.env.hit_charge = parse['charge'] elif command == 'detect': if not self.env.detected_distance or self.env.detected_distance > parsed['distance']: self.env.detected_distance = parsed['distance'] self.env.detected_energy = parsed['energy'] self.env.detected_angle = parsed['angle'] logging.info('We detected {0}({1} energy) at (angle: {2}, distance: {3})'.format( parsed['name'], parsed['energy'], parsed['angle'], parsed['distance'])) elif command == 'begin': self.env.turn_number = parsed['turn_number'] self.env.energy = parsed['energy'] self.env.playing = True self.turn_sem.release() elif command == 'death': self.env.playing = False elif command == 'error': self.env.error = True return except KeyError: # garbage received logging.exception('Pregame message parsing error:')
def parse_pregame(self): ''' Parse all the pre-game messages. These include begin, hit and detect. See the protocol description for more details ''' while True: try: parsed = protocol.parse_msg(self.recv_msg()) command = parsed['command'] if command == 'hit': logging.info( 'We were hit by {0} (angle: {1}, charge: {2})'.format( parsed['name'], parsed['angle'], parsed['charge'])) elif command == 'detect': logging.info( 'We detected {0}({1} energy) at (angle: {2}, distance: {3})' .format(parsed['name'], parsed['energy'], parsed['angle'], parsed['distance'])) elif command == 'begin': self.turn_number = parsed['turn_number'] self.energy = parsed['energy'] self.playing = True return else: continue except KeyError: # garbage received logging.exception('Pregame message parsing error:') continue
def parse_welcome(self): ''' Receive the welcome message, parse all info in it and start playing ''' welcome_msg = self.recv_msg() parsed = protocol.parse_msg(welcome_msg) self.energy = parsed['energy'] self.max_energy = parsed['energy'] self.heal = parsed['heal'] self.turn_duration = parsed['turn_duration'] self.turns_left = parsed['turns_left'] self.in_game = True
def parse_welcome(self): ''' Receive the welcome message, parse all info in it and start playing ''' welcome_msg = self.recv_msg() parsed = protocol.parse_msg(welcome_msg) self.energy = parsed['energy'] self.max_energy = parsed['energy'] self.charge = parsed['charge'] self.turn_duration = parsed['turn_duration'] self.turns_left = parsed['turns_left'] self.in_game = True
def join(self): ''' Ask to join a game ''' ok = False while not ok: self.env.name = BOT_NAME + '%06x' % random.randrange((2 ** 8) ** 3) self.send_msg('join ' + self.env.name) welcome_msg = self.recv_msg() parsed = protocol.parse_msg(welcome_msg) ok = parsed['command'] is not 'error' self.env.energy = parsed['energy'] self.env.max_energy = parsed['energy'] self.env.heal = parsed['heal'] self.env.turn_duration = parsed['turn_duration'] self.env.turns_left = parsed['turns_left'] self.connected_cond.acquire() self.env.in_game = True self.connected_cond.notify_all() self.connected_cond.release()
def parse_end(self): ''' Parse the end-turn message ''' protocol.parse_msg(self.recv_msg())