def reset(self, lives: int, settings: dict, score: int):
        self._settings = settings
        self._arena = Arena((ARENA_W, ARENA_H))
        self._arena.add_to_score(score)
        Mountain(self._arena, (MOUNTAIN_X, MOUNTAIN_Y))
        Hill(self._arena, (HILL_X, HILL_Y), self._settings['level'])
        self._ground = Ground(self._arena, (GROUND_X, GROUND_Y), self._settings['difficulty'])
        self._start_time = time()
        self.bg_list = [Mountain, Hill, Ground]
        self._time_to_generate_alien = time()
        self._hero = []
        self._hero.append(Rover(self._arena, (ROVER_X, ROVER_Y), 1))
        if self._settings['mode'] == 'co-op':
            self._hero.append(Rover(self._arena, (ROVER_2_X, ROVER_2_Y), 2))

        self._start = time()
        self._playtime = 80
        self.hero_lives = lives
        self._aliens = []
        self._obstacles = []
        self._type_obstacles = [Rock, Hole]
        self._rand_x_bomb = 0
        self._time_to_generate_bomber = time()
        self._bomb_ready = False
        self._second = time()

        if self._settings['difficulty'] == 'Easy':
            self.OBS_RANGE = 400
        elif self._settings['difficulty'] == 'Normal':
            self.OBS_RANGE = 300
        else:
            self.OBS_RANGE = 200
Ejemplo n.º 2
0
    def test_rover_position_greater_than_plateau_should_raise_exception(self):
        rover = Rover(coord=(4, 0, 'E'))
        plateau = Plateau(upper_right=(3, 3), rovers=[rover])
        self.assertRaises(ValueError, plateau.rover_explore)

        rover = Rover(coord=(3, -1, 'E'))
        plateau = Plateau(upper_right=(3, 3), rovers=[rover])
        self.assertRaises(ValueError, plateau.rover_explore)
Ejemplo n.º 3
0
    def setUp(self):

        self.rover = Rover(coord=(2, 2, 'W'))
        self.rover1 = Rover(coord=(1, 2, 'N'), instructions='LMLMLMLMM')
        self.rover2 = Rover(coord=(3, 3, 'E'), instructions='MMRMMRMRRM')
        self.expected_output_rover1 = '1 3 N'
        self.expected_output_rover2 = '5 1 E'
        self.expected_output = '{}\n{}\n'.format(self.expected_output_rover1,
                                                 self.expected_output_rover2)
Ejemplo n.º 4
0
def main():
    plateau = Plateau(5, 5)

    rover = Rover(1, 2, "N", plateau)
    rover.run("LMLMLMLMM")
    print(rover.position)
    rover = Rover(3, 3, "E", plateau)

    rover.run("MMRMMRMRRM")
    print(rover.position)
Ejemplo n.º 5
0
def test_move_world():
    rovers = [
        Rover(Position(x=1, y=2, heading='N'), Plateau(max_x=5, max_y=5)),
        Rover(Position(x=3, y=3, heading='E'), Plateau(max_x=5, max_y=5))
    ]
    world = World(Plateau(5, 5))
    world.rovers = rovers
    world.instructions = ["LMLMLMLMM", "MMRMMRMRRM"]
    world.follow_instructions()
    assert world.rovers[0].position == Position(1, 3, 'N')
    assert world.rovers[1].position == Position(5, 1, 'E')
Ejemplo n.º 6
0
    def __init__(self):
        # Rover instances
        self.curiosity = Rover('curiosity')
        self.opportunity = Rover('opportunity')
        self.spirit = Rover('spirit')

        # Flags
        self.main_flag = True
        self.rover_flag = True

        self.choice = 0
Ejemplo n.º 7
0
    def test_place_rover(self):
        mars = Mars("5 5")

        rover = Rover("1 1 N")
        mars.place_rover(rover)

        self.assertEqual([rover], mars.get_rovers())

        rover2 = Rover("6 1 N")
        mars.place_rover(rover2)

        self.assertEqual([rover], mars.get_rovers())
