def test_r0_moves_into_r1_once(self): self._r0.get_move = lambda: direction.EAST self._game._do_round(self._round) self.assertEquals(len(self._history._rounds), 2) a0 = self._history._rounds[1]._actions[self._r0] a1 = self._history._rounds[1]._actions[self._r1] p0 = position.Position(1, 1) p1 = position.Position(2, 1) self.assertEquals(a0.starting_health, self._options.robot_health) self.assertEquals( a0.ending_health, self._options.robot_health - self._options.collision_damage) self.assertEquals(a0.starting_position, p0) self.assertEquals(a0.ending_position, p0) self.assertEquals(a0.shot_direction, None) self.assertEquals(a0.shot_distance, None) self.assertEquals(a0.radar_direction, None) self.assertEquals(a0.radar_return, None) self.assertEquals(a0.move_direction, direction.EAST) self.assertEquals(a0.move_distance, 0) self.assertEquals(len(a0.damage_dealt), 1) self.assertEquals(a0.damage_dealt[0].amount, self._options.collision_damage) self.assertEquals(a0.damage_dealt[0].description, 'Robot(#0) drove into Robot(#1)') self.assertEquals(len(a0.damage_taken), 1) self.assertEquals(a0.damage_taken[0].amount, self._options.collision_damage) self.assertEquals(a0.damage_taken[0].description, 'Robot(#0) drove into Robot(#1)') self.assertEquals(a0.lose_reason, None) self.assertEquals(a1.starting_health, self._options.robot_health) self.assertEquals( a1.ending_health, self._options.robot_health - self._options.collision_damage) self.assertEquals(a1.starting_position, p1) self.assertEquals(a1.ending_position, p1) self.assertEquals(a1.shot_direction, None) self.assertEquals(a1.shot_distance, None) self.assertEquals(a1.radar_direction, None) self.assertEquals(a1.radar_return, None) self.assertEquals(a1.move_direction, None) self.assertEquals(a1.move_distance, None) self.assertEquals(len(a1.damage_dealt), 1) self.assertEquals(a1.damage_dealt[0].amount, self._options.collision_damage) self.assertEquals(a1.damage_dealt[0].description, 'Robot(#0) drove into Robot(#1)') self.assertEquals(len(a1.damage_taken), 1) self.assertEquals(a1.damage_taken[0].amount, self._options.collision_damage) self.assertEquals(a1.damage_taken[0].description, 'Robot(#0) drove into Robot(#1)') self.assertEquals(a1.lose_reason, None)
def _find_empty_position(self): """Emplace robts onto the map. Brute force attempt to randomly place a robot somewhere sane. Simpler to just do a lot of tries rather than to enumerate the available spots and randomly pick one. Eventually, if terrain acquires a lot of features, may need to prove that all robots can eventually travel to the point where they can see and/or shoot one another. """ patience = 3 while patience > 0: patience -= 1 # Pick a spot. destination = position.Position( random.randint(1, self._map.width - 2), random.randint(1, self._map.height - 2)) # Don't drop the robot onto anything unpleasant. if not self._map.get(destination).can_move_onto: continue # Or onto another robot. other_robot, other_robot_data = self._find_robot(destination) if other_robot: continue return destination raise RuntimeError("Tried too many times to place a robot. " "Perhaps there are too many robots for the available " "space on the map?")
def test_mutual_radar(self): self._r0.get_radar = lambda: direction.EAST self._r1.get_radar = lambda: direction.WEST self._game._do_round(self._round) self.assertEquals(len(self._history._rounds), 2) a0 = self._history._rounds[1]._actions[self._r0] a1 = self._history._rounds[1]._actions[self._r1] p0 = position.Position(1, 1) p1 = position.Position(2, 1) self.assertEquals(a0.starting_health, self._options.robot_health) self.assertEquals(a0.ending_health, self._options.robot_health) self.assertEquals(a0.starting_position, p0) self.assertEquals(a0.ending_position, p0) self.assertEquals(a0.shot_direction, None) self.assertEquals(a0.shot_distance, None) self.assertEquals(a0.radar_direction, direction.EAST) self.assertEquals( a0.radar_return, robot_module.RadarReturn(direction.EAST, 1, self._options.robot_health, None, None)) self.assertEquals(a0.move_direction, None) self.assertEquals(a0.move_distance, None) self.assertEquals(len(a0.damage_dealt), 0) self.assertEquals(len(a0.damage_taken), 0) self.assertEquals(a0.lose_reason, None) self.assertEquals(a1.starting_health, self._options.robot_health) self.assertEquals(a1.ending_health, self._options.robot_health) self.assertEquals(a1.starting_position, p1) self.assertEquals(a1.ending_position, p1) self.assertEquals(a1.shot_direction, None) self.assertEquals(a1.shot_distance, None) self.assertEquals(a1.radar_direction, direction.WEST) self.assertEquals( a1.radar_return, robot_module.RadarReturn(direction.WEST, 1, self._options.robot_health, None, None)) self.assertEquals(a1.move_direction, None) self.assertEquals(a1.move_distance, None) self.assertEquals(len(a1.damage_dealt), 0) self.assertEquals(len(a1.damage_taken), 0) self.assertEquals(a1.lose_reason, None)
def test_move_south(self): self._r0.get_move = lambda: direction.SOUTH self._round = self._game._do_round(self._round) self.assertEquals(len(self._history._rounds), 2) a0 = self._history._rounds[1]._actions[self._r0] self.assertEquals(a0.starting_health, self._options.robot_health) self.assertEquals(a0.ending_health, self._options.robot_health) self.assertEquals(a0.starting_position, position.Position(1, 1)) self.assertEquals(a0.ending_position, position.Position(1, 1)) self.assertEquals(a0.shot_direction, None) self.assertEquals(a0.shot_distance, None) self.assertEquals(a0.radar_direction, None) self.assertEquals(a0.radar_return, None) self.assertEquals(a0.move_direction, direction.SOUTH) self.assertEquals(a0.move_distance, 0) self.assertEquals(len(a0.damage_dealt), 0) self.assertEquals(len(a0.damage_taken), 0) self.assertEquals(a0.lose_reason, None)
def test_round_zero(self): self.assertEquals(len(self._history._rounds), 1) a0 = self._history._rounds[0]._actions[self._r0] p0 = position.Position(1, 1) self.assertEquals(a0.starting_health, self._options.robot_health) self.assertEquals(a0.ending_health, self._options.robot_health) self.assertEquals(a0.starting_position, p0) self.assertEquals(a0.ending_position, p0) self.assertEquals(a0.shot_direction, None) self.assertEquals(a0.shot_distance, None) self.assertEquals(a0.radar_direction, None) self.assertEquals(a0.radar_return, None) self.assertEquals(a0.move_direction, None) self.assertEquals(a0.move_distance, None) self.assertEquals(len(a0.damage_dealt), 0) self.assertEquals(len(a0.damage_taken), 0) self.assertEquals(a0.lose_reason, None)
def test_one_space_one_robot(self): world_map = terrain.TerrainMap(' ', '') r = robot_module.Robot(0, world_map) game = master.Master(self._options, [r], world_map, self._history) self.assertEquals(game._robot_data[r].position, position.Position(1, 1))
def test_sneeches(self): self._r0.get_shot = lambda: direction.EAST self._r0.get_move = lambda: direction.EAST self._r0.get_radar = lambda: direction.EAST self._r1.get_shot = lambda: direction.WEST self._r1.get_move = lambda: direction.WEST self._r1.get_radar = lambda: direction.WEST self._game.run() self.assertEquals(len(self._history._rounds), 3) # Check results of round #1; expect both to have moved, radared, and shot # sucessfully, but not conclusively. a0 = self._history._rounds[1]._actions[self._r0] a1 = self._history._rounds[1]._actions[self._r1] self.assertEquals(a0.starting_health, self._options.robot_health) self.assertEquals( a0.ending_health, self._options.robot_health - self._options.shot_damage) self.assertEquals(a0.starting_position, position.Position(1, 1)) self.assertEquals(a0.ending_position, position.Position(2, 1)) self.assertEquals(a0.shot_direction, direction.EAST) self.assertEquals(a0.shot_distance, 3) self.assertEquals(a0.radar_direction, direction.EAST) self.assertEquals( a0.radar_return, robot_module.RadarReturn( direction.EAST, 1, self._options.robot_health - self._options.shot_damage, direction.WEST, 1)) self.assertEquals(a0.move_direction, direction.EAST) self.assertEquals(a0.move_distance, 1) self.assertEquals(len(a0.damage_dealt), 1) self.assertEquals(a0.damage_dealt[0].amount, self._options.shot_damage) self.assertEquals(a0.damage_dealt[0].description, 'Robot(#0) shot Robot(#1)') self.assertEquals(len(a0.damage_taken), 1) self.assertEquals(a0.damage_taken[0].amount, self._options.shot_damage) self.assertEquals(a0.damage_taken[0].description, 'Robot(#1) shot Robot(#0)') self.assertEquals(a0.lose_reason, None) self.assertEquals(a1.starting_health, self._options.robot_health) self.assertEquals( a1.ending_health, self._options.robot_health - self._options.shot_damage) self.assertEquals(a1.starting_position, position.Position(4, 1)) self.assertEquals(a1.ending_position, position.Position(3, 1)) self.assertEquals(a1.shot_direction, direction.WEST) self.assertEquals(a1.shot_distance, 3) self.assertEquals(a1.radar_direction, direction.WEST) self.assertEquals( a1.radar_return, robot_module.RadarReturn( direction.WEST, 1, self._options.robot_health - self._options.shot_damage, direction.EAST, 1)) self.assertEquals(a1.move_direction, direction.WEST) self.assertEquals(a1.move_distance, 1) self.assertEquals(len(a1.damage_dealt), 1) self.assertEquals(a1.damage_dealt[0].amount, self._options.shot_damage) self.assertEquals(a1.damage_dealt[0].description, 'Robot(#1) shot Robot(#0)') self.assertEquals(len(a1.damage_taken), 1) self.assertEquals(a1.damage_taken[0].amount, self._options.shot_damage) self.assertEquals(a1.damage_taken[0].description, 'Robot(#0) shot Robot(#1)') self.assertEquals(a1.lose_reason, None) # Check results of round #2; expect both to have attempted to move but # failed (collided), shot, and radared. Both should be dead due to # collision. a0 = self._history._rounds[2]._actions[self._r0] a1 = self._history._rounds[2]._actions[self._r1] self.assertEquals( a0.starting_health, self._options.robot_health - self._options.shot_damage) self.assertEquals(a0.ending_health, 0) self.assertEquals(a0.starting_position, position.Position(2, 1)) self.assertEquals(a0.ending_position, position.Position(2, 1)) self.assertEquals(a0.shot_direction, direction.EAST) self.assertEquals(a0.shot_distance, 1) self.assertEquals(a0.radar_direction, None) # died before radar sent. self.assertEquals(a0.radar_return, None) # died before radar sent. self.assertEquals(a0.move_direction, direction.EAST) self.assertEquals(a0.move_distance, 0) self.assertEquals(len(a0.damage_dealt), 3) self.assertEquals(a0.damage_dealt[0].amount, self._options.shot_damage) self.assertEquals(a0.damage_dealt[0].description, 'Robot(#0) shot Robot(#1)') self.assertEquals(a0.damage_dealt[1].amount, self._options.collision_damage) self.assertEquals(a0.damage_dealt[1].description, 'Robot(#1) drove into Robot(#0)') self.assertEquals(a0.damage_dealt[2].amount, self._options.collision_damage) self.assertEquals(a0.damage_dealt[2].description, 'Robot(#0) drove into Robot(#1)') self.assertEquals(len(a0.damage_taken), 3) self.assertEquals(a0.damage_taken[0].amount, self._options.shot_damage) self.assertEquals(a0.damage_taken[0].description, 'Robot(#1) shot Robot(#0)') self.assertEquals(a0.damage_taken[1].amount, self._options.collision_damage) self.assertEquals(a0.damage_taken[1].description, 'Robot(#1) drove into Robot(#0)') self.assertEquals(a0.damage_taken[2].amount, self._options.collision_damage) self.assertEquals(a0.damage_taken[2].description, 'Robot(#0) drove into Robot(#1)') self.assertEquals(a0.lose_reason, 'Robot(#0) drove into Robot(#1)') self.assertEquals( a1.starting_health, self._options.robot_health - self._options.shot_damage) self.assertEquals(a1.ending_health, 0) self.assertEquals(a1.starting_position, position.Position(3, 1)) self.assertEquals(a1.ending_position, position.Position(3, 1)) self.assertEquals(a1.shot_direction, direction.WEST) self.assertEquals(a1.shot_distance, 1) self.assertEquals(a1.radar_direction, None) # died before radar sent. self.assertEquals(a1.radar_return, None) # died before radar sent. self.assertEquals(a1.move_direction, direction.WEST) self.assertEquals(a1.move_distance, 0) self.assertEquals(len(a1.damage_dealt), 3) self.assertEquals(a1.damage_dealt[0].amount, self._options.shot_damage) self.assertEquals(a1.damage_dealt[0].description, 'Robot(#1) shot Robot(#0)') self.assertEquals(a1.damage_dealt[1].amount, self._options.collision_damage) self.assertEquals(a1.damage_dealt[1].description, 'Robot(#1) drove into Robot(#0)') self.assertEquals(a1.damage_dealt[2].amount, self._options.collision_damage) self.assertEquals(a1.damage_dealt[2].description, 'Robot(#0) drove into Robot(#1)') self.assertEquals(len(a1.damage_taken), 3) self.assertEquals(a1.damage_taken[0].amount, self._options.shot_damage) self.assertEquals(a1.damage_taken[0].description, 'Robot(#0) shot Robot(#1)') self.assertEquals(a1.damage_taken[1].amount, self._options.collision_damage) self.assertEquals(a1.damage_taken[1].description, 'Robot(#1) drove into Robot(#0)') self.assertEquals(a1.damage_taken[2].amount, self._options.collision_damage) self.assertEquals(a1.damage_taken[2].description, 'Robot(#0) drove into Robot(#1)') self.assertEquals(a1.lose_reason, 'Robot(#0) drove into Robot(#1)')