Esempio n. 1
0
 def test_returns_position_for_hero_image(self) -> None:
     area = MapAreaFactory.create(Size(20, 40), Position(0, 0))
     hero = MapHero(size=Size(10, 20))
     presenter = Presenter(area)
     self.assertEqual(
         presenter.position_hero(hero, area.id),
         Position(5, 10),
     )
Esempio n. 2
0
 def test_calculates_scale_ratio(self) -> None:
     cases = (
         (Size(20, 10), Size(10, 5), ScaleRatio(0.5, 0.5)),
         (Size(30, 10), Size(10, 5), ScaleRatio(0.3333333333333333, 0.5)),
         (Size(20, 4), Size(20, 15), ScaleRatio(1, 3.75)),
     )
     for initial_size, final_size, scale_ratio in cases:
         with self.subTest(
                 initial_size=initial_size,
                 final_size=final_size,
                 scale_ratio=scale_ratio):
             self.assertEqual(
                 calculate_scale_ratio(initial_size, final_size),
                 scale_ratio,
             )
Esempio n. 3
0
 def test_map_hero_size(self) -> None:
     hero = MapHero(Size(10, 20))
     self.assertEqual(hero.size(), Size(10, 20))
Esempio n. 4
0
 def test_raises_map_area_not_found_if_no_area_with_a_given_id(
         self) -> None:
     presenter = Presenter()
     hero = MapHero(size=Size(10, 20))
     with self.assertRaises(MapAreaNotFound):
         presenter.position_hero(hero, AreaIdFactory.create())
