示例#1
0
    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()
示例#2
0
 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())
示例#3
0
    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
示例#4
0
 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())
示例#5
0
 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)
     ]
示例#6
0
 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())
示例#7
0
 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()
示例#8
0
 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()
示例#9
0
 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)
示例#10
0
 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()
示例#11
0
 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
示例#12
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()
示例#13
0
    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)
示例#14
0
 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)
     ]
示例#15
0
 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]))
示例#16
0
    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()
示例#17
0
 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
示例#18
0
 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]))
示例#19
0
 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
示例#20
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()))
     ]
示例#21
0
 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())
示例#22
0
 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
示例#23
0
    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)