Ejemplo n.º 8
0
    def test_get_rover_on_position(self):

        planet = Planet(5, 5)
        rover = Rover(2, 1, 'N', planet)
        planet.add_rover(rover)
        planet.update_grid()

        self.assertIsInstance(planet.get_rover_on_position(2, 1), Rover)
        self.assertEqual(planet.get_rover_on_position(2, 1), rover)

        rover2 = Rover(3, 5, 'S', planet)
        planet.add_rover(rover2)
        planet.update_grid()

        self.assertEqual(planet.get_rover_on_position(3, 5), rover2)
Ejemplo n.º 9
0
Archivo: main.py Proyecto: xfyer/Rover
def main(arguments: argparse.Namespace):
    # Set Logging Level
    logging.Logger.setLevel(system_helpers.logger,
                            arguments.logLevel)  # DoltPy's Log Level
    logger.setLevel(arguments.logLevel)  # This Script's Log Level

    rover: Rover = Rover(threadID=1,
                         name="Rover",
                         requested_wait_time=arguments.wait * 60,
                         reply=arguments.reply,
                         threadLock=threadLock)
    archiver: Archiver = Archiver(threadID=2,
                                  name="Archiver",
                                  requested_wait_time=arguments.wait * 60,
                                  commit=arguments.commit,
                                  threadLock=threadLock)
    server: WebServer = WebServer(
        threadID=3, name="Analysis Server"
    )  # https://www.tutorialspoint.com/python3/python_multithreading.htm

    # Start Archiver
    if arguments.archive:
        archiver.start()

    # Start Rover
    if arguments.rover:
        rover.start()

    # Start Webserver
    if arguments.server:
        server.start()
Ejemplo n.º 10
0
def test_rover_multiple_commands_ending_position():
    rover = Rover()
    rover.commands('mf', 'mf', 'rr', 'mb', 'rr', 'mf', 'rl')
    assert rover.x == -1
    assert rover.y == 1
    assert rover.orientation == 'e'
    print(rover)
Ejemplo n.º 11
0
    def test_add_rover(self):

        planet = Planet(2, 2)
        rover = Rover(1, 2, 'N', planet)
        self.assertEqual(len(planet.rovers), 0)
        planet.add_rover(rover)
        self.assertEqual(len(planet.rovers), 1)
Ejemplo n.º 12
0
    def test_rover_move_when_it_can_not(self):
        rover = Rover(0, 0, 'S', self.plateau)
        rover.move()

        self.assertEqual(rover.x, 0)
        self.assertEqual(rover.y, 0)
        self.assertEqual(rover.orientation, ORIENTATION_MAP['S'])
Ejemplo n.º 13
0
def test_rover_can_go_forward_twice_going_north():
    rov = Rover(
        pos=Vector(x=0, y=0), planet_size=Vector(x=10, y=10), dir=Direction.NORTH
    )
    rov.forward()
    rov.forward()
    assert rov.pos == Vector(x=0, y=2)
Ejemplo n.º 14
0
 def test_rover_init(self):
     r = Rover('Rover20', (0, 0), 'W')
     self.assertEqual(r.x, 0, "init: x value wrong")
     self.assertEqual(r.y, 0, "init: y value wrong")
     self.assertEqual(r.name, 'Rover20', "init: name value wrong")
     self.assertEqual(r.facing_diection, 'W',
                      "init: facing_diection value wrong")
Ejemplo n.º 15
0
 def test_given_start_position_33_and_4x4_map(self, _, direction, command,
                                              expectedX, expectedY):
     map = PlanetMap(4, 4)
     rover = Rover(map, 3, 3, direction)
     rover.move([command])
     self.assertEqual(rover.get_x(), expectedX)
     self.assertEqual(rover.get_y(), expectedY)
