Пример #1
0
class BlueSky:
    """Overall class to manage the blue sky."""
    def __init__(self):
        """Initialize the game and create the sky."""
        pygame.init()

        self.screen = pygame.display.set_mode((1200, 800))
        pygame.display.set_caption("Blue Sky")
        self.bg_colour = (0, 0, 230)
        self.hero = Hero(self)

    def run_sky(self):
        """Start the loop to run the sky."""
        while True:
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    sys.exit()

            self.screen.fill(self.bg_colour)
            self.hero.blitme()

            pygame.display.flip()
Пример #2
0
def init_game(current_map):
    pygame.init()
    game_settings = Settings()
    screen = pygame.display.set_mode((game_settings.width,game_settings.height), pygame.FULLSCREEN)  # екран
    if current_map == "level1.txt":
        hero = Hero(screen,15,15)
        enemy = Enemy(screen,1000,500)
        tp = Teleport(810, 135, 495, 870)
        bg = pygame.transform.scale(pygame.image.load("img/bg1-01.jpeg").convert_alpha(),(1920,1080))
    if current_map == "level2.txt":
        hero = Hero(screen,960, 15)
        enemy = Enemy(screen, 960,1000)
        tp = Teleport(1605, 195, 480, 135)
        bg = pygame.transform.scale(pygame.image.load("img/bg1-02.jpeg").convert_alpha(),(1920,1080))
    if current_map == "level3.txt":
        hero = Hero(screen,1750, 60)
        enemy = Enemy(screen, 960,850)
        tp = Teleport(835, 15, 465, 555)
        bg = pygame.transform.scale(pygame.image.load("img/bg1-01-02.jpeg").convert_alpha(),(1920,1080))
    pygame.display.set_caption("Kursant Man")  #назва гри



    left = False
    right = False
    up = False
    down = False
    e_left = False
    e_right = False
    e_down = False
    e_up = False
    Kursant_Punkts = [(615, 785, u'Menu', (0, 0, 0), (128, 0, 0), 0),
                  (885, 785, u'Restart', (0, 0, 0), (128, 0, 0), 1),
                  (1200, 785, u'Next', (0, 0, 0), (128, 0, 0), 2)]
    Officer_Punkts = [(715, 785, u'Menu', (255, 255, 255), (128, 0, 0), 0),
                  (1100, 785, u'Restart', (255, 255, 255), (128, 0, 0), 1)]
    kurs_menu = Kursant_Menu(Kursant_Punkts,current_map)
    offi_menu = Officer_Menu(Officer_Punkts,current_map)
    end_menu = End_Menu()

    entities = pygame.sprite.Group()
    walls = []
    notwalls = pygame.sprite.Group()
    boosts = []
    grass = []
    doors = []
    entities.add(tp)
    walls.append(tp)
    notwalls.add(tp)
    random_bonuses = pygame.sprite.Group()

    game_folder = path.dirname(__file__)
    map_data = []
    with open(path.join(game_folder, current_map), "rt") as f:
        for line in f:
            map_data.append(line)
    x=y=0
    for row,tiles in enumerate(map_data):
        for col,tile in enumerate(tiles):
            if tile == "0":
                if current_map == "level1.txt":
                    wall = Wall(x, y)
                    entities.add(wall)
                    walls.append(wall)
                    wall.image = pygame.image.load("img/walls.png").convert_alpha()
                if current_map == "level2.txt":
                    wall = Wall(x, y)
                    entities.add(wall)
                    walls.append(wall)
                if current_map == "level3.txt":
                    wall = Wall(x, y)
                    entities.add(wall)
                    walls.append(wall)
                    wall.image = pygame.image.load("img/walls.png").convert_alpha()
            if tile == "B":
                wall = Wall(x, y)
                entities.add(wall)
                walls.append(wall)
                wall.image = pygame.image.load("img/c_wall.jpg").convert_alpha()
            if tile == "A":
                wall = Wall(x, y)
                entities.add(wall)
                walls.append(wall)
                wall.image = pygame.image.load("img/l2_edgewall.jpg").convert_alpha()
            if tile == "C":
                wall = Wall(x, y)
                entities.add(wall)
                walls.append(wall)
                wall.image = pygame.image.load("img/l2_sidewall.jpg").convert_alpha()
            if tile == "G":
                wall = Wall(x,y)
                entities.add(wall)
                walls.append(wall)
                wall.image = pygame.image.load("img/edge_wall.jpg").convert_alpha()
            if tile == "S":
                wall = Wall(x,y)
                entities.add(wall)
                walls.append(wall)
                wall.image = pygame.image.load("img/side_wall.jpg").convert_alpha()
            if current_map == "level3.txt":
                if tile == "T":
                    gwall = GrassWall(x,y)
                    entities.add(gwall)
                    grass.append(gwall)
            if tile == "X":
                if current_map == "level1.txt":
                    wall = Wall(x,y)
                    entities.add(wall)
                    walls.append(wall)
                    wall.image = pygame.image.load("img/exit1.jpg").convert_alpha()
                if current_map == "level2.txt":
                    wall = Wall(x, y)
                    entities.add(wall)
                    walls.append(wall)
                    wall.image = pygame.image.load("img/exit2.jpg").convert_alpha()
            if tile == "d":
                if current_map == "level1.txt":
                    wall = Wall(x, y)
                    entities.add(wall)
                    walls.append(wall)
                    wall.image = pygame.image.load("img/exit1.jpg").convert_alpha()
                if current_map == "level2.txt":
                    wall = Wall(x, y)
                    entities.add(wall)
                    walls.append(wall)
                    wall.image = pygame.image.load("img/exit2.jpg").convert_alpha()
            x+=game_settings.wall_width
            if tile == "E":
                enemy = Enemy(screen,x,y)
            if tile == "D":
                door1 = Door(x,y)
                entities.add(door1)
                doors.append(door1)
            if tile == "d":
                door2 = Door(x,y)
                entities.add(door2)
                doors.append(door2)
                door2.image = pygame.image.load("img/door_c1.png").convert_alpha()
            if tile == "p":
                boost1 = Boost(x,y)
                entities.add(boost1)
                boosts.append(boost1)
            if tile == "o":
                boost2 = Boost(x,y)
                entities.add(boost2)
                boosts.append(boost2)
            if tile == "i":
                boost3 = Boost(x,y)
                entities.add(boost3)
                boosts.append(boost3)

            if tile == "R":
                hero.random_boost = Boost(x,y)
                entities.add(hero.random_boost)
                boosts.append(hero.random_boost)


        y+=game_settings.wall_height
        x=0


    while True:    #цикл який не дає закривати гру
        pygame.time.Clock().tick(60)
        enemy.blitme()
        hero.blitme()
        pygame.display.flip()
        for e in pygame.event.get():
            if e.type == QUIT:
                raise SystemExit
            if e.type == KEYDOWN:
                if e.key == K_UP:
                    up = True
                    down = False
                    left = False
                    right = False
                    step_sound.play()
                if e.key == K_DOWN:
                    down = True
                    up = False
                    left = False
                    right = False
                    step_sound.play()
                if e.key == K_RIGHT:
                    right = True
                    down = False
                    left = False
                    up = False
                    step_sound.play()
                if e.key == K_LEFT:
                    left = True
                    down = False
                    up = False
                    right = False
                    step_sound.play()
                if e.key == K_w:
                    e_up = True
                    e_down = False
                    e_left = False
                    e_right = False
                    step_sound.play()
                if e.key == K_s:
                    e_down = True
                    e_up = False
                    e_left = False
                    e_right = False
                    step_sound.play()
                if e.key == K_d:
                    e_right = True
                    e_down = False
                    e_left = False
                    e_up = False
                    step_sound.play()
                if e.key == K_a:
                    e_left = True
                    e_down = False
                    e_up = False
                    e_right = False
                    step_sound.play()
            if e.type == KEYUP:
                if e.key == K_UP:
                    up = False
                    step_sound.stop()
                if e.key == K_DOWN:
                    down = False
                    step_sound.stop()
                if e.key == K_RIGHT:
                    right = False
                    step_sound.stop()
                if e.key == K_LEFT:
                    left = False
                    step_sound.stop()
                if e.key == K_w:
                    e_up = False
                    step_sound.stop()
                if e.key == K_s:
                    e_down = False
                    step_sound.stop()
                if e.key == K_d:
                    e_right = False
                    step_sound.stop()
                if e.key == K_a:
                    e_left = False
                    step_sound.stop()
        if sprite.collide_rect(hero,enemy):
            lose_sound.play()
            offi_menu.lmenu(screen)
        if sprite.collide_rect(hero,door1):
            door1.image = pygame.image.load("img/door_o.png").convert_alpha()
        if sprite.collide_rect(hero,door2):
            door2.image = pygame.image.load("img/door_c.png").convert_alpha()
        if sprite.collide_rect(hero,boost1):
            hero.speed = hero.speed+2
            entities.remove(boost1)
            boost1 = Boost(10000,10000)
            boost_sound.play()
        if sprite.collide_rect(hero,boost2):
            hero.speed = hero.speed+2
            entities.remove(boost2)
            boost2 = Boost(10000,10000)
            boost_sound.play()
        if sprite.collide_rect(hero,boost3):
            hero.speed = hero.speed+2
            entities.remove(boost3)
            boost3 = Boost(10000,10000)
            boost_sound.play()

        if current_map == "level1.txt":
            if (hero.rect.x > 1290 and hero.rect.x <1470) and (hero.rect.y > 345 and hero.rect.y < 510):
                win_sound.play()
                kurs_menu.lmenu(screen)
            if (hero.rect.x > 135 and hero.rect.x <615) and (hero.rect.y > 705 and hero.rect.y < 810):
                win_sound.play()
                kurs_menu.lmenu(screen)
        if current_map == "level2.txt":
            if (hero.rect.x > 1365 and hero.rect.x <1800) and (hero.rect.y > 600 and hero.rect.y < 750):
                win_sound.play()
                kurs_menu.lmenu(screen)
            if (hero.rect.x > 105 and hero.rect.x <555) and (hero.rect.y > 810 and hero.rect.y < 960):
                win_sound.play()
                kurs_menu.lmenu(screen)
        if current_map == "level3.txt":
            if hero.rect.y > 1065:
                end_sound.play()
                end_menu.emenu(screen)
        screen.blit(bg,(0,0))
        hero.update(left, right, up, down, walls,grass)
        enemy.update(e_left,e_right,e_up,e_down,walls,doors,grass)
        notwalls.update()
        entities.draw(screen)
        print(hero.speed)
        if current_map == "level3.txt":
            if not sprite.collide_rect(hero,gwall):
                if hero.speed < 11:
                    hero.speed += 0.5
            if not sprite.collide_rect(enemy,gwall):
                if enemy.speed < 11:
                    enemy.speed += 0.5
