Beispiel #1
0
    def __init__(self, text=None, part2=False):

        # 1. Set the initial values
        self.part2 = part2
        self.text = text
        self.lift = elevator.Elevator(part2=part2)
        self.floors = []
        self.items = []

        # 2. Process text (if any)
        if text is not None and len(text) > 0:

            # 3. Loop for all the text
            for line in self.text:

                # 4. Process elevator of floor
                if line.startswith("The elevator"):
                    self.lift = elevator.Elevator(text=line, part2=self.part2)
                else:
                    flr = floor.Floor(text=line, part2=self.part2)
                    self.floors.append(flr)
                    self.items.extend(flr.items)

            # 5. put the items in alphabetic order
            self.items.sort()
Beispiel #2
0
    def test_multiple_elevators_basic(self):
        ''' Test 2 elevators and make sure it chooses the right one '''
        LEVELS = "G 1 2 3 4 5 6 7 8 9".split()
        elevator1 = elevator.Elevator(LEVELS)
        elevator2 = elevator.Elevator(LEVELS)

        controller = MultipleElevatorController([elevator1, elevator2])

        self.assertEqual(elevator1.direction, ElevatorDirection.UP)
        self.assertEqual(elevator1.current_level, 0)
        self.assertEqual(elevator2.direction, ElevatorDirection.UP)
        self.assertEqual(elevator2.current_level, 0)

        # Let's move elevator1 to level 8 so they are far away
        elevator1.select_level(8)
        while next(elevator1.generate_commands(), None):
            elevator1.step_forward()

        self.assertEqual(elevator1.current_level, 8)

        # Now elevator1 has reached level 8
        # So let's summon an elevator to go to level 2
        # it should pick elevator2
        self.assertEqual(controller.call_elevator(2, ElevatorDirection.UP),
                         elevator2)
Beispiel #3
0
def main():

    # lists of floors must be ordered from lowest to highest floor
    # names must be unique
    floors = ('SB', 'B', 'L', '2', '3', '4', '5', '6', '7', '8', '9', '10')

    # print(floors)

    elev = elevator.Elevator(floors, floor="L")

    btns = {
        f + ",U": button.CallButton(f, elev, direc=Direction.UP)
        for f in floors
    }
    btns.update({
        f + ",D": button.CallButton(f, elev, direc=Direction.DOWN)
        for f in floors
    })

    actions = ["3,D", "2,D", "6,U", "2,U"]

    for b in actions:
        btns[b].press()

    elev.start()
Beispiel #4
0
    def test_elevator_same_direction_out_of_sequence(self):
        ''' Test multiple people select floors in
        same direction out of sequence '''
        elevator1 = elevator.Elevator("G 1 2 3 4".split())
        self.assertEqual(elevator1.door_status, ElevatorDoorStatus.CLOSED)
        self.assertEqual(elevator1.status, ElevatorStatus.IDLE)
        self.assertEqual(elevator1.current_level, 0)
        self.assertEqual(elevator1.direction, ElevatorDirection.UP)

        elevator1.select_level(4)
        elevator1.select_level(3)
        elevator1.select_level(2)
        elevator1.select_level(1)
        # this is our current level, should have no affect
        elevator1.select_level(0)
        self.assertEqual(
            list(elevator1.generate_commands()),
            [
                ElevatorCommand.UP,  # go to level 1
                ElevatorCommand.OPEN_DOOR,
                ElevatorCommand.CLOSE_DOOR,
                ElevatorCommand.UP,  # go to level 2
                ElevatorCommand.OPEN_DOOR,
                ElevatorCommand.CLOSE_DOOR,
                ElevatorCommand.UP,  # go to level 3
                ElevatorCommand.OPEN_DOOR,
                ElevatorCommand.CLOSE_DOOR,
                ElevatorCommand.UP,  # go to level 4
                ElevatorCommand.OPEN_DOOR,
                ElevatorCommand.CLOSE_DOOR,
            ],
        )
