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()
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
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()
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()