Beispiel #1
0
class Jogo(object):
    def __init__(self):

        pygame.init()
        self.FPS = 120
        self.clock = pygame.time.Clock()
        self.tela = pygame.display.set_mode((800, 600), pygame.DOUBLEBUF)
        self.gFase = GerenciadorFase()
        self.jogador = None
        self.__rodando = False
        self.__pausado = False
        self.tocando = False
        self.__qnt_moedas_fase_atual = 0
        self.__qnt_moedas = 0

        self.camera = Camera(800, 600)
        self.musica = GerenciadorMusica()

        self.menu = Menu(self)
        self.GUI = GUI(self.tela)

    def atualizar_entidades_fase(self):
        self.energias = self.gFase.get_energias()
        self.inimigos = self.gFase.get_inimigos()
        self.moedas = self.gFase.get_moedas()
        self.plats = self.gFase.get_plataformas()

    def __inicializar(self):

        self.__rodando = True
        self.gFase.iniciar()

        self.jogador = self.gFase.get_jogador()

        self.atualizar_entidades_fase()

        self.musica.tocar(self.gFase.get_id())

    def get_energias_restantes(self):
        return self.gFase.get_total_energias()

    def get_total_moedas_fase_atual(self):

        return self.__qnt_moedas_fase_atual

    def get_total_moedas(self):

        return self.__qnt_moedas

    def adicionar_moeda(self):

        self.__qnt_moedas_fase_atual += 1

    def atualizar_fase(self):

        self.atualizar_entidades_fase()
        self.jogador = self.gFase.reiniciar_fase_atual()

    def resetar(self):

        self.__qnt_moedas_fase_atual = 0

        self.jogador = self.gFase.resetar()

        self.atualizar_entidades_fase()

        for ene in self.energias:
            ene.resetar()

        for moe in self.moedas:
            moe.resetar()

    def __logica(self, dt):

        if self.jogador.get_vida() < 1:
            self.resetar()
            return

        self.jogador.logica(dt, self.plats)

        for plat in self.plats:
            plat.logica()

        for ene in self.energias:
            ene.logica(self.jogador)

        for ini in self.inimigos:
            ini.logica(self.jogador)

        for moe in self.moedas:
            if moe.get_ativo():
                colidiu = moe.logica(self.jogador)
                if colidiu:
                    self.adicionar_moeda()

                moe.iniciar_animacao_alpha()

        if self.gFase.objetivo_completo():

            if self.gFase.passar_fase():
                self.atualizar_fase()

                self.menu.definir_menu(1)

                if self.menu.get_opcao() == 1:
                    self.__rodando = False

                self.menu.restaurar()

                self.musica.tocar(self.gFase.get_id())

                self.__qnt_moedas += self.__qnt_moedas_fase_atual
                self.__qnt_moedas_fase_atual = 0

            else:  # Fim de Jogo ( não há mais fases para se passar )

                self.menu.definir_menu(3)
                opcao = self.menu.get_opcao()

                if opcao == 1:
                    self.__rodando = False
                elif opcao == 2:
                    self.gFase.recomecar()
                    self.resetar()
                    self.musica.tocar(self.gFase.get_id())
                    self.__qnt_moedas = 0
                    self.__qnt_moedas_fase_atual = 0

                self.menu.restaurar()

        if self.jogador.y > self.gFase.get_objeto_mais_baixo()[1] + 200:
            self.jogador.set_vida(0)

    def rodar(self):

        self.menu.definir_menu(0)

        if self.menu.get_opcao() == 0:

            self.__inicializar()
            dt = 0
            while self.__rodando:

                dt = self.clock.tick(self.FPS) / 1000.0
                self.__evento()
                self.__atualizar(dt)
                self.__desenhar(dt)

    def __evento(self):

        mods = pygame.key.get_mods()

        for e in pygame.event.get():

            if e.type == pygame.QUIT:
                self.__rodando = False

            elif e.type == pygame.MOUSEBUTTONDOWN:

                if e.button == 1:

                    # HACK

                    pos = pygame.mouse.get_pos()
                    self.jogador.set_vel_y(pos[1] - 600)

            elif e.type == pygame.KEYDOWN:

                if e.key == pygame.K_KP_MINUS:
                    self.musica.abaixar_volume()

                elif e.key == pygame.K_KP_PLUS:
                    self.musica.aumentar_volume()

                if e.key == pygame.K_ESCAPE:

                    self.menu.definir_menu(2)
                    opcao = self.menu.get_opcao()
                    if opcao == 1:
                        self.__rodando = False
                    elif opcao == 2:
                        self.resetar()

                    self.menu.restaurar()

                if mods & pygame.KMOD_CTRL | pygame.KMOD_SHIFT and e.key == pygame.K_RETURN:

                    if self.gFase.passar_fase():
                        self.atualizar_fase()
                        self.musica.tocar(self.gFase.get_id())

                        self.__qnt_moedas += self.__qnt_moedas_fase_atual
                        self.__qnt_moedas_fase_atual = 0

                elif mods & pygame.KMOD_SHIFT and e.key == pygame.K_RETURN:

                    if self.gFase.passar_fase():

                        self.atualizar_fase()

                        self.menu.definir_menu(1)

                        if self.menu.get_opcao() == 1:
                            self.__rodando = False

                        self.menu.restaurar()

                        self.musica.tocar(self.gFase.get_id())

                        self.__qnt_moedas += self.__qnt_moedas_fase_atual
                        self.__qnt_moedas_fase_atual = 0

                elif e.key == pygame.K_RETURN:

                    # HACK

                    self.jogador.set_y(-1200)

    def __desenhar(self, dt):

        self.tela.blit(self.gFase.get_fundo(), (0, 0))

        self.jogador.desenhar(self.tela, self.camera.aplicar(self.jogador, dt))

        for plat in self.plats:
            plat.desenhar(self.tela, self.camera.aplicar(plat, dt))

        for ene in self.energias:
            ene.desenhar(self.tela, self.camera.aplicar(ene, dt))

        for ini in self.inimigos:
            ini.desenhar(self.tela, self.camera.aplicar(ini, dt), self.camera,
                         dt)

        for moe in self.moedas:
            moe.desenhar(self.tela, self.camera.aplicar(moe, dt))

        #TODO: Fazer uma função só para desenhar o HUD.

        self.GUI.desenhar_volume(self.musica.get_volume())
        self.GUI.desenhar_moedas(self.get_total_moedas() +
                                 self.get_total_moedas_fase_atual())
        self.GUI.desenhar_energias(self.get_energias_restantes())
        self.GUI.desenhar_fase_atual(self.gFase.get_id())

    def __atualizar(self, dt):

        self.__logica(dt)
        self.camera.atualizar(self.jogador)

        pygame.display.flip()