Beispiel #5
0
 def test_elevator_go_below_ground_floor(self):
     '''
     If ground floor is the lowest we cannot go lower
     Make sure it raises appropriate ElevatorOutOfBoundsException
     '''
     elevator1 = elevator.Elevator("G 1 2 3 4".split())
     with self.assertRaises(ElevatorOutOfBoundsException):
         elevator1.select_level(-1)
    def test_text_init(self):
        "Test the Elevator object creation from text"

        # 1. Create Solver object from text
        myobj = elevator.Elevator(text=EXAMPLE_TEXT)

        # 2. Make sure it has the expected values
        self.assertEqual(myobj.part2, False)
        self.assertEqual(len(myobj.text), 32)
        self.assertEqual(myobj.floor, 2)
        self.assertEqual(myobj.floors, 6)
        self.assertEqual(len(myobj.items), 0)
        self.assertEqual(myobj.last, 0)
        self.assertEqual(myobj.direction, ' ')

        # 3. Check Methods
        self.assertEqual(str(myobj), "The elevator is on floor 2 of 6.")
        self.assertEqual(myobj.directions(), ['U', 'D'])
        self.assertEqual(myobj.next_floor('U'), 3)
        self.assertEqual(myobj.next_floor('D'), 1)
        self.assertFalse(myobj.can_move())
        self.assertFalse(myobj.can_move_up())
        self.assertFalse(myobj.can_move_down())
        self.assertTrue(myobj.is_safe())
        myobj.load([HYG])
        self.assertTrue(myobj.is_safe())
        self.assertEqual(len(myobj.items), 1)
        self.assertTrue(myobj.can_move())
        self.assertTrue(myobj.can_move_up())
        self.assertTrue(myobj.can_move_down())
        myobj.move_down()
        self.assertEqual(myobj.floor, 1)
        self.assertEqual(myobj.floors, 6)
        self.assertEqual(myobj.last, 2)
        self.assertEqual(myobj.direction, 'v')
        self.assertEqual(str(myobj), "The elevator is on floor 1 of 6.")
        self.assertEqual(myobj.directions(), ['U'])
        self.assertTrue(myobj.can_move())
        self.assertTrue(myobj.can_move_up())
        self.assertFalse(myobj.can_move_down())
        myobj.load([LIM])
        self.assertEqual(len(myobj.items), 2)
        self.assertFalse(myobj.is_safe())
        stuff = myobj.unload()
        self.assertEqual(len(myobj.items), 0)
        self.assertEqual(len(stuff), 2)
        self.assertTrue(myobj.is_safe())
        self.assertFalse(myobj.can_move())
        myobj.load([LIM])
        self.assertTrue(myobj.can_move_up())
        myobj.move_up()
        self.assertEqual(myobj.last, 1)
        self.assertEqual(myobj.direction, '^')
        self.assertEqual(str(myobj), EXAMPLE_TEXT)
        myobj.floor = myobj.floors
        self.assertFalse(myobj.can_move_up())
        self.assertTrue(myobj.can_move_down())
Beispiel #7
0
 def test_elevator_go_above_roof(self):
     '''
     Try to go above roof and make sure it
     raises appropriate ElevatorOutOfBoundsException
     '''
     elevator1 = elevator.Elevator("G 1 2 3 4".split())
     elevator1.select_level(4)
     with self.assertRaises(ElevatorOutOfBoundsException):
         elevator1.select_level(5)
Beispiel #8
0
    def __init__(self, n, m, x, y, z, l):
        self.n = n
        self.m = m
        self.z = z
        self.l = l
        self.elevators = [None]

        for e in range(1, self.m + 1):
            newElevator = elevator.Elevator(e, n, x, y, z)
            self.elevators.append(newElevator)
        print("Elevators Initialized.")
Beispiel #9
0
    def test_elevator_same_direction_individually(self):
        ''' Test multiple people select floors in same
        direction individually '''
        elevator1 = elevator.Elevator("G 1 2 3 4".split())
        self.assertEqual(elevator1.door_status, ElevatorDoorStatus.CLOSED)
        self.assertEqual(elevator1.status, ElevatorStatus.IDLE)
        self.assertEqual(elevator1.current_level, 0)
        self.assertEqual(elevator1.direction, ElevatorDirection.UP)

        # first go straight to level 2 from ground
        elevator1.select_level(2)

        self.assertEqual(
            list(elevator1.generate_commands()),
            [
                ElevatorCommand.UP,
                ElevatorCommand.UP,
                ElevatorCommand.OPEN_DOOR,
                ElevatorCommand.CLOSE_DOOR,
            ],
        )

        # now let's select level 1
        elevator1.select_level(1)

        self.assertEqual(
            list(elevator1.generate_commands()),
            [
                ElevatorCommand.UP,
                ElevatorCommand.OPEN_DOOR,
                ElevatorCommand.CLOSE_DOOR,
                ElevatorCommand.UP,
                ElevatorCommand.OPEN_DOOR,
                ElevatorCommand.CLOSE_DOOR,
            ],
        )

        # now select level 3
        elevator1.select_level(3)

        self.assertEqual(
            list(elevator1.generate_commands()),
            [
                ElevatorCommand.UP,
                ElevatorCommand.OPEN_DOOR,
                ElevatorCommand.CLOSE_DOOR,
                ElevatorCommand.UP,
                ElevatorCommand.OPEN_DOOR,
                ElevatorCommand.CLOSE_DOOR,
                ElevatorCommand.UP,
                ElevatorCommand.OPEN_DOOR,
                ElevatorCommand.CLOSE_DOOR,
            ],
        )