Пример #3
0
 while True:
     clock.tick(200)
     gf.check_events(settings, screen, hero, menu)
     if hero.blood <= 0:
         menu.occupy = True
     if menu.occupy == True :
         menu.update(hero, map_, monster_list)
         menu.blitme(hero)
         if hero.blood_cd < 5:
             hero.blood_cd += 5
     else:
         # hero.update(monster_list, tool_list)
         hero.update1_v2(monster_list, map_.tool_list)
         map_.update(hero, monster_list)
         hero.update2_v2(int(map_.monster_point[map_.cnt-1]))
         monster_to_del = []
         for monster in monster_list:
             monster.update(hero)
             if monster.blood <= 0:
                 monster_to_del.append(monster)
         for monster in monster_to_del:
             monster_list.remove(monster)
             hero.money += 10
         # monsterball.update(hero)
         # monsterplane.update(hero)
         screen.fill(settings.bg_color)
         hero.blitme()
         for monster in monster_list:
             monster.blitme()
         map_.blitme()
     pygame.display.update()
Пример #4
0
class AlienInvasion:
    """Класс для управления ресурсами и поведением игры."""

    def __init__(self):
        """Инициализирует игру и создает игровые ресурсы."""
        global ai
        pygame.init()
        self.settings = Settings()

        if self.settings.fullscreen:
            self.screen = pygame.display.set_mode((0, 0), pygame.FULLSCREEN)
            self.settings.screen_width = self.screen.get_rect().width
            self.settings.screen_height = self.screen.get_rect().height
        else:
            self.screen = pygame.display.set_mode((self.settings.screen_width,
                                                   self.settings.screen_height))

        pygame.display.set_caption("Alien Invasion")
        # Создание экземпляра для хранения игровой статистики.
        self.stats = GameStats(self)
        self.sb = Scoreboard(self)

        self.ship = Ship(self)
        self.hero = Hero(self.screen)
        self.bullets = pygame.sprite.Group()
        self.aliens = pygame.sprite.Group()
        self._create_fleet()
        self.play_button = Button(self, "Play")

    def run_game(self):
        """Запуск основного цикла игры."""
        while True:
            self._check_events()
            if self.stats.game_active:
                self.ship.update()
                self._update_bullets()
                self._update_aliens()
            self._update_screen()

    def _check_keydown_enents(self, event):
        if event.key == pygame.K_RIGHT:
            # Переместить корабль вправо.
            self.ship.moving_right = True
        elif event.key == pygame.K_LEFT:
            # Переместить корабль вправо.
            self.ship.moving_left = True
        elif event.key == pygame.K_q:
            sys.exit()
        elif event.key == pygame.K_SPACE:
            self._fire_bullet()

    def _check_keyup_enents(self, event):
        if event.key == pygame.K_RIGHT:
            # Переместить корабль вправо.
            self.ship.moving_right = False
        elif event.key == pygame.K_LEFT:
            # Переместить корабль вправо.
            self.ship.moving_left = False

    def _check_events(self):
        """Отслеживание событий клавиатуры и мыши."""
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                sys.exit()
            elif event.type == pygame.KEYDOWN:
                self._check_keydown_enents(event)
            elif event.type == pygame.KEYUP:
                self._check_keyup_enents(event)
            elif event.type == pygame.MOUSEBUTTONDOWN:
                mouse_pos = pygame.mouse.get_pos()
                self._check_play_button(mouse_pos)

    def _check_play_button(self, mouse_pos):
        """Запускает новую игру при нажатии кнопки Play."""

        button_clicked = self.play_button.rect.collidepoint(mouse_pos)

        if button_clicked and not self.stats.game_active:
            # Сброс игровых настроек.
            self.settings.initialize_dynamic_settings()

            # Сброс игровой статистики.

            self.stats.reset_stats()
            self.stats.game_active = True
            self.sb.prep_score()
            self.sb.prep_level()
            self.sb.prep_ships()

            # Очистка списков пришельцев и снарядов.
            self.aliens.empty()
            self.bullets.empty()

            # Создание нового флота и размещение корабля в центре.
            self._create_fleet()
            self.ship.center_ship()

            # Указатель мыши скрывается.
            pygame.mouse.set_visible(False)

    def _fire_bullet(self):
        """Создание нового снаряда и включение его в группу bullets."""
        if len(self.bullets) < self.settings.bullets_allowed:
            new_bullet = Bullet(self)
            self.bullets.add(new_bullet)

    def _create_fleet(self):
        """Создание флота вторжения."""
        # Создание пришельца и вычисление количества пришельцев в ряду
        # Интервал между соседними пришельцами равен ширине пришельца.

        # Создание пришельца.
        alien = Alien(self)
        alien_width, alien_height = alien.rect.size

        available_space_x = self.settings.screen_width - (2 * alien_width)
        number_aliens_x = available_space_x // (2 * alien_width)

        """Определяет количество рядов, помещающихся на экране."""
        ship_height = self.ship.rect.height

        available_space_y = (self.settings.screen_height -
                           (3 * alien_height) - ship_height)
        number_rows = available_space_y // (2 * alien_height)

        # Создание флота вторжения.
        for row_number in range(number_rows):
            for alien_number in range(number_aliens_x):
                self._create_alien(alien_number, row_number)

    def _create_alien(self, alien_number, row_number):
        """ Создание пришельца и размещение его в ряду."""
        alien = Alien(self)
        alien_width, alien_height = alien.rect.size
        alien.x = alien_width + 2 * alien_width * alien_number
        alien.rect.x = alien.x
        alien.rect.y = alien.rect.height + 2 * alien.rect.height * row_number
        self.aliens.add(alien)

    def _check_fleet_edges(self):
        """Реагирует на достижение пришельцем края экрана."""
        for alien in self.aliens.sprites():
            if alien.check_edges():
                self._change_fleet_direction()
                break

    def _change_fleet_direction(self):
        """Опускает весь флот и меняет направление флота."""
        for alien in self.aliens.sprites():
            alien.rect.y += self.settings.fleet_drop_speed
        self.settings.fleet_direction *= -1

    def _update_bullets(self):
        """Обновление позиции снарядов и уничтожение старых снарядов"""
        # Обновление позиций снарядов
        self.bullets.update()

        # Удалениеснарядов, вышедших за край экрана.
        for bullet in self.bullets.copy():
            if bullet.rect.bottom <= 0:
                self.bullets.remove(bullet)

        self._check_bullet_alien_collisions()

    def _check_bullet_alien_collisions(self):
        """Обработка коллизий снарядов с пришельцами."""
        # Удаление снарядов и пришельцев, участвующих в коллизиях.
        collisions = pygame.sprite.groupcollide(
            self.bullets, self.aliens, True, True)

        if collisions:
            for aliens in collisions.values():
                self.stats.score += self.settings.alien_points * len(aliens)
            self.sb.prep_score()
            self.sb.check_high_score()

        if not self.aliens:
            # Уничтожение существующих снарядов и создание нового флота.
            self.bullets.empty()
            self._create_fleet()
            self.settings.increase_speed()

            # Увеличение уровня.
            self.stats.level += 1
            self.sb.prep_level()

    def _update_aliens(self):
        """Обновляет позиции всех пришельцев во флоте."""
        self._check_fleet_edges()
        self.aliens.update()

        # Проверка коллизий "пришелец — корабль".
        if pygame.sprite.spritecollideany(self.ship, self.aliens):
            self._ship_hit()

        # Проверить, добрались ли пришельцы до нижнего края экрана.
        self._check_aliens_bottom()

    def _check_aliens_bottom(self):
        """Проверяет, добрались ли пришельцы до нижнего края экрана."""
        screen_rect = self.screen.get_rect()
        for alien in self.aliens.sprites():
            if alien.rect.bottom >= screen_rect.bottom:
                # Происходит то же, что при столкновении с кораблем.
                self._ship_hit()
                break

    def _ship_hit(self):
        """Обрабатывает столкновение корабля с пришельцем."""
        if self.stats.ships_left > 0:
            # Уменьшение ships_left.
            self.stats.ships_left -= 1
            self.sb.prep_ships()

            # Отчистка списков прищельцев и снарядов.
            self.aliens.empty()
            self.bullets.empty()

            # Создание нового флота и размещение коробля в центре
            self._create_fleet()
            self.ship.center_ship()

            # Пауза
            sleep(0.5)
        else:
            self.stats.game_active = False
            pygame.mouse.set_visible(True)

    def _update_screen(self):
        """Отображение последнего прорисованного экрана."""
        self.screen.fill(self.settings.bg_color)
        self.ship.blitme()
        self.hero.blitme()

        for bullet in self.bullets.sprites():
            bullet.draw_bullet()

        self.aliens.draw(self.screen)

        self.sb.show_score()

        # Кнопка Play отображается в том случае, если игра неактивна.
        if not self.stats.game_active:
            self.play_button.draw_button()

        pygame.display.flip()