Beispiel #2
0
class Jogo(object):
    def __init__(self):

        self.fps = 120
        self.clock = pygame.time.Clock()
        self.__screen = pygame.display.set_mode((800, 600))
        self.__gFase = GerenciadorFase()
        self.__jogador = None
        self.__rodando = False
        self.__pausado = False
        self.mudar_fps = False

        self.camera = Camera(800, 600)

    def __inicializar(self):

        self.__rodando = True
        self.__gFase.iniciar()
        self.__jogador = self.__gFase.get_jogador()

        for plat in self.__gFase.get_plataformas():
            plat.iniciar()

    def __logica(self, dt):
        energias = self.__gFase.get_energias()
        inimigos = self.__gFase.get_inimigos()
        moedas = self.__gFase.get_moedas()
        plats = self.__gFase.get_plataformas()

        if self.__jogador.get_vida() < 1:
            self.__jogador = self.__gFase.resetar()

            for ene in energias:
                ene.resetar()

            for moe in moedas:
                moe.resetar()

            return

        self.__jogador.logica(dt, plats)

        for plat in plats:
            plat.logica()

        for ene in energias:
            ene.logica(self.__jogador)

        for ini in inimigos:
            ini.logica(self.__jogador)

        for moe in moedas:
            if moe.get_ativo():
                moe.logica(self.__jogador)
                moe.iniciar_animacao_alpha()

        if self.__gFase.objetivo_completo():
            if self.__gFase.passar_fase():
                self.__jogador = self.__gFase.reiniciar_fase_atual()

    def rodar(self):

        self.__inicializar()
        dt = 0
        while self.__rodando:

            self.__evento()
            self.__atualizar(dt)
            self.__desenhar(dt)

            dt = self.clock.tick(self.fps) / 1000.0

    def __evento(self):

        for e in pygame.event.get():

            if e.type == pygame.QUIT:
                self.__rodando = False

            elif e.type == pygame.MOUSEBUTTONDOWN:

                if e.button == 1:
                    pos = pygame.mouse.get_pos()
                    print(self.__jogador.y)
                    print(self.__jogador.vel_y)
                    print(pos[1])
                    qnt = pos[1] - self.__jogador.y
                    self.__jogador.set_vel_y(pos[1] - 600)

            elif e.type == pygame.KEYDOWN:

                if e.key == pygame.K_ESCAPE:
                    self.__rodando = False

                if e.key == pygame.K_f:
                    if self.mudar_fps:
                        self.fps = 30
                    else:
                        self.fps = 120

                    self.mudar_fps = not self.mudar_fps

                if pygame.key.get_mods(
                ) & pygame.KMOD_SHIFT and e.key == pygame.K_RETURN:
                    if self.__gFase.passar_fase():
                        self.__jogador = self.__gFase.reiniciar_fase_atual()
                elif e.key == pygame.K_RETURN:
                    self.__jogador.set_y(-1200)

    def __desenhar(self, dt):

        self.__screen.blit(self.__gFase.get_fundo(), (0, 0))

        self.__jogador.desenhar(self.__screen,
                                self.camera.aplicar(self.__jogador, dt))

        for plat in self.__gFase.get_plataformas():
            plat.desenhar(self.__screen, self.camera.aplicar(plat, dt))

        for ene in self.__gFase.get_energias():
            ene.desenhar(self.__screen, self.camera.aplicar(ene, dt))

        for ini in self.__gFase.get_inimigos():
            ini.desenhar(self.__screen, self.camera.aplicar(ini, dt),
                         self.camera, dt)

        for moe in self.__gFase.get_moedas():
            moe.desenhar(self.__screen, self.camera.aplicar(moe, dt))

    def __atualizar(self, dt):
        print(self.fps)
        self.__logica(dt)
        self.camera.atualizar(self.__jogador)
        pygame.display.flip()