Beispiel #10
0
    def test_multiple_elevators_advanced(self):
        ''' Test 3 elevators and make sure it chooses the right one '''
        LEVELS = "G 1 2 3 4 5 6 7 8 9 10 11".split()
        elevator1 = elevator.Elevator(LEVELS)
        elevator2 = elevator.Elevator(LEVELS)
        elevator3 = elevator.Elevator(LEVELS)
        self.assertEqual(elevator1.current_level, 0)
        self.assertEqual(elevator2.current_level, 0)
        self.assertEqual(elevator3.current_level, 0)

        controller = MultipleElevatorController(
            [elevator1, elevator2, elevator3])

        # Let's move elevator1 to level 10 so they are far away
        elevator1.select_level(10)
        while next(elevator1.generate_commands(), None):
            elevator1.step_forward()
        self.assertEqual(elevator1.current_level, 10)

        # Let's move elevator2 to level 6 so they are far away
        elevator2.select_level(6)
        while next(elevator2.generate_commands(), None):
            elevator2.step_forward()
        self.assertEqual(elevator2.current_level, 6)

        # Now let's summon a lift to go DOWN at level 5
        # it should be lift 2
        self.assertEqual(controller.call_elevator(5, ElevatorDirection.DOWN),
                         elevator2)

        # Now let's summon a lift to go UP at level 2
        # it should be lift 3
        self.assertEqual(controller.call_elevator(2, ElevatorDirection.UP),
                         elevator3)

        # Now let's summon a lift to go DOWN to level 9
        # it should be lift 1
        self.assertEqual(controller.call_elevator(9, ElevatorDirection.DOWN),
                         elevator1)
Beispiel #11
0
    def test_call_elevator_at_floor_3_from_ground(self):
        elevator1 = elevator.Elevator("G 1 2 3 4".split())
        elevator1.call_elevator(3, ElevatorDirection.UP)

        self.assertEqual(
            list(elevator1.generate_commands()),
            [
                ElevatorCommand.UP,
                ElevatorCommand.UP,
                ElevatorCommand.UP,
                ElevatorCommand.OPEN_DOOR,
                ElevatorCommand.CLOSE_DOOR,
            ],
        )

        self.assertEqual(elevator1.direction, ElevatorDirection.UP)
    def test_empty_init(self):
        "Test the default Elevator creation"

        # 1. Create default Elevator object
        myobj = elevator.Elevator()

        # 2. Make sure it has the default values
        self.assertEqual(myobj.part2, False)
        self.assertEqual(myobj.text, None)
        self.assertEqual(myobj.floor, 1)
        self.assertEqual(myobj.floors, 4)
        self.assertEqual(len(myobj.items), 0)
        self.assertEqual(myobj.last, 0)
        self.assertEqual(myobj.direction, ' ')

        # 3. Check methods
        self.assertEqual(str(myobj), "The elevator is on floor 1 of 4.")
        self.assertEqual(myobj.directions(), ['U'])
    def test_empty_floor(self):
        "Test the Floor object creation from text with no items"

        # 1. Create Solver object from text
        myobj = floor.Floor(text=EMPTY_TEXT)

        # 2. Make sure it has the expected values
        self.assertEqual(myobj.part2, False)
        self.assertEqual(len(myobj.text), 43)
        self.assertEqual(myobj.number, 4)
        self.assertEqual(myobj.ordinal, "fourth")
        self.assertEqual(len(myobj.items), 0)

        # 3. Check Methods
        self.assertEqual(str(myobj), EMPTY_TEXT)
        self.assertEqual(myobj.has(HYG), False)
        self.assertEqual(myobj.has(HYM), False)
        self.assertEqual(myobj.elements(), set())
        self.assertEqual(len(myobj.generators()), 0)
        self.assertEqual(len(myobj.microchips()), 0)
        self.assertEqual(myobj.safely_removable(), [])
        lift = elevator.Elevator()
        lift.floor = 4
        self.assertEqual(myobj.trace(lift, TRACE), "F4 E ... ... ... ...")
        self.assertEqual(myobj.is_safe(), True)
        self.assertEqual(myobj.is_empty(), True)
        myobj.add(HYG)
        self.assertEqual(myobj.trace(lift, TRACE), "F4 E HyG ... ... ...")
        self.assertEqual(myobj.is_safe(), True)
        self.assertEqual(myobj.is_empty(), False)
        items = myobj.safely_removable()
        self.assertEqual(len(items), 1)
        self.assertEqual(len(items[0]), 1)
        self.assertEqual(items[0][0], HYG)
        myobj.add(LIM)
        self.assertEqual(myobj.is_safe(), False)
        self.assertEqual(myobj.is_empty(), False)
        lift.load([LIG])
        lift.move_down()
        self.assertEqual(myobj.trace(lift, TRACE), "F4 v HyG ... ... LiM")
        self.assertEqual(myobj.is_safe(), False)
        self.assertEqual(len(myobj.safely_removable()), 2)
