Ejemplo n.º 1
0
 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
Ejemplo n.º 2
0
    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))
Ejemplo n.º 3
0
    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'])
Ejemplo n.º 4
0
    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)
Ejemplo n.º 5
0
    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)
Ejemplo n.º 6
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.text, None)
        self.assertEqual(len(myobj.items), 0)
Ejemplo n.º 7
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()
Ejemplo n.º 8
0
 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
Ejemplo n.º 9
0
    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)
Ejemplo n.º 10
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))
Ejemplo n.º 11
0
    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
Ejemplo n.º 12
0
    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())
Ejemplo n.º 13
0
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
Ejemplo n.º 14
0
    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)
Ejemplo n.º 15
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])
Ejemplo n.º 16
0
    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)
Ejemplo n.º 17
0
    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)
Ejemplo n.º 18
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)
Ejemplo n.º 19
0
    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)
Ejemplo n.º 20
0
        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...")
Ejemplo n.º 21
0
    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)
Ejemplo n.º 22
0
"""
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
Ejemplo n.º 23
0
            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)
"""
Ejemplo n.º 24
0
# 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)