def create_caves(self): random.shuffle(self.cave_names) caves = [cave.Cave(self.cave_names[0])] for name in self.cave_names[1:]: new_cave = cave.Cave(name) eligible_caves = [each_cave for each_cave in caves if each_cave.can_tunnel_to()] old_cave = random.choice(eligible_caves) directions = [direction for direction, each_cave in old_cave.tunnels.items() if each_cave is None] direction = random.choice(directions) old_cave.tunnel_to(direction, new_cave) caves.append(new_cave) return caves
def test_part2_init(self): "Test the Cave object creation from text for part2" # 1. Create Cave object from text myobj = cave.Cave(text=aoc_22.from_text(EXAMPLE_TEXT), part2=True) # 2. Make sure it has the expected values self.assertEqual(myobj.part2, True) self.assertEqual(len(myobj.text), 2) self.assertEqual(myobj.depth, 510) self.assertEqual(myobj.target, 100010) self.assertEqual(myobj.mouth, 0) self.assertEqual(len(myobj.regions), 0) self.assertEqual(myobj.start, 100000000) self.assertEqual(myobj.finish, 100100010) self.assertEqual(myobj.maxrow, 60) self.assertEqual(myobj.maxrow, 60) # 3. Try part one - to build the regions self.assertEqual(myobj.part_one(verbose=False), PART_ONE_RESULT) # 4. What are all the moves from the start self.assertEqual(myobj.valid_tool(myobj.start), True) moves = myobj.determine_moves(myobj.start) self.assertEqual(len(moves), 2) self.assertEqual(moves[0], cave.row_col_tool_to_loc(1, 0, cave.TORCH)) self.assertEqual(moves[1], cave.row_col_tool_to_loc(0, 0, cave.GEAR))
def no_casualities(self, elf_attack=3, verbose=False): # 1. Reset the cave at this elf attack level self.cave = cave.Cave(text=self.text, elf_attack=elf_attack) # 2. How many elves to we start with elf_count = len(self.cave.items['E']) if verbose: print('attack=%d, elves=%d' % (elf_attack, elf_count)); # 3. Loop until an elf death or fighting is done rounds = 0 while elf_count == len(self.cave.items['E']): if self.round(): rounds += 1 if verbose: print('Elves survived round %d' % rounds); else: break # 4. Return True if no elves died if verbose: if elf_count == len(self.cave.items['E']): print('Fight ended after %d complete rounds' % rounds) else: print('An elf died in round %d' % rounds) return elf_count == len(self.cave.items['E'])
def test_part_one(self): "Test part one example of Cave object" # 1. Create Cave object from text myobj = cave.Cave(text=aoc_22.from_text(PART_ONE_TEXT)) # 2. Check the part one result self.assertEqual(myobj.part_one(verbose=False), PART_ONE_RESULT)
def test_part_two(self): "Test part two example of Cave object" # 1. Create Cave object from text myobj = cave.Cave(part2=True, text=aoc_22.from_text(PART_TWO_TEXT)) # 2. Check the part two result self.assertEqual(myobj.part_two(verbose=False), PART_TWO_RESULT)
def test_empty_init(self): "Test the default Cave creation" # 1. Create default Cave object myobj = cave.Cave() # 2. Make sure it has the default values self.assertEqual(myobj.text, None) self.assertEqual(len(myobj.items), 0)
def _new_cave(self): self._cave = cave.Cave() self._num_caves_traversed += 1 self._current_room = self._cave.get_room(1, 1) self._current_orientation = 'east' self._player_holding_gold = False # mark the room visited when you spawn there. All other rooms are walked into # so that gets handled at end-of-turn self._current_room.mark_visited()
def create_caves(self): random.shuffle(self.cave_names) caves = [cave.Cave(self.cave_names[0], "")] for name in self.cave_names[1:]: new_cave = cave.Cave(name, "") # Pick cave from list eligible_caves = [ each_cave for each_cave in caves if each_cave.can_tunnel_to() ] old_cave = random.choice(eligible_caves) # Pick Direction to link it to directions = [ direction for direction, each_cave in old_cave.tunnels.items() if each_cave is None ] direction = random.choice(directions) # Link in new cave old_cave.tunnel_to(direction, new_cave) caves.append(new_cave) return caves
def test_value_init(self): "Test the Node object creation with location and doors" # 1. Create Node object from values mycave = cave.Cave(text=aoc_22.from_text(EXAMPLE_TEXT), part2=True) myobj = path.Node(location=mycave.start, cave=mycave) # 2. Make sure it has the expected values self.assertEqual(myobj.location, 100000000) self.assertEqual(myobj.previous, None) self.assertEqual(myobj.cave, mycave) self.assertEqual(myobj.minutes, 0)
def test(): import cave empty_cave = cave.Cave( "Empty Cave", "A desolate, empty cave, waiting for someone to fill it.") player = Player(empty_cave) print(player.location.name) print(player.location.description) while player.playing: input = player.get_input() result = player.process_input(input) print("\n".join(result))
def part_two(self, verbose=False, limit=0): "Returns the solution for part two" # 1. Determine the elf_attach value elf_attack = self.minimum_elf_attack(verbose=verbose, limit=limit) # 2. Reset the cave self.cave = cave.Cave(text=self.text, elf_attack=elf_attack) # 3. Fight until there is a victor rounds = self.fight(verbose=verbose) # 4. Get the surviving hit points hitpoints = self.hitpoints() # 5. Return the solution for part two return rounds*hitpoints
def test_text_init(self): "Test the Cave object creation from text" # 1. Create Cave object from text myobj = cave.Cave(text=aoc_15.from_text(EXAMPLE_TEXT)) # 2. Make sure it has the expected values self.assertEqual(len(myobj.text), 7) self.assertEqual(len(myobj.items), 3) self.assertEqual(len(myobj.items['#']), 27) self.assertEqual(len(myobj.items['E']), 2) self.assertEqual(len(myobj.items['G']), 4) self.assertEqual(myobj.max_loc(), 606) self.assertEqual(str(myobj), EXAMPLE_TEXT.strip())
def part_two(args, input_lines): "Process part two of the puzzle" # 1. Create the puzzle solver solver = cave.Cave(part2=True, text=input_lines) # 2. Determine the solution for part two solution = solver.part_two(verbose=args.verbose, limit=args.limit) if solution is None: print("There is no solution") else: print("The solution for part two is %s" % (solution)) # 3. Return result return solution is not None
def test_value_init(self): "Test the Path object creation with values" # 1. Create Node object from values mycave = cave.Cave(text=aoc_22.from_text(EXAMPLE_TEXT), part2=True) myobj = path.Path(start=mycave.start, cave=mycave) # 2. Make sure it has the expected values self.assertEqual(myobj.start, 100000000) self.assertEqual(myobj.cave, mycave) self.assertNotEqual(myobj.node, None) self.assertEqual(myobj.node.location, myobj.start) self.assertEqual(myobj.node.cave, mycave) self.assertTrue(len(myobj.nodes), 4) self.assertEqual(len(myobj.queue), 0)
def test_value_init(self): "Test the Node object creation with location and cave" # 1. Create Node object from values mycave = cave.Cave(text=aoc_15.from_text(EXAMPLE_TEXT)) myobj = path.Node(location=102, cave=mycave) # 2. Make sure it has the expected values self.assertEqual(myobj.location, 102) self.assertEqual(myobj.previous, None) self.assertEqual(myobj.cave, mycave) self.assertEqual(myobj.steps, 0) self.assertEqual(myobj.distance, None) self.assertEqual(myobj.shortest, []) self.assertEqual(myobj.adjacent, [None, 101, 103, 202])
def test_input_init(self): "Test the Cave object creation from text" # 1. Create Cave object from text myobj = cave.Cave(text=aoc_22.from_text(INPUT_TEXT)) # 2. Make sure it has the expected values self.assertEqual(myobj.part2, False) self.assertEqual(len(myobj.text), 2) self.assertEqual(myobj.depth, 4002) self.assertEqual(myobj.target, 7460005) self.assertEqual(myobj.mouth, 0) self.assertEqual(len(myobj.regions), 0) # 3. Try part one self.assertEqual(myobj.part_one(verbose=False), INPUT_ONE_RESULT)
def test_value_init(self): "Test the Path object creation with values" # 1. Create Node object from values mycave = cave.Cave(text=aoc_15.from_text(EXAMPLE_TEXT)) myobj = path.Path(source=102, destination=104, cave=mycave) # 2. Make sure it has the expected values self.assertEqual(myobj.source, 102) self.assertEqual(myobj.destination, 104) self.assertEqual(myobj.cave, mycave) self.assertNotEqual(myobj.node, None) self.assertEqual(myobj.node.location, myobj.source) self.assertEqual(myobj.node.cave, mycave) self.assertEqual(myobj.distance, 2) self.assertTrue(len(myobj.nodes) > 0) self.assertEqual(len(myobj.queue), 0)
def test_empty_init(self): "Test the default Cave creation" # 1. Create default Cave object myobj = cave.Cave() # 2. Make sure it has the default values self.assertEqual(myobj.part2, False) self.assertEqual(myobj.text, None) self.assertEqual(myobj.depth, None) self.assertEqual(myobj.target, None) self.assertEqual(myobj.mouth, None) self.assertEqual(myobj.regions, None) self.assertEqual(myobj.start, None) self.assertEqual(myobj.finish, None) self.assertEqual(myobj.maxrow, None) self.assertEqual(myobj.maxcol, None)
def test_text_init(self): "Test the Cave object creation from text" # 1. Create Cave object from text myobj = cave.Cave(text=aoc_22.from_text(EXAMPLE_TEXT)) # 2. Make sure it has the expected values self.assertEqual(myobj.part2, False) self.assertEqual(len(myobj.text), 2) self.assertEqual(myobj.depth, 510) self.assertEqual(myobj.target, 100010) self.assertEqual(myobj.mouth, 0) self.assertEqual(len(myobj.regions), 0) self.assertEqual(myobj.start, None) self.assertEqual(myobj.finish, None) self.assertEqual(myobj.maxrow, None) self.assertEqual(myobj.maxcol, None) # 3. Check a couple of regions self.assertEqual(myobj.determine_geologic_index(0), 0) self.assertEqual(myobj.determine_erosion_level(0), 510) self.assertEqual(myobj.determine_region_type(0), cave.ROCKY_TYPE) self.assertEqual(myobj.determine_geologic_index(1), 16807) self.assertEqual(myobj.determine_erosion_level(1), 17317) self.assertEqual(myobj.determine_region_type(1), cave.WET_TYPE) self.assertEqual(myobj.determine_geologic_index(cave.ROW_MULT), 48271) self.assertEqual(myobj.determine_erosion_level(cave.ROW_MULT), 8415) self.assertEqual(myobj.determine_region_type(cave.ROW_MULT), cave.ROCKY_TYPE) self.assertEqual(myobj.determine_geologic_index(cave.ROW_MULT + 1), 145722555) self.assertEqual(myobj.determine_erosion_level(cave.ROW_MULT + 1), 1805) self.assertEqual(myobj.determine_region_type(cave.ROW_MULT + 1), cave.NARROW_TYPE) self.assertEqual(myobj.determine_geologic_index(myobj.target), 0) self.assertEqual(myobj.determine_erosion_level(myobj.target), 510) self.assertEqual(myobj.determine_region_type(myobj.target), cave.ROCKY_TYPE)
if player_present: return "attack " + player_present[0].name if random.choice((0, 1)): direction = random.choice(self.location.exits()) # print "Moving", direction return "go " + direction else: return "" # actions = ['look', 'get', 'attack'] def look(self, player, noun): return [self.name, self.description] def get(self, player, noun): return ["The " + self.name + " growls at you."] def send_results(self): pass if __name__ == '__main__': import cave cave1 = cave.Cave('Empty cave') orc = Monster(cave1, 'orc', 'A generic dungeon monster') print(orc.actions) print(orc.update_debug()) print(orc.find_handler('go', 'north')) input("Hit enter to continue...")
def __init__(self, text=None, part2=False, elf_attack=3): # 1. Set the initial values self.part2 = part2 self.text = text self.cave = cave.Cave(text=text, elf_attack=elf_attack)
""" Use this module to define the caves available in the game, or to create new ones. """ import cave as cave from math import pi ##### CAVE0 cave0 = cave.Cave('assets/cave0.png', 'assets/cave0_textura.png', 'cave0') cave0.episode_length = 1058 # [3300 - 125 (posição do centro do carro + largura a partir do centro) / 3 (velocidade do mapa de locomoção)], ou seja, é a quantidade de frames maximo que passa do inicio ate o fim do mapa cave0.sub1_position = (100, 300) cave0.sub2_position = (100, 90) cave0.angle_of_subs = 2 * pi cave0.initial_oxygen = 400 ######### #### CAVE1 cave1 = cave.Cave('assets/cave1.png', 'assets/cave1_textura.png', 'cave1') cave1.episode_length = 1058 # [3300 - 125 (posição do centro do carro + largura a partir do centro) / 3 (velocidade do mapa de locomoção)], ou seja, é a quantidade de frames maximo que passa do inicio ate o fim do mapa cave1.sub1_position = (100, 300) cave1.sub2_position = (100, 90) cave1.angle_of_subs = 2 * pi cave1.initial_oxygen = 400 ######### ##### CAVE2
parts.append("") # blank noun verb = parts[0] noun = ' '.join(parts[1:]) handler = self.find_handler(verb, noun) if handler is None: return [input + "? I don't know how to do that!"] if '__call__' not in dir(handler): return handler return handler(self, noun) if __name__ == '__main__': import cave empty_cave = cave.Cave( "Empty Cave", "A desolate, empty cave, waiting for someone to fill it.") import item sword = item.Item("sword", "A pointy sword.", empty_cave) coin = item.Item("coin", "A shiny gold coin. " "Your first piece of treasure!", empty_cave) player = Player(empty_cave) print player.location.name print player.location.description while player.playing: input = player.get_input() result = player.process_input(input) print "\n".join(result) """
# testcave.py import cave my_cave = cave.Cave() my_cave.print_cave() room11 = my_cave.get_room(1,1) room44 = my_cave.get_room(4,4) room24 = my_cave.get_room(2,4) room32 = my_cave.get_room(3,2)