Beispiel #14
0
    def robotInit(self):
        '''Robot-wide initialization code should go here'''
        self.drivetrain = drivetrain.Drivetrain()
        self.sensors = sensor_handler.sensorHandler()
        self.joystick = joystick_handler.JoystickHandler()
        self.elevator = elevator.Elevator()
        self.intakeHandler = intake.Intake(self.sensors, self.joystick)
        self.auto = Autonomous_mode_handler.AutonomousModeHandler(
            self.drivetrain, self.sensors, self.elevator, self.intakeHandler)
        self.autoPath = auto_path.AutoPath(self.sensors, self.drivetrain)

        self.chooser = wpilib.SendableChooser()
        self.chooser.addObject('center', 'robot_constant.CENTER_POS')
        self.chooser.addObject('left', 'robot_constant.LEFT_POS')
        self.chooser.addObject('right', 'robot_constant.RIGHT_POS')
        self.chooser.addObject('default', 'robto_constant.DEFAULT')
        wpilib.SmartDashboard.putData('Auto Mode', self.chooser)

        logging.basicConfig(filename='robotLogs.log', level=logging.DEBUG)
        logging.info("Init robot")
Beispiel #15
0
    def test_call_outside_and_inside_same_direction(self):
        ''' multiple people both calling outside and
        selecting stop inside to go same direction '''
        elevator1 = elevator.Elevator("G 1 2 3 4".split())
        elevator1.call_elevator(3, ElevatorDirection.UP)
        elevator1.call_elevator(1, ElevatorDirection.UP)
        elevator1.select_level(2)

        self.assertEqual(
            list(elevator1.generate_commands()),
            [
                ElevatorCommand.UP,
                ElevatorCommand.OPEN_DOOR,
                ElevatorCommand.CLOSE_DOOR,
                ElevatorCommand.UP,
                ElevatorCommand.OPEN_DOOR,
                ElevatorCommand.CLOSE_DOOR,
                ElevatorCommand.UP,
                ElevatorCommand.OPEN_DOOR,
                ElevatorCommand.CLOSE_DOOR,
            ],
        )
Beispiel #16
0
    def test_elevator_same_floor(self):
        ''' test selecting the same floor  '''
        elevator1 = elevator.Elevator("G 1 2 3 4".split())
        self.assertEqual(elevator1.door_status, ElevatorDoorStatus.CLOSED)
        self.assertEqual(elevator1.status, ElevatorStatus.IDLE)
        self.assertEqual(elevator1.current_level, 0)
        self.assertEqual(elevator1.direction, ElevatorDirection.UP)

        # first go straight to level 2 from ground
        elevator1.select_level(2)
        elevator1.select_level(2)
        elevator1.select_level(2)

        self.assertEqual(
            list(elevator1.generate_commands()),
            [
                ElevatorCommand.UP,
                ElevatorCommand.UP,
                ElevatorCommand.OPEN_DOOR,
                ElevatorCommand.CLOSE_DOOR,
            ],
        )

        self.assertEqual(elevator1.direction, ElevatorDirection.UP)
