def test_position_is_valid_to_go(self): nature = MissionType.POSITION positions = [(1 * TILE_SIZE, 0 * TILE_SIZE), (3 * TILE_SIZE, 2 * TILE_SIZE)] mission = Mission(True, nature, positions, 'Test mission', 0, 0) self.assertTrue(mission.pos_is_valid(positions[0])) self.assertTrue(mission.pos_is_valid(positions[1])) self.assertFalse(mission.pos_is_valid(random_position()))
def test_update_state_position_objective(self): nature = rd.choice([MissionType.POSITION, MissionType.TOUCH_POSITION]) position = [random_position()] players = [random_player_entity(), random_player_entity()] mission = Mission(True, nature, position, 'Test mission', 2) self.assertTrue(mission.update_state(players[0])) self.assertFalse(mission.ended) self.assertEqual(players[0], mission.succeeded_chars[0]) self.assertTrue(mission.update_state(players[1])) self.assertTrue(mission.ended) self.assertEqual(players, mission.succeeded_chars)
def test_position_is_valid_to_touch(self): nature = MissionType.TOUCH_POSITION positions = [(1 * TILE_SIZE, 0 * TILE_SIZE), (3 * TILE_SIZE, 2 * TILE_SIZE)] mission = Mission(True, nature, positions, 'Test mission', 0, 0) self.assertFalse(mission.pos_is_valid(positions[0])) self.assertFalse(mission.pos_is_valid(positions[1])) first_position = positions[0] self.assertTrue( mission.pos_is_valid( (first_position[0] + TILE_SIZE, first_position[1]))) self.assertTrue( mission.pos_is_valid( (first_position[0], first_position[1] + TILE_SIZE))) self.assertTrue( mission.pos_is_valid( (first_position[0] - TILE_SIZE, first_position[1]))) self.assertTrue( mission.pos_is_valid( (first_position[0], first_position[1] - TILE_SIZE))) second_position = positions[1] self.assertTrue( mission.pos_is_valid( (second_position[0] + TILE_SIZE, second_position[1])))
def test_update_state_objective_with_turn_limit(self): nature = MissionType.TURN_LIMIT turn_limit = rd.randint(1, 10) mission = Mission(True, nature, [], 'Test mission', 0, turn_limit=turn_limit) self.assertTrue(mission.update_state(turns=0)) self.assertTrue(mission.ended) self.assertTrue(mission.update_state(turns=turn_limit)) self.assertTrue(mission.ended) self.assertTrue(mission.update_state(turns=turn_limit + 1)) self.assertFalse(mission.ended)
def load_mission(mission_xml, is_main, nb_players, gap_x, gap_y): nature = MissionType[mission_xml.find('type').text] desc = mission_xml.find('description').text.strip() positions = [] if nature is MissionType.POSITION or nature is MissionType.TOUCH_POSITION: for coords in mission_xml.findall('position'): x = int(coords.find('x').text) * TILE_SIZE + gap_x y = int(coords.find('y').text) * TILE_SIZE + gap_y positions.append((x, y)) min_players = mission_xml.find('nb_players') if min_players is not None: min_players = int(min_players.text.strip()) else: min_players = nb_players if is_main: gold_reward = 0 items_reward = [] else: # If mission is not main, a reward is associated gold_reward = mission_xml.find('reward/gold') if gold_reward is not None: gold_reward = int(gold_reward.text.strip()) items_reward = mission_xml.findall('reward/item') if items_reward is not None: items_reward = [parse_item_file(item) for item in items_reward] turn_limit = mission_xml.find('turns') if turn_limit is not None: turn_limit = int(turn_limit.text.strip()) return Mission(is_main, nature, positions, desc, min_players, turn_limit, gold_reward, items_reward)
def test_update_state_kill_everybody_objective(self): nature = MissionType.KILL_EVERYBODY mission = Mission(True, nature, [], 'Test mission', 0) foes = random_entities(Foe) entities = {'foes': foes} self.assertTrue(mission.update_state(entities=entities)) self.assertFalse(mission.ended) foes.pop() self.assertTrue(mission.update_state(entities=entities)) self.assertFalse(mission.ended) while len(foes) != 0: foes.pop() self.assertTrue(mission.update_state(entities=entities)) self.assertTrue(mission.ended)
def test_init_mision(self): is_main = True nature = MissionType.POSITION positions = [(1 * TILE_SIZE, 2 * TILE_SIZE), (3 * TILE_SIZE, 4 * TILE_SIZE)] description = 'Test main mission' nb_players = 2 turn_limit = 10 gold_reward = 200 items_reward = [random_item()] mission = Mission(is_main, nature, positions, description, nb_players, turn_limit, gold_reward, items_reward) self.assertEqual(is_main, mission.main) self.assertEqual(nature, mission.type) self.assertEqual(positions, mission.positions) self.assertEqual(description, mission.desc) self.assertFalse(mission.ended) self.assertEqual(turn_limit, mission.turn_limit) self.assertEqual(gold_reward, mission.gold) self.assertEqual(items_reward, mission.items) self.assertEqual(nb_players, mission.min_chars) self.assertEqual(0, len(mission.succeeded_chars))