Ejemplo n.º 16
0
def test_if_rover_was_correctly_moved_south(Rover, Plateau):
    plat = Plateau(5, 5)
    rover = Rover(1, 3, 'S', plat)
    rover.change_position('M')
    assert rover.position_y == 2
    rover.change_position('M')
    assert rover.position_y == 1
Ejemplo n.º 17
0
def test_if_rover_was_correctly_moved_east(Rover, Plateau):
    plat = Plateau(5, 5)
    rover = Rover(3, 3, 'E', plat)
    rover.change_position('M')
    assert rover.position_x == 4
    rover.change_position('M')
    assert rover.position_x == 5
Ejemplo n.º 18
0
def test_if_rover_was_correctly_moved_north(Rover, Plateau):
    plat = Plateau(5, 5)
    rover = Rover(1, 2, 'N', plat)
    rover.change_position('M')
    assert rover.position_y == 3
    rover.change_position('M')
    assert rover.position_y == 4
Ejemplo n.º 19
0
def test_if_face_was_correctly_changed_to_left(Rover, Plateau):
    plat = Plateau(5, 5)
    rover = Rover(1, 2, 'N', plat)
    rover.change_position('L')
    assert rover.face_direction == 'W'
    rover.change_position('L')
    assert rover.face_direction == 'S'
Ejemplo n.º 20
0
def test_rover_invalid_command_doesnt_move():
    x, y, direction = 4, 2, "EAST"
    rover = Rover(position=(x, y, direction))
    with pytest.raises(ValueError):
        rover.send_command("FTF")

    assert rover.position == (x, y, direction)
Ejemplo n.º 21
0
 def test_receives_position_direction_and_map(self):
     map = PlanetMap(10, 10)
     rover = Rover(map, 0, 0, Direction.NORTH)
     self.assertIsNotNone(rover)
     self.assertEqual(rover.get_x(), 0)
     self.assertEqual(rover.get_y(), 0)
     self.assertEqual(rover.get_direction().value, 'N')
Ejemplo n.º 22
0
def test_interview(current_position, instructions, new_position):
    rover = Rover(current_position, Grid(5, 5))
    for instruction in list(instructions):
        print(rover)
        if instruction == 'L' and rover.direction == 'N':
            rover = rover.process_command(north_left_turn)
        elif instruction == 'R' and rover.direction == 'N':
            rover = rover.process_command(north_right_turn)
        elif instruction == 'L' and rover.direction == 'E':
            rover = rover.process_command(east_left_turn)
        elif instruction == 'R' and rover.direction == 'E':
            rover = rover.process_command(east_right_turn)
        elif instruction == 'L' and rover.direction == 'S':
            rover = rover.process_command(south_left_turn)
        elif instruction == 'R' and rover.direction == 'S':
            rover = rover.process_command(south_right_turn)
        elif instruction == 'L' and rover.direction == 'W':
            rover = rover.process_command(west_left_turn)
        elif instruction == 'R' and rover.direction == 'W':
            rover = rover.process_command(west_right_turn)
        elif instruction == 'M' and rover.direction == 'N':
            rover = rover.process_command(move_north)
        elif instruction == 'M' and rover.direction == 'E':
            rover = rover.process_command(move_east)
        elif instruction == 'M' and rover.direction == 'S':
            rover = rover.process_command(move_south)
        elif instruction == 'M' and rover.direction == 'W':
            rover = rover.process_command(move_west)

    assert str(rover) == new_position
    assert repr(rover) == f'Rover: <{new_position}>'
Ejemplo n.º 23
0
 def test_rotation(self, _, originalDirection, command, expectedDirection):
     map = PlanetMap(10, 10)
     rover = Rover(map, 0, 0, originalDirection)
     rover.move([command])
     self.assertEqual(rover.get_y(), 0)
     self.assertEqual(rover.get_x(), 0)
     self.assertEqual(rover.get_direction(), expectedDirection)
Ejemplo n.º 24
0
    def create(self, plateauSize, roverPosition, roverDirection):
        # Cria o plateau e o rover, e retorna o rover criado
        plateau = Plateau(plateauSize[0], plateauSize[1])
        rover = Rover(roverPosition[0], roverPosition[1], roverDirection,
                      plateau)

        return rover