def controller():
    """ Main Function()

    This function is the beginning of the simulation. The elevator instances are created and
    the tic is set to zero. In a while-loop, our program fulfills all its jobs and calls all
    functions that are further needed. The loop starts with updating the elevator, then takes
    an input (input-reader()). The input is then assigned to a special- and a common-list.
    Those lists are then run through their own job assigner and remaining jobs are saved for
    later assignment.
    If at the end of the loop an elevator is in idle (10), another 10 is added to the list and
    the state of idle stays.
    At the end of every loop the tic is increased by one.
    """

    tic = 0

    remaining_common_jobs = []
    remaining_spec_jobs = []

    elevator_a = elevator.Elevator("A", 0, "none", [10])
    elevator_b = elevator.Elevator("B", 0, "none", [10])

    remaining_jobs = []

    while True:
        print("Tic is:", tic)

        testcase_writer(elevator_a, elevator_b, tic)

        # sets the new attributes for our elevators
        elevator_setter(elevator_a, tic)
        elevator_setter(elevator_b, tic)

        tui_interface(elevator_a, elevator_b, tic)

        inp = input_reader()

        common_jobs, special_jobs = job_list_builder(inp)

        remaining_spec_jobs = delete_doubles(remaining_spec_jobs)

        special_jobs.extend(remaining_spec_jobs)

        remaining_common_jobs = delete_doubles(remaining_common_jobs)
        common_jobs.extend(remaining_common_jobs)

        common_jobs = delete_doubles(common_jobs)

        elevator_a.elevator_printer(tic)
        elevator_b.elevator_printer(tic)

        # here we assign the specific jobs and saves the remaining_jobs in a list
        remaining_spec_jobs = job_feeder.spec_job_assigner(
            elevator_a, tic, special_jobs) + job_feeder.spec_job_assigner(
                elevator_b, tic, special_jobs)

        print("Common Jobs are:", common_jobs)

        # common jobs are assigned here
        for inp in common_jobs:
            if len(inp) > 2:
                inp = [inp[0:2], inp[2]]

            distance_a = job_feeder.common_job_comparer(elevator_a, inp, tic)
            distance_b = job_feeder.common_job_comparer(elevator_b, inp, tic)

            if distance_b == "no match" and distance_a == "no match":
                if inp[0] == "-1":
                    remaining_common_jobs.append("-1h")
                else:
                    remaining_common_jobs.append(inp)
                continue

            if distance_a == "no match":
                distance_a = 1000
            if distance_b == "no match":
                distance_b = 1000

            if len(elevator_b.spec_list[tic:]) > 1 and len(
                    elevator_a.spec_list[tic:]) > 1:
                if distance_a > distance_b:
                    job_feeder.assign_common_stop(inp[0], elevator_b,
                                                  distance_b, tic)
                    print("Job assigned to B. Distance to job is:", distance_b)
                    try:
                        if inp[0] == "-1":
                            remaining_common_jobs.remove("-1h")
                        else:
                            remaining_common_jobs.remove(inp)
                    except ValueError:
                        continue
                else:
                    job_feeder.assign_common_stop(inp[0], elevator_a,
                                                  distance_a, tic)
                    print("Job assigned to A. Distance to job is:", distance_a)
                    try:
                        if inp[0] == "-1":
                            remaining_common_jobs.remove("-1h")
                        else:
                            remaining_common_jobs.remove(inp)
                    except ValueError:
                        continue

            elif elevator_a.spec_list[tic] == 10 and len(
                    elevator_a.spec_list[tic:]) == 1:
                print("Job was assigned to A.")
                job_feeder.assign_common_stop(inp[0], elevator_a, distance_a,
                                              tic)
                try:
                    if inp[0] == "-1":
                        remaining_common_jobs.remove("-1h")
                    else:
                        remaining_common_jobs.remove(inp)
                except ValueError:
                    continue

            elif elevator_b.spec_list[tic] == 10 and len(
                    elevator_b.spec_list[tic:]) == 1:
                print("Job assigned to B.")
                job_feeder.assign_common_stop(inp[0], elevator_b, distance_b,
                                              tic)
                try:
                    if inp[0] == "-1":
                        remaining_common_jobs.remove("-1h")
                    else:
                        remaining_common_jobs.remove(inp)
                except ValueError:
                    continue

        if len(elevator_b.spec_list[tic:]) == 1:
            elevator_b.spec_list.extend([10])
        if len(elevator_a.spec_list[tic:]) == 1:
            elevator_a.spec_list.extend([10])

        tic += 1