Esempio n. 5
0
def run() -> None:
    pygame.init()
    display = pygame.display.set_mode((1280, 800), pygame.DOUBLEBUF)
    background = pygame.image.load(os.path.join('data', 'map.png'))
    background = pygame.transform.scale(background, (1280, 800))
    background.convert()
    areas = [
        MapArea(AreaId('village'), Size(161, 137), Position(0, 0)),
        MapArea(AreaId('field-one'), Size(67, 137), Position(167, 0)),
        MapArea(AreaId('forest-one'), Size(78, 137), Position(240, 0)),
        MapArea(AreaId('forest-two'), Size(120, 137), Position(324, 0)),
        MapArea(AreaId('forest-three'), Size(110, 137), Position(450, 0)),
        MapArea(AreaId('forest-four'), Size(136, 137), Position(566, 0)),
        MapArea(AreaId('church'), Size(150, 137), Position(708, 0)),
        MapArea(AreaId('field-two'), Size(90, 137), Position(864, 0)),
        MapArea(AreaId('field-three'), Size(82, 137), Position(960, 0)),
        MapArea(AreaId('field-four'), Size(90, 137), Position(1046, 0)),
        MapArea(AreaId('town'), Size(136, 150), Position(1142, 0)),
        MapArea(AreaId('hut'), Size(116, 116), Position(1160, 166)),
        MapArea(AreaId('snow-forest'), Size(116, 146), Position(1160, 288)),
        MapArea(AreaId('mountain-hut'), Size(116, 76), Position(1160, 438)),
        MapArea(AreaId('snow-mountain'), Size(116, 88), Position(1160, 520)),
        MapArea(AreaId(
            'barren-field-one'), Size(116, 50), Position(1160, 612),
        ),
        MapArea(AreaId('dark-fortress'), Size(106, 130), Position(1172, 666)),
        MapArea(
            AreaId('barren-field-two'), Size(138, 130), Position(1028, 666),
        ),
        MapArea(AreaId('temple'), Size(100, 130), Position(922, 666)),
        MapArea(AreaId('savannah'), Size(94, 130), Position(823, 666)),
        MapArea(AreaId('jungle-outside'), Size(126, 130), Position(692, 666)),
        MapArea(AreaId('barren-hills'), Size(158, 130), Position(530, 666)),
        MapArea(AreaId('bridge'), Size(90, 140), Position(436, 656)),
        MapArea(AreaId('mountains-one'), Size(102, 140), Position(329, 656)),
        MapArea(AreaId('mountains-two'), Size(114, 140), Position(210, 656)),
        MapArea(AreaId('field-five'), Size(70, 140), Position(137, 656)),
        MapArea(AreaId('capital'), Size(132, 156), Position(0, 640)),
        MapArea(AreaId('road-one'), Size(132, 90), Position(0, 543)),
        MapArea(AreaId('road-two'), Size(132, 92), Position(0, 445)),
        MapArea(AreaId('bridge-of-death'), Size(132, 102), Position(0, 338)),
        MapArea(AreaId('watchtower'), Size(132, 108), Position(0, 225)),
        MapArea(AreaId('road-to-village'), Size(132, 78), Position(0, 142)),
    ]
    game_areas: List[Area] = [
        Area(AreaId('village')),
        Area(AreaId('field-one')),
        Area(AreaId('forest-one')),
        Area(AreaId('forest-two')),
        Area(AreaId('forest-three')),
        Area(AreaId('forest-four')),
        Area(AreaId('church')),
        Area(AreaId('field-two')),
        Area(AreaId('field-three')),
        Area(AreaId('field-four')),
        Area(AreaId('town')),
        Area(AreaId('hut')),
        Area(AreaId('snow-forest')),
        Area(AreaId('mountain-hut')),
        Area(AreaId('snow-mountain')),
        Area(AreaId('barren-field-one')),
        Area(AreaId('dark-fortress')),
        Area(AreaId('barren-field-two')),
        Area(AreaId('temple')),
        Area(AreaId('savannah')),
        Area(AreaId('jungle-outside')),
        Area(AreaId('barren-hills')),
        Area(AreaId('bridge')),
        Area(AreaId('mountains-one')),
        Area(AreaId('mountains-two')),
        Area(AreaId('field-five')),
        Area(AreaId('capital')),
        Area(AreaId('road-one')),
        Area(AreaId('road-two')),
        Area(AreaId('bridge-of-death')),
        Area(AreaId('watchtower')),
        Area(AreaId('road-to-village')),
    ]
    hero = Hero(location=AreaId('village'))
    circle = Circle(*game_areas)
    game = Game(circle, hero)
    presenter = Presenter(*areas)
    display.blit(background, (0, 0))
    hero_image = pygame.image.load(os.path.join('data', 'dwarf.png'))
    hero_image.convert()
    map_hero = MapHero(Size(*hero_image.get_size()))
    hero_position = presenter.position_hero(map_hero, hero.location())
    display.blit(hero_image, hero_position)
    pygame.display.set_caption('Save The Prince')
    should_continue = True
    while should_continue:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                should_continue = False
            elif event.type == pygame.KEYDOWN:
                if event.key == pygame.K_ESCAPE:
                    should_continue = False
                if event.key == pygame.K_RIGHT:
                    display.blit(background, (0, 0))
                    game.move_playing_hero_right()
                    hero_position = presenter.position_hero(
                        map_hero, hero.location(),
                    )
                    display.blit(hero_image, hero_position)
                if event.key == pygame.K_LEFT:
                    display.blit(background, (0, 0))
                    game.move_playing_hero_left()
                    hero_position = presenter.position_hero(
                        map_hero, hero.location(),
                    )
                    display.blit(hero_image, hero_position)
            pygame.display.flip()
    pygame.quit()
Esempio n. 6
0
 def centered(self, size: Size) -> Position:
     return self._position.moved_by(
         Vector(
             self._size.half_width() - size.half_width(),
             self._size.half_height() - size.half_height(),
         ), )
Esempio n. 7
0
 def test_rounds_the_half_width(self) -> None:
     self.assertEqual(Size(5, 20).half_width(), 3)
Esempio n. 8
0
 def create() -> Size:
     return Size(width=random.randint(0, 10), height=random.randint(0, 10))
Esempio n. 9
0
 def test_tells_the_half_of_its_width(self) -> None:
     self.assertEqual(Size(50, 20).half_width(), 25)
Esempio n. 10
0
 def test_rounds_the_half_height(self) -> None:
     self.assertEqual(Size(20, 5).half_height(), 3)
Esempio n. 11
0
 def test_tells_the_half_of_its_height(self) -> None:
     self.assertEqual(Size(20, 50).half_height(), 25)
Esempio n. 12
0
 def test_finds_position_of_an_item_in_the_center(self) -> None:
     area = MapArea(AreaId('test-area'), Size(100, 100), Position(0, 0))
     self.assertEqual(area.centered(Size(10, 10)), Position(45, 45))
Esempio n. 13
0
 def test_finds_absolute_position(self) -> None:
     area = MapArea(AreaId('test-area'), Size(100, 100), Position(15, 100))
     self.assertEqual(area.centered(Size(10, 10)), Position(60, 145))