Ejemplo n.º 25
0
def test_get_instruction_error():
    """Tests calling inputting invalid coordinates to get_location()
    """
    instr_strings =["l", "m", "r", "La", "L M", "M R", " LM ", "aM", "q    R"]
    plateau = MartianPlateau("1000 1000")
    rvr = Rover("100 100 N", plateau)

    for instr in instr_strings:
        try:
            rvr = Rover("100 100 N", plateau)
            rvr.instruct(instr)
        except ImproperInstruction:
            assert True
        else:
            print instr
            assert False
Ejemplo n.º 26
0
    def test_upper_bounds(self):
        rover = Rover("2 2 N", "2 2")
        rover.send_instructions("M")
        self.assertEqual((2, 2), rover.get_position())

        rover.send_instructions("RM")
        self.assertEqual((2, 2), rover.get_position())
Ejemplo n.º 27
0
    def land_rover(self, x, y, heading, name):
        """
        Land rover on a position on plateau.
        Conditions:
            1) The rover can not land out of plateau grid.

            2) The rover can not land on a position that
            there is other rover positioned (collision).

        :param x: (int) x axis coordinate on plateau grid
        :param y: (int) y axis coordinate on plateau grid
        :param name: (str) rover identifier name ex: rover1
        :return:
        """
        rover = Rover()

        try:
            if self.plateau:
                rover.land(x_pos=x, y_pos=y, heading=heading)

                self.plateau.set_pos_matrix(x, y)
                self.dict_rover[name] = rover
            else:
                raise ValueError('Plateau is required before landing')
        except (CollisionException, ValueError) as ex:
            rover.x_pos = None
            rover.y_pos = None

            raise ex
Ejemplo n.º 28
0
    def process_rovers(self, instructions: list) -> list:
        """
        Read file and load the instructions
        """
        rovers = []

        line_number = 1

        boundaries = instructions[0].split(' ')

        #interate through all rover instructions and apply it to the coordinates
        while line_number < len(instructions):

            start_point = instructions[line_number].split(' ')

            instruction = instructions[line_number + 1].rstrip()

            line_number += 2

            rover = Rover(int(boundaries[0].rstrip()),
                          int(boundaries[1].rstrip()),
                          int(start_point[0].rstrip()),
                          int(start_point[1].rstrip()),
                          start_point[2].rstrip())

            rover.move_to_target(instruction)

            rovers.append(rover.to_dict())
        return rovers
Ejemplo n.º 29
0
    def __init__(self, input_txt_path):
        with open(input_txt_path) as f:
            lines = f.read().splitlines()
            if not len(lines) or (len(lines) - 1) % 2 != 0:
                raise ValueError('No input data')

            if (re.sub(PLATEAU_LIMITS, '', lines[0])):
                raise ValueError('Plateau limits data is not correct')

            self.pl_limits = {
                'x': int(lines[0].split(' ')[0]),
                'y': int(lines[0].split(' ')[1])
            }

            self.rovers = list()

            i = 1
            while (i < len(lines)):
                if re.sub(POSITION_PATTERN, '', lines[i]):
                    raise ValueError('Rover position data is not correct')
                if re.sub(COMMANDS_PATTERN, '', lines[i + 1]):
                    raise ValueError('Rover commands data is not correct')

                pos_ar = lines[i].split(' ')
                init_pos = (pos_ar[0], pos_ar[1], pos_ar[2])
                r = Rover(init_pos, lines[i + 1], self)
                self.attach_rover(r)
                i += 2
Ejemplo n.º 30
0
 def test_rover_explore_with_only_move(self):
     land = LandGrid(5, 5)
     rover = Rover(land)
     expected_position = '1 4 N'
     rover.explore(1, 2, 'N', 'MM')
     ending_position = rover.get_rover_position()
     self.assertEqual(ending_position, expected_position)