Пример #1
0
	def handle_move(self, angle, distance):
		# check state
		if self.state is not PlayerState.ACTING:
			raise LoBotomyException(202)

		# check action validity
		if game.move_cost(distance) > config.player.max_energy:
			raise LoBotomyException(101)

		self.move_action = (angle, distance)
Пример #2
0
    def handle_move(self, angle, distance):
        # check state
        if self.state is not PlayerState.ACTING:
            raise LoBotomyException(202)

        # check action validity
        if game.move_cost(distance) > config.player.max_energy:
            raise LoBotomyException(101)

        self.move_action = (angle, distance)
Пример #3
0
	def execute_moves(self, players):
		result_signals = []
		for player in players:
			# unpack required information
			angle, distance = player.move_action
			# calculate new values
			x, y = util.move_wrapped(player.location, angle, distance, (self.width, self.height))
			# log action and subtract energy cost
			cost = game.move_cost(distance)
			# TODO: truncate location tuples to x decimals
			logging.info('player {} moved from {} to {} (cost: {})'.format(
				player.name,
				player.location,
				(x, y),
				cost
			))
			prev_energy = player.energy
			player.energy -= cost
			self.emit_event(
				type = 'player_move',
				player = player.name,
				angle = angle,
				distance = distance,
				location = (player.location, (x, y)),
				cost = cost,
				energy = (prev_energy, player.energy)
			)
			if player.energy <= 0.0:
				# signal player is dead
				result_signals.append(self.player_death(player))
				self.emit_event(
					type = 'player_suicide',
					player = player.name,
					action = 'move',
					cost = cost,
					energy = (prev_energy, player.energy)
				)
				logging.info('player {} died from exhaustion (move)'.format(player.name))
			else:
				# move player on the battlefield
				player.location = (x, y)
		return result_signals
Пример #4
0
 def execute_moves(self, players):
     result_signals = []
     for player in players:
         # unpack required information
         angle, distance = player.move_action
         # calculate new values
         x, y = util.move_wrapped(player.location, angle, distance,
                                  (self.width, self.height))
         # log action and subtract energy cost
         cost = game.move_cost(distance)
         # TODO: truncate location tuples to x decimals
         logging.info('player {} moved from {} to {} (cost: {})'.format(
             player.name, player.location, (x, y), cost))
         prev_energy = player.energy
         player.energy -= cost
         self.emit_event(type='player_move',
                         player=player.name,
                         angle=angle,
                         distance=distance,
                         location=(player.location, (x, y)),
                         cost=cost,
                         energy=(prev_energy, player.energy))
         if player.energy <= 0.0:
             # signal player is dead
             result_signals.append(self.player_death(player))
             self.emit_event(type='player_suicide',
                             player=player.name,
                             action='move',
                             cost=cost,
                             energy=(prev_energy, player.energy))
             logging.info('player {} died from exhaustion (move)'.format(
                 player.name))
         else:
             # move player on the battlefield
             player.location = (x, y)
     return result_signals