Beispiel #18
0
    def test_elevator_opposite_direction(self):
        ''' Test multiple people select floors in opposite direction '''
        elevator1 = elevator.Elevator("G 1 2 3 4".split())
        self.assertEqual(elevator1.door_status, ElevatorDoorStatus.CLOSED)
        self.assertEqual(elevator1.status, ElevatorStatus.IDLE)
        self.assertEqual(elevator1.current_level, 0)
        self.assertEqual(elevator1.direction, ElevatorDirection.UP)

        # first go straight to level 2 from ground
        elevator1.select_level(2)

        self.assertEqual(
            list(elevator1.generate_commands()),
            [
                ElevatorCommand.UP,
                ElevatorCommand.UP,
                ElevatorCommand.OPEN_DOOR,
                ElevatorCommand.CLOSE_DOOR,
            ],
        )
        elevator1.step_forward()
        elevator1.step_forward()
        elevator1.step_forward()
        elevator1.step_forward()

        # Make sure we are on level 2
        self.assertEqual(elevator1.door_status, ElevatorDoorStatus.CLOSED)
        self.assertEqual(elevator1.status, ElevatorStatus.IDLE)
        self.assertEqual(elevator1.current_level, 2)
        self.assertEqual(list(elevator1.generate_commands()), [])

        # Now let's select level 4,
        # THEN level 1, and make sure it works correctly
        elevator1.select_level(4)

        self.assertEqual(
            list(elevator1.generate_commands()),
            [
                ElevatorCommand.UP,
                ElevatorCommand.UP,
                ElevatorCommand.OPEN_DOOR,
                ElevatorCommand.CLOSE_DOOR,
            ],
        )

        # select level 1
        elevator1.select_level(1)
        self.assertEqual(
            list(elevator1.generate_commands()),
            [
                ElevatorCommand.UP,
                ElevatorCommand.UP,
                ElevatorCommand.OPEN_DOOR,
                ElevatorCommand.CLOSE_DOOR,
                ElevatorCommand.DOWN,
                ElevatorCommand.DOWN,
                ElevatorCommand.DOWN,
                ElevatorCommand.OPEN_DOOR,
                ElevatorCommand.CLOSE_DOOR,
            ],
        )

        # Now STEP FORWARD to LEVEL 4 and see if elevator DIRECTION is changed
        elevator1.step_forward()
        elevator1.step_forward()
        elevator1.step_forward()  # open door on level 4
        elevator1.step_forward()  # close door on level 4
        elevator1.step_forward()
        self.assertEqual(
            list(elevator1.generate_commands()),
            [
                ElevatorCommand.DOWN,
                ElevatorCommand.DOWN,
                ElevatorCommand.OPEN_DOOR,
                ElevatorCommand.CLOSE_DOOR,
            ],
        )
        self.assertEqual(elevator1.direction, ElevatorDirection.DOWN)
Beispiel #19
0
    def load(self):
        levels = self.get_levels()
        if self.level_id > len(levels) - 1:
            self.app.set_state(main.WIN)
            self.app.score_manager.save()
        else:
            self.app.gui_manager.set_state(gui_manager.FADE_IN)

            self.app.game_manager.clear_level()

            self.level_name = levels[self.level_id]
            self.app.gui_manager.update_times(
                self.app.score_manager.run_scores.get(
                    util.get_filename(self.mode, self.level_name), 0),
                self.app.score_manager.get_record(self.mode, self.level_name))

            # map_data = levels.levels[self.level_id]()
            if self.mode == 0:
                directory = 'levels'
            elif self.mode == 1:
                directory = 'survival'

            with open('{}/{}.dat'.format(directory, self.level_name),
                      'rb') as f:
                map_data = pickle.load(f)

            scene = self.app.renderer.scene

            model_name, texture = map_data['terrain']
            self.app.game_manager.terrain = terrain.Terrain(
                self.app, model_name, texture)
            scene.add(self.app.game_manager.terrain.canvas)

            self.app.game_manager.player.spawn(map_data['spawn_pos'])

            if self.mode == 0:
                self.app.game_manager.goal.spawn(map_data['goal_pos'])
            elif self.mode == 1:
                self.app.game_manager.goal.despawn()

            for data in map_data['buildings']:
                b = building.Building(self.app,
                                      building.Building.data[data[0]],
                                      data[1:4], data[4])
                # b = building.Building(self.app, building.Building.data[data[0]], data[1:4], 0)
                self.app.game_manager.game_objects.add(b)
                scene.add(b.canvas)

            for data in map_data['platforms']:
                if data[0] == 0:
                    platform.Hedge(self.app, data[1:4])
                elif data[0] == 1:
                    platform.InvisiblePlatform(self.app, data[1:4])
                elif data[0] == 2:
                    platform.LavaPlatform(self.app, data[1:4])
                elif data[0] == 3:
                    platform.Trampoline(self.app, data[1:4])

            for data in map_data['elevators']:
                e = elevator.Elevator(self.app, data[1:4], data[4])
                self.app.game_manager.game_objects.add(e)  # spawn later
                scene.add(e.canvas)

            for data in map_data['powerups']:
                if data[0] == 0:
                    e = powerup.Fuel(self.app, data[1:4])
                    self.app.game_manager.game_objects.add(e)  # spawn later
                    scene.add(e.canvas)
                elif data[0] == 1:
                    e = powerup.Health(self.app, data[1:4])
                    self.app.game_manager.game_objects.add(e)  # spawn later
                    scene.add(e.canvas)
                elif data[0] == 2:
                    e = powerup.SlowTime(self.app, data[1:4])
                    self.app.game_manager.game_objects.add(e)  # spawn later
                    scene.add(e.canvas)

            for data in map_data['vehicles']:
                if data[0] == 0:
                    v = car.Car(self.app)
                elif data[0] == 1:
                    v = helicopter.Helicopter(self.app)
                v.spawn(data[1:4])

            for data in map_data['enemies']:
                if data[0] == 0:
                    enemy.Turret(self.app, data[1:4])
                elif data[0] == 1:
                    enemy.Bee(self.app, data[1:4])
                elif data[0] == 2:
                    enemy.BowlSpawner(self.app, data[1:4])
                elif data[0] == 3:
                    enemy.InvisibleEnemy(self.app, data[1:4])

            self.app.game_manager.set_state(self.mode)
