def start(self, screen: Mode): """ начало main_loop :param screen: начальный экран приложения """ manager = UIManager.instance() manager.set_screen(screen) # start game # время в секундах delta = 1 / 60 delta_time = -1 while manager.done: t = time.clock() for event in pygame.event.get(): manager.get_screen().call(event) manager.update(delta) manager.render() if self.fps_counter and delta_time != -1: self.fps_counter.add_delta(delta_time) self.fps_counter.draw(self._window) self._clock.tick(60) pygame.display.flip() self._window.fill((0, 0, 0)) delta_time = time.clock() - t FileManager.instance().save() pygame.quit()
def toggle(self): fps = not FileManager.instance().get(FileName.Setting, 'fps') FileManager.instance().set(FileName.Setting, 'fps', fps) self._buttons[2].text = 'Счетчик fps:{0}'.format( (lambda x: "Вкл" if x else "Выкл")(fps)) Core.instance().update_settings() UIManager.instance().set_screen(SettingsMode())
def __init__(self, level=FileName.Level_0): self._level = level FileManager.instance().load_level(self._level) # устаанвлиавет флаги на дубпг self._debug = FileManager.instance().get(FileName.Setting, 'debug') self._walls_debug = FileManager.instance().get(FileName.Setting, 'wall_debug') # первая тоска стены self._start = None self._world = World(debug=True) self._factory = DebugFactory(self._world, self._level, self._walls_debug) self._factory.create() GameManager.instance().create(self._world, self._factory.create_player()) self._screen_w = pygame.display.Info().current_w self._screen_h = pygame.display.Info().current_h self._zoom = 0 self._render = WorldRender() self._camera = Camera(self._screen_w, self._screen_h) self._render.set_camera(self._camera) self._direction = 0 self._class = StupidEnemy self._target = None
def toggle_debug(self): debug = not FileManager.instance().get(FileName.Setting, 'debug') FileManager.instance().set(FileName.Setting, 'debug', debug) self._buttons[0].text = 'Debug:{0}'.format((lambda x: "Вкл" if x else "Выкл")(debug)) Core.instance().update_settings() UIManager.instance().set_screen(DebugSettingsMode())
def __init__(self): self._screen_h = Core.instance().info().current_h self._screen_w = Core.instance().info().current_w self._buttons = [ Button( int(self._screen_w / 4), int(self._screen_h / 8), int(self._screen_w / 2), int(self._screen_h / 8), 'Громкость эффектов:{0}'.format(FileManager.instance().get( FileName.Setting, "volume")), lambda: False), Button(int(self._screen_w / 10), int(self._screen_h / 8), int(self._screen_w / 10), int(self._screen_h / 8), '▲', self.toggle_up), Button(int(self._screen_w / 1.25), int(self._screen_h / 8), int(self._screen_w / 10), int(self._screen_h / 8), '▼', self.toggle_down), Button( int(self._screen_w / 4), int(self._screen_h / 4) + int(self._screen_h / 8 * 0.29), int(self._screen_w / 2), int(self._screen_h / 8), 'Громкость музыки:{0}'.format(FileManager.instance().get( FileName.Setting, "music_volume")), lambda: False), Button(int(self._screen_w / 10), int(self._screen_h / 4) + int(self._screen_h / 8 * 0.29), int(self._screen_w / 10), int(self._screen_h / 8), '▲', self.toggle_music_up), Button(int(self._screen_w / 1.25), int(self._screen_h / 4) + int(self._screen_h / 8 * 0.29), int(self._screen_w / 10), int(self._screen_h / 8), '▼', self.toggle_music_down) ]
def reset(self, i): if i in self._resolutions: FileManager.instance().set(FileName.Setting, "width", self._resolutions[i][0]) FileManager.instance().set(FileName.Setting, "height", self._resolutions[i][1]) Core.instance().update_settings() UIManager.instance().set_screen(ResolutionMode())
def toggle_music_down(self): volume = FileManager.instance().get(FileName.Setting, "music_volume") if volume > 0: volume -= 0.01 volume = int(100 * volume) / 100 self._buttons[0].text = 'Громкость музыки:{0}'.format(volume) FileManager.instance().set(FileName.Setting, 'music_volume', volume) Core.instance().update_settings() UIManager.instance().set_screen(VolumeMode()) AudioManager.instance().set_volume()
def destroy(self): FileManager.instance().set(FileName.Player_Stats, "Heal", self._player.life) FileManager.instance().set(FileName.Player_Stats, "Gun", self._player.type_gun) FileManager.instance().set(FileName.Player_Stats, "Bullet", self._player.type_bul) FileManager.instance().set(FileName.Player_Stats, "MaxHeal", self._player.maxLife) FileManager.instance().save_player_stats()
def create_player(self): stat = { "Heal": FileManager.instance().get(FileName.Player_Stats, "Heal"), "Gun": FileManager.instance().get(FileName.Player_Stats, "Gun"), "Bullet": FileManager.instance().get(FileName.Player_Stats, "Bullet"), "MaxHeal": FileManager.instance().get(FileName.Player_Stats, "MaxHeal") } if self._level == FileName.Level_0: stat = Player.get_default_stats() if FileManager.instance().get(FileName.Setting, "god_mode"): stat = {"Heal": 10**6, "Gun": 1, "Bullet": 1, "MaxHeal": 10**6} return self._factory.create_player(stat)
def toggle_up(self): volume = FileManager.instance().get(FileName.Setting, "volume") if volume < 1: volume += 0.01 volume = int(100 * volume) / 100 if volume == 0.06: volume = 0.07 if volume == 0.57: volume = 0.58 self._buttons[0].text = 'Громкость эффектов:{0}'.format(volume) FileManager.instance().set(FileName.Setting, 'volume', volume) Core.instance().update_settings() UIManager.instance().set_screen(VolumeMode()) AudioManager.instance().set_volume()
def _key(self, event): if event.type == pygame.KEYDOWN: if event.key == pygame.K_ESCAPE or event.type == pygame.QUIT: FileManager.instance().save_level() UIManager.instance().set_screen(MenuMode()) else: if event.key == pygame.K_f: self.save() if event.key == pygame.K_1: self._class = StupidEnemy elif event.key == pygame.K_3: self._class = SetterItem elif event.key == pygame.K_4: self._class = Barrel elif event.key == pygame.K_5: self._class = Box elif event.key == pygame.K_2: self._class = Player elif event.key == pygame.K_w: self._direction |= 1 elif event.key == pygame.K_d: self._direction |= 2 elif event.key == pygame.K_s: self._direction |= 4 elif event.key == pygame.K_a: self._direction |= 8 elif event.key == pygame.K_q and self._target is not None: self._target.type_item += 1 elif event.key == pygame.K_MINUS: self._zoom = -1 elif event.key == pygame.K_EQUALS: self._zoom = 1 if event.type == pygame.KEYUP: if event.key == pygame.K_w: self._direction &= ~1 if event.key == pygame.K_d: self._direction &= ~2 if event.key == pygame.K_s: self._direction &= ~4 if event.key == pygame.K_a: self._direction &= ~8 if event.key == pygame.K_MINUS or event.key == pygame.K_EQUALS: self._zoom = 0
def update_settings(self): file = FileManager.instance() self._window = pygame.display.set_mode((file.get( FileName.Setting, 'width'), file.get(FileName.Setting, 'height')), self._flags) self._info = pygame.display.Info() if not file.get(FileName.Setting, 'fps'): self.fps_counter = None elif not self.fps_counter: self.fps_counter = Fps()
def __init__(self, level=FileName.Level_0): AudioManager.instance().set_music( 'resources/sounds/peacefullmusic.mp3') self._level = level FileManager.instance().load_level(self._level) self._world = World() self._factory = Factory(self._world, self._level) self._player = self.create_player() GameManager.instance().create(self._world, self._player) self._factory.create() self._screen_h = pygame.display.Info().current_h self._render = WorldRender() self._camera = Camera(Core.instance().info().current_w, self._screen_h) self._render.set_camera(self._camera) self._direction = 0 self._zoom = 0 # test PlayerUI self._playerUI = PlayerUI(self._player)
def __init__(self): self._screen_h = Core.instance().info().current_h self._screen_w = Core.instance().info().current_w self._buttons = [ Button( int(self._screen_w / 3), int(self._screen_h / 8), int(self._screen_w / 3), int(self._screen_h / 8), 'Debug:{0}'.format( (lambda x: "Вкл" if x else "Выкл")(FileManager.instance().get( FileName.Setting, "debug"))), self.toggle_debug), Button( int(self._screen_w / 3), int(2 * self._screen_h / 8) + int(self._screen_h / 8 * 0.29), int(self._screen_w / 3), int(self._screen_h / 8), 'Wall_debug:{0}'.format( (lambda x: "Вкл" if x else "Выкл")(FileManager.instance().get( FileName.Setting, "wall_debug"))), self.toggle_wall) ]
def create(self): self.create_wall() items = { 0: Nothing, 1: DefaultGunItem, 2: TripleGunItem, 3: ExpBulletItem, 4: Heal, 5: Boost } for inf in FileManager.instance().get(self._level_name, 'Walls'): self._world.add_actor( Wall(inf[0], inf[1], Structure.Polygon, inf[2])) for inf in FileManager.instance().get(self._level_name, 'Box'): self._world.add_actor(Box(inf[0], inf[1])) for inf in FileManager.instance().get(self._level_name, 'Barrel'): self._world.add_actor(Barrel(inf[0], inf[1])) for inf in FileManager.instance().get(self._level_name, 'Enemy'): self._world.add_actor(StupidEnemy(inf[0], inf[1])) for inf in FileManager.instance().get(self._level_name, 'Items'): self._world.add_actor(items[inf[2]](inf[0], inf[1]))
def __init__(self): Core._instance = self pygame.mixer.init(buffer=512) # инициализирует pygame pygame.init() FileManager.instance().load() # класс часов pygame self._clock = pygame.time.Clock() # экран на котором происходит отрисовка self._flags = pygame.DOUBLEBUF | pygame.FULLSCREEN self._window = pygame.display.set_mode((0, 0), self._flags) self._window.fill((0, 0, 0)) self._info = pygame.display.Info() if FileManager.instance().get(FileName.Setting, 'fps'): self.fps_counter = Fps() else: self.fps_counter = None self.update_settings()
def call(self, event): if event.type == pygame.KEYDOWN: if event.key == pygame.K_ESCAPE: UIManager.instance().set_screen(MenuMode()) if event.key == pygame.K_g: self._press_g += 1 if self._press_g == 3: self._press_g = 0 FileManager.instance().set( FileName.Setting, "god_mode", not FileManager.instance().get( FileName.Setting, "god_mode")) if event.type == pygame.MOUSEMOTION: mouse_pos = pygame.mouse.get_pos() for button in self._buttons: button.update(mouse_pos) if event.type == pygame.MOUSEBUTTONDOWN: mouse_pos = pygame.mouse.get_pos() for i in range(0, len(self._buttons)): if self._buttons[i].contain(mouse_pos): self._buttons[i].clicked() break
def create(self): items = { 0: Nothing, 1: Portal, 2: TripleGunItem, 3: ExpBulletItem, 4: Heal, 5: Boost } for inf in FileManager.instance().get(self._level_name, 'Walls'): self._world.add_actor( Wall(inf[0], inf[1], Structure.Polygon, inf[2])) for inf in FileManager.instance().get(self._level_name, 'Box'): self._world.add_actor(Box(inf[0], inf[1])) for inf in FileManager.instance().get(self._level_name, 'Barrel'): self._world.add_actor(Barrel(inf[0], inf[1])) for inf in FileManager.instance().get(self._level_name, 'Enemy'): if self._level_name == FileName.Boss0: self._world.add_actor(LevelBoss0(inf[0], inf[1])) else: self._world.add_actor(StupidEnemy(inf[0], inf[1])) for inf in FileManager.instance().get(self._level_name, 'Items'): self._world.add_actor(items[inf[2]](inf[0], inf[1]))
def __init__(self): self._screen_h = pygame.display.Info().current_h self._screen_w = pygame.display.Info().current_w self._buttons = [ Button(int(self._screen_w / 3), int(self._screen_h / 8), int(self._screen_w / 3), int(self._screen_h / 8), 'Громкость', lambda: UIManager.instance().set_screen(VolumeMode())), Button(int(self._screen_w / 3), int(self._screen_h / 4) + int(self._screen_h / 8 * 0.29), int(self._screen_w / 3), int(self._screen_h / 8), 'Выбрать разрешение', lambda: UIManager.instance().set_screen(ResolutionMode())), Button( int(self._screen_w / 3), int(3 * self._screen_h / 8) + 2 * int(self._screen_h / 8 * 0.29), int(self._screen_w / 3), int(self._screen_h / 8), 'Счетчик fps:{0}'.format( (lambda x: "Вкл" if x else "Выкл")(FileManager.instance().get( FileName.Setting, "fps"))), self.toggle), Button( int(self._screen_w / 3), int(3 * self._screen_h / 8) + 2 * int(self._screen_h / 8 * 0.29), int(self._screen_w / 3), int(self._screen_h / 8), 'Счетчик fps:{0}'.format( (lambda x: "Вкл" if x else "Выкл")(FileManager.instance().get( FileName.Setting, "fps"))), self.toggle), Button( int(self._screen_w / 3), int(4 * self._screen_h / 8) + 3 * int(self._screen_h / 8 * 0.29), int(self._screen_w / 3), int(self._screen_h / 8), 'Debug', lambda: UIManager.instance().set_screen(DebugSettingsMode())) ] self._press_g = 0
def __init__(self): # pygame.mixer.music.set_volume(1) self._screen_h = Core.instance().info().current_h self._screen_w = Core.instance().info().current_w self._buttons = [ Button( int(self._screen_w / 3), int(self._screen_h / 8), int(self._screen_w / 3), int(self._screen_h / 8), 'Новая игра', lambda: UIManager.instance().set_screen( (lambda: DebugMode() if FileManager.instance().get( FileName.Setting, 'debug') else GameMode())())), Button(int(self._screen_w / 3), int(self._screen_h / 4) + int(self._screen_h / 8 * 0.29), int(self._screen_w / 3), int(self._screen_h / 8), 'Настройки', lambda: UIManager.instance().set_screen(SettingsMode())) ]
def toggle_wall(self): debug = FileManager.instance().get(FileName.Setting, 'debug') wall_debug = not FileManager.instance().get(FileName.Setting, 'wall_debug') if not debug and wall_debug: debug = not debug FileManager.instance().set(FileName.Setting, 'debug', debug) FileManager.instance().set(FileName.Setting, 'wall_debug', wall_debug) self._buttons[1].text = 'Wall_debug:{0}'.format( (lambda x: "Вкл" if x else "Выкл")(wall_debug)) Core.instance().update_settings() UIManager.instance().set_screen(DebugSettingsMode())
def create_player(self, stats=None) -> Player: p = FileManager.instance().get(self._level_name, 'Player')[0] player = Player(p[0], p[1], stats) self._world.add_actor(player) return player
def save(self): actors = self._world.get_all_actors() if self._walls_debug: FileManager.instance().set(self._level, 'Walls', []) else: FileManager.instance().set(self._level, 'Enemy', []) FileManager.instance().set(self._level, 'Box', []) FileManager.instance().set(self._level, 'Heal', []) FileManager.instance().set(self._level, 'Barrel', []) FileManager.instance().set(self._level, 'Player', []) FileManager.instance().set(self._level, 'Items', []) for actor in actors: if self._walls_debug: if isinstance(actor, Wall): inf = (actor.pos[0], actor.pos[1], self._list_vertex(actor.shape.get_vertices())) FileManager.instance().get(self._level, 'Walls').append(inf) else: if isinstance(actor, StupidEnemy): inf = (actor.pos[0], actor.pos[1]) FileManager.instance().get(self._level, 'Enemy').append(inf) if isinstance(actor, Box): inf = (actor.pos[0], actor.pos[1]) FileManager.instance().get(self._level, 'Box').append(inf) if isinstance(actor, Barrel): inf = (actor.pos[0], actor.pos[1]) FileManager.instance().get(self._level, 'Barrel').append(inf) if isinstance(actor, SetterItem): inf = (actor.pos[0], actor.pos[1], actor.type_item) FileManager.instance().get(self._level, 'Items').append(inf) if isinstance(actor, Player): inf = (actor.pos[0], actor.pos[1]) FileManager.instance().get(self._level, 'Player').append(inf) if isinstance(actor, Heal): inf = (actor.pos[0], actor.pos[1], 4) FileManager.instance().get(self._level, 'Items').append(inf) if isinstance(actor, Boost): inf = (actor.pos[0], actor.pos[1], 5) FileManager.instance().get(self._level, 'Items').append(inf) if isinstance(actor, TripleGunItem): inf = (actor.pos[0], actor.pos[1], 2) FileManager.instance().get(self._level, 'Items').append(inf) if isinstance(actor, ExpBulletItem): inf = (actor.pos[0], actor.pos[1], 3) FileManager.instance().get(self._level, 'Items').append(inf) if isinstance(actor, Portal): inf = (actor.pos[0], actor.pos[1], 1) FileManager.instance().get(self._level, 'Items').append(inf)