Untitled
unknown
plain_text
2 years ago
4.8 kB
8
Indexable
import pygame
from config import *
from map import create_map, create_minimap
from menu import MainMenu, show_info
from mode import Modes
from player import Player
from render import Render, wall_textures
from result_window import Win, Losing
from sound import Music
from sprite import create_sprites, sprites_update, is_win
from stats import Stats
from utils import is_game_over
from weapon import Weapon
"""
Самая главная часть со связками всех файлов и их применение и от цифрация в окно
"""
class Game:
def __init__(self):
self._screen = pygame.display.set_mode(SCREEN_SIZE, pygame.DOUBLEBUF)
self._minimap_screen = pygame.Surface((MAP_SIZE[0] * MAP_TILE, MAP_SIZE[1] * MAP_TILE))
self._clock = pygame.time.Clock()
self._caption = WINDOW_NAME
self._sprites = list()
def _pre_init(self):
pygame.display.set_caption('DOOM')
self._menu = MainMenu(self._screen, self._clock)
self._losing = Losing(self._screen, self._clock)
self._win = Win(self._screen, self._clock)
def run(self):
self._pre_init()
self._menu.run()
self._init()
self._play_theme()
self._config()
self._update()
self._finish()
def _init(self):
self._weapons = [
Weapon(self._screen, 'Gun1', (500, 450), SHOTGUN_ANIMATION_FRAME_COUNTS, SHOTGUN, SHOTGUN_AMMO,
SHOTGUN_DAMAGE, SHOTGUN_MAX_DISTANCE),
Weapon(self._screen, 'Gun2', (400, 400), PISTOL_ANIMATION_FRAME_COUNTS, PISTOL, PISTOL_AMMO, PISTOL_DAMAGE,
PISTOL_MAX_DISTANCE),
Weapon(self._screen, 'Gun3', (350, 300), RIFLE_ANIMATION_FRAME_COUNTS, RIFLE, RIFLE_AMMO, RIFLE_DAMAGE,
RIFLE_MAX_DISTANCE)]
self._sprites = create_sprites(self._menu.chosen_level)
self._stats = Stats()
self._player = Player(TILE * 2 - TILE // 2, TILE * 2 - TILE // 2, self._weapons, self._sprites, self._stats)
self._render = Render(self._screen, self._player, self._minimap_screen, self._sprites, self._menu.chosen_level)
self._running = True
self._is_game_end = False
create_map(self._menu.chosen_level)
create_minimap(self._menu.chosen_level)
pygame.init()
def _config(self):
pygame.display.set_caption(self._caption)
pygame.mouse.set_visible(False)
def _respawn_arcade_sprites(self):
self._menu.arcade_class.spawn(SPRITES_COUNT_TO_SPAWN_IN_ARCADE)
sprites = create_sprites(self._menu.arcade_class.get_map())
self._render.sprites = sprites
self._player.sprites = sprites
self._sprites = sprites
def _update(self):
while self._running:
self._screen.fill(SKYBLUE)
self._clock.tick(FPS)
for event in pygame.event.get():
if event.type == pygame.QUIT:
self._running = False
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_ESCAPE:
self.run()
if self._is_game_end:
if event.type in [pygame.MOUSEBUTTONDOWN, pygame.KEYDOWN]:
self._running = False
if event.type == pygame.MOUSEBUTTONDOWN and not self._is_game_end:
self._player.on_mouse_down(event)
if self._is_all_arcade_sprites_killed():
self._respawn_arcade_sprites()
self._is_game_end = self.is_game_end()
if self._is_game_end:
total_time = self._stats.total_time()
kills_count = self._stats.get_kills()
if is_game_over(self._player):
self._player.dead()
self._losing.run(total_time, kills_count)
self.run()
elif is_win(self._sprites):
self._win.run(total_time, kills_count)
self.run()
else:
self._player.update()
self._render.render()
sprites_update(self._sprites, self._player)
show_info(self._screen, self._player)
pygame.display.set_caption('FPS: ' + str(int(self._clock.get_fps())))
pygame.display.flip()
def _is_all_arcade_sprites_killed(self):
return self._menu.mode == Modes.ARCADE and is_win(self._sprites)
def is_game_end(self):
return is_game_over(self._player) or is_win(self._sprites)
@staticmethod
def _finish():
pygame.quit()
@staticmethod
def _play_theme():
theme = Music()
theme.play_music()
if __name__ == '__main__':
game = Game()
game.run()
Editor is loading...
Leave a Comment