Beispiel #20
0
 def setUpClass(cls):
     cls.elevator = elevator.Elevator(1)
Beispiel #21
0
    def test_elevator_go_up_down(self):
        ''' Test some basic UP and DOWN commands '''
        elevator1 = elevator.Elevator("G 1 2 3 4".split())
        self.assertEqual(elevator1.door_status, ElevatorDoorStatus.CLOSED)
        self.assertEqual(elevator1.status, ElevatorStatus.IDLE)
        self.assertEqual(elevator1.direction, ElevatorDirection.UP)

        # go to level 3
        elevator1.select_level(3)
        self.assertEqual(
            list(elevator1.generate_commands()),
            [
                ElevatorCommand.UP, ElevatorCommand.UP, ElevatorCommand.UP,
                ElevatorCommand.OPEN_DOOR, ElevatorCommand.CLOSE_DOOR
            ],
        )

        elevator1.step_forward()
        self.assertEqual(elevator1.door_status, ElevatorDoorStatus.CLOSED)
        self.assertEqual(elevator1.status, ElevatorStatus.MOVING_UP)

        self.assertEqual(
            list(elevator1.generate_commands()),
            [
                ElevatorCommand.UP, ElevatorCommand.UP,
                ElevatorCommand.OPEN_DOOR, ElevatorCommand.CLOSE_DOOR
            ],
        )

        elevator1.step_forward()
        self.assertEqual(elevator1.door_status, ElevatorDoorStatus.CLOSED)
        self.assertEqual(elevator1.status, ElevatorStatus.MOVING_UP)

        self.assertEqual(
            list(elevator1.generate_commands()),
            [
                ElevatorCommand.UP, ElevatorCommand.OPEN_DOOR,
                ElevatorCommand.CLOSE_DOOR
            ],
        )

        elevator1.step_forward()
        self.assertEqual(elevator1.door_status, ElevatorDoorStatus.CLOSED)
        self.assertEqual(elevator1.status, ElevatorStatus.MOVING_UP)

        self.assertEqual(
            list(elevator1.generate_commands()),
            [ElevatorCommand.OPEN_DOOR, ElevatorCommand.CLOSE_DOOR],
        )

        elevator1.step_forward()
        self.assertEqual(elevator1.door_status, ElevatorDoorStatus.OPEN)
        self.assertEqual(elevator1.status, ElevatorStatus.IDLE)

        self.assertEqual(
            list(elevator1.generate_commands()),
            [ElevatorCommand.CLOSE_DOOR],
        )

        # We finished getting to level 3, nothing left to do
        elevator1.step_forward()
        self.assertEqual(elevator1.door_status, ElevatorDoorStatus.CLOSED)
        self.assertEqual(elevator1.status, ElevatorStatus.IDLE)
        self.assertEqual(list(elevator1.generate_commands()), [])
        self.assertEqual(elevator1.current_level, 3)
        self.assertEqual(elevator1.direction, ElevatorDirection.UP)

        # Now test GOING DOWN
        elevator1.select_level(0)
        self.assertEqual(
            list(elevator1.generate_commands()),
            [
                ElevatorCommand.DOWN, ElevatorCommand.DOWN,
                ElevatorCommand.DOWN, ElevatorCommand.OPEN_DOOR,
                ElevatorCommand.CLOSE_DOOR
            ],
        )
        self.assertEqual(elevator1.direction, ElevatorDirection.DOWN)
Beispiel #22
0
    def test_multiple_people_dif_floors_same_direction(self):
        elevator1 = elevator.Elevator("G 1 2 3 4".split())
        elevator1.call_elevator(3, ElevatorDirection.UP)
        elevator1.call_elevator(1, ElevatorDirection.UP)
        elevator1.call_elevator(2, ElevatorDirection.UP)

        self.assertEqual(
            list(elevator1.generate_commands()),
            [
                ElevatorCommand.UP,
                ElevatorCommand.OPEN_DOOR,
                ElevatorCommand.CLOSE_DOOR,
                ElevatorCommand.UP,
                ElevatorCommand.OPEN_DOOR,
                ElevatorCommand.CLOSE_DOOR,
                ElevatorCommand.UP,
                ElevatorCommand.OPEN_DOOR,
                ElevatorCommand.CLOSE_DOOR,
            ],
        )

        # Go up
        elevator1.step_forward()

        self.assertEqual(
            list(elevator1.generate_commands()),
            [
                ElevatorCommand.OPEN_DOOR,
                ElevatorCommand.CLOSE_DOOR,
                ElevatorCommand.UP,
                ElevatorCommand.OPEN_DOOR,
                ElevatorCommand.CLOSE_DOOR,
                ElevatorCommand.UP,
                ElevatorCommand.OPEN_DOOR,
                ElevatorCommand.CLOSE_DOOR,
            ],
        )

        # open door
        elevator1.step_forward()

        self.assertEqual(
            list(elevator1.generate_commands()),
            [
                ElevatorCommand.CLOSE_DOOR,
                ElevatorCommand.UP,
                ElevatorCommand.OPEN_DOOR,
                ElevatorCommand.CLOSE_DOOR,
                ElevatorCommand.UP,
                ElevatorCommand.OPEN_DOOR,
                ElevatorCommand.CLOSE_DOOR,
            ],
        )

        # close door
        elevator1.step_forward()

        self.assertEqual(
            list(elevator1.generate_commands()),
            [
                ElevatorCommand.UP,
                ElevatorCommand.OPEN_DOOR,
                ElevatorCommand.CLOSE_DOOR,
                ElevatorCommand.UP,
                ElevatorCommand.OPEN_DOOR,
                ElevatorCommand.CLOSE_DOOR,
            ],
        )

        self.assertEqual(elevator1.direction, ElevatorDirection.UP)
        self.assertEqual(elevator1.current_level, 1)

        for i in range(6):
            elevator1.step_forward()

        # finish the sequence
        self.assertEqual(elevator1.direction, ElevatorDirection.UP)
        self.assertEqual(elevator1.current_level, 3)
Beispiel #23
0
    def test_multiple_people_diff_floors_opposite_direction(self):
        ''' multiple people both calling outside and
        selecting stop inside to go same direction '''
        elevator1 = elevator.Elevator("G 1 2 3 4".split())
        self.assertEqual(elevator1.direction, ElevatorDirection.UP)
        # Call the elevator
        elevator1.call_elevator(3, ElevatorDirection.UP)
        elevator1.call_elevator(1, ElevatorDirection.UP)
        elevator1.call_elevator(1, ElevatorDirection.DOWN)
        # select a level from inisde
        elevator1.select_level(2)

        self.assertEqual(
            list(elevator1.generate_commands()),
            [
                ElevatorCommand.UP,
                ElevatorCommand.OPEN_DOOR,
                ElevatorCommand.CLOSE_DOOR,
                ElevatorCommand.UP,
                ElevatorCommand.OPEN_DOOR,
                ElevatorCommand.CLOSE_DOOR,
                ElevatorCommand.UP,
                ElevatorCommand.OPEN_DOOR,
                ElevatorCommand.CLOSE_DOOR,
                ElevatorCommand.DOWN,
                ElevatorCommand.DOWN,
                ElevatorCommand.OPEN_DOOR,
                ElevatorCommand.CLOSE_DOOR,
            ],
        )
        for i in range(8):
            # get to level 3
            elevator1.step_forward()

        self.assertEqual(elevator1.direction, ElevatorDirection.DOWN)

        elevator1.call_elevator(0, ElevatorDirection.UP)
        elevator1.call_elevator(4, ElevatorDirection.DOWN)

        # Now we have to go down to level 1 from that
        # guy above who's been waiting since the start
        # then we go to Ground to service the new guy who clicked up
        # and all the way to 4 to for the new guy who clicked down

        self.assertEqual(
            list(elevator1.generate_commands()),
            [
                ElevatorCommand.CLOSE_DOOR,
                ElevatorCommand.DOWN,
                ElevatorCommand.DOWN,
                ElevatorCommand.OPEN_DOOR,
                ElevatorCommand.CLOSE_DOOR,
                ElevatorCommand.DOWN,
                ElevatorCommand.OPEN_DOOR,
                ElevatorCommand.CLOSE_DOOR,
                ElevatorCommand.UP,
                ElevatorCommand.UP,
                ElevatorCommand.UP,
                ElevatorCommand.UP,
                ElevatorCommand.OPEN_DOOR,
                ElevatorCommand.CLOSE_DOOR,
            ],
        )
        for i in range(14):
            elevator1.step_forward()

        self.assertEqual(elevator1.direction, ElevatorDirection.DOWN)
        self.assertEqual(elevator1.current_level, 4)
 def __init__(self, el_del: int):
     self.elevator = elevator.Elevator(el_del)
     self.flag_for_output = True
     print("Объект создан")