Exemple #1
0
class EstadoSom(Estado):
    def __init__(self):
        super().__init__()
        self.__texto_som = Texto("Som", "Materials/Early GameBoy.ttf", 50, self.BLACK, [130, 40])
        
        self.__texto_musica = Texto("Volume música:", "Materials/Retro Gaming.ttf", 25, self.WHITE, [20, 150])
        self.__texto_efeitos = Texto("Volume efeitos:", "Materials/Retro Gaming.ttf", 25, self.WHITE, [20, 300])
        
        self.__slider_musica = Slider(self.tela.display, 20, 230, 300, 20, min=0, max=1, step=0.1, handleColour=self.GREEN)
        self.__slider_musica.setValue(self.som_controller.volume_atual_music)
        self.__slider_sons = Slider(self.tela.display, 20, 380, 300, 20, min=0, max=1, step=0.1, handleColour=self.GREEN)
        self.__slider_sons.setValue(self.som_controller.volume_atual_sound)
        self.__sliders = [self.__slider_musica, self.__slider_sons]
        self.__events_som = EventsSom(self.__sliders)

        self.__numero_musica = Texto("", "Materials/Retro Gaming.ttf", 25, self.WHITE, [335, 225])
        self.__numero_sons = Texto("", "Materials/Retro Gaming.ttf", 25, self.WHITE, [335, 375])
        
        self.__imagem_botao_voltar = pygame.image.load("Materials/voltar.png").convert_alpha(self.tela.display)
        self.__fundo_voltar = Fundo([20, 510, 70, 70], self.WHITE)
        self.__botao_voltar = BotaoImagem(self.__imagem_botao_voltar, (25, 515), self.__fundo_voltar, self.GREEN, self.DARK_GREEN, self.__events_som)
        
        self.__texto_vol_padrao = Texto("Volume Padrão", "Materials/Retro Gaming.ttf", 27, self.BLACK, [125, 525])
        self.__fundo_vol_padrao = Fundo([110, 510, 270, 70], self.WHITE)
        self.__botao_vol_padrao = Botao(self.__texto_vol_padrao, self.__fundo_vol_padrao, self.GREEN, self.DARK_GREEN, self.__events_som)


    def start(self):
        #Updates
        self.__events_som.check_events()
        self.som_controller.set_volume_music(self.__slider_musica.getValue())
        self.som_controller.set_volume_sounds(self.__slider_sons.getValue())
        voltar = self.__botao_voltar.update()
        padrao = self.__botao_vol_padrao.update()
        if padrao:
            self.som_controller.set_volume_padrao()
            self.__slider_musica.setValue(self.som_controller.volume_atual_music)
            self.__slider_sons.setValue(self.som_controller.volume_atual_sound)
        
        porcentagem_musica = self.__slider_musica.getValue() * 100
        porcentagem_sons = self.__slider_sons.getValue() * 100
        self.__numero_musica.texto = str(int(porcentagem_musica)) + "%"
        self.__numero_sons.texto = str(int(porcentagem_sons)) + "%"

        #Draws
        self.tela.fill(self.GREY)
        self.__texto_som.draw()
        self.__texto_musica.draw()
        self.__texto_efeitos.draw()
        self.__slider_musica.draw()
        self.__slider_sons.draw()
        self.__numero_musica.draw()
        self.__numero_sons.draw()
        self.__botao_voltar.draw()
        self.__botao_vol_padrao.draw()

        if voltar:
            return "inicial"
        else:
            return "som"
Exemple #2
0
    def __init__(self, jogador, obstaculo_controller, efeito_controller):
        super().__init__(jogador, obstaculo_controller, efeito_controller)
        self.__recorde_salvo = False

        self.__texto_derrota = Texto("Derrota", "Materials/Early GameBoy.ttf",
                                     50, self.BLACK, [30, 40])

        self.__fundo_pontuacao = Fundo([20, 140, 360, 70], self.DARK_GREY)
        self.__texto_pontuacao = Texto(f"Pontos: {self.pontuacao.pontos}",
                                       "Materials/Early GameBoy.ttf", 20,
                                       self.WHITE, [30, 160])

        self.__nome = TextBox(self.tela.display,
                              20,
                              250,
                              280,
                              70,
                              borderColour=(0, 0, 0),
                              textColour=(0, 0, 0),
                              radius=10,
                              borderThickness=5)
        self.__nome.font = pygame.font.Font("Materials/Retro Gaming.ttf", 30)
        self.__texto_recorde = Texto("Insira seu nome e clique em salvar.",
                                     "Materials/Retro Gaming.ttf", 12,
                                     self.BLACK, [25, 325])

        self.__events_derrota = EventsDerrota(self.__nome)

        self.__imagem_botao_salvar = pygame.image.load(
            "Materials/disquete.png").convert_alpha(self.tela.display)
        self.__fundo_salvar = Fundo([310, 250, 70, 70], self.WHITE)
        self.__botao_salvar = BotaoImagem(self.__imagem_botao_salvar,
                                          (315, 255), self.__fundo_salvar,
                                          self.GREEN, self.DARK_GREEN,
                                          self.__events_derrota)

        self.__texto_jogar_novamente = Texto("Jogar novamente",
                                             "Materials/Retro Gaming.ttf", 30,
                                             self.WHITE, [40, 395])
        self.__fundo_jogar_novamente = Fundo([20, 380, 360, 70], self.WHITE)
        self.__botao_jogar_novamente = Botao(self.__texto_jogar_novamente,
                                             self.__fundo_jogar_novamente,
                                             self.GREEN, self.DARK_GREEN,
                                             self.__events_derrota)

        self.__texto_menu = Texto("Menu", "Materials/Retro Gaming.ttf", 40,
                                  self.WHITE, [135, 490])
        self.__fundo_menu = Fundo([20, 480, 360, 70], self.WHITE)
        self.__botao_menu = Botao(self.__texto_menu, self.__fundo_menu,
                                  self.GREEN, self.DARK_GREEN,
                                  self.__events_derrota)
Exemple #3
0
    def __init__(self, jogador):
        super().__init__(jogador)
        self.__events_inicial = EventsPadrao()

        self.__nome_jogo1 = Texto("co", "Materials/Mario-Kart-DS.ttf", 50,
                                  self.WHITE, [22, 100])
        self.__nome_jogo2 = Texto("RUN", "Materials/Mario-Kart-DS.ttf", 60,
                                  self.WHITE, [79, 85])
        self.__nome_jogo3 = Texto("avirus", "Materials/Mario-Kart-DS.ttf", 50,
                                  self.WHITE, [209, 100])

        self.__imagem_regras = pygame.image.load(
            "Materials/interrogacao.png").convert_alpha(self.tela.display)
        self.__fundo_regras = Fundo([340, 10, 50, 50], self.WHITE)
        self.__botao_regras = BotaoImagem(self.__imagem_regras, [345, 15],
                                          self.__fundo_regras, self.GREEN,
                                          self.DARK_GREEN,
                                          self.__events_inicial)

        self.__imagem_som = pygame.image.load(
            "Materials/som.png").convert_alpha(self.tela.display)
        self.__fundo_som = Fundo([280, 10, 50, 50], self.WHITE)
        self.__botao_som = BotaoImagem(self.__imagem_som, [285, 15],
                                       self.__fundo_som, self.GREEN,
                                       self.DARK_GREEN, self.__events_inicial)

        self.__imagem_devs = pygame.image.load(
            "Materials/devs.png").convert_alpha(self.tela.display)
        self.__fundo_devs = Fundo([220, 10, 50, 50], self.WHITE)
        self.__botao_devs = BotaoImagem(self.__imagem_devs, [225, 15],
                                        self.__fundo_devs, self.GREEN,
                                        self.DARK_GREEN, self.__events_inicial)

        self.__fundo_pontuacao = Fundo([20, 200, 360, 70], self.DARK_GREY)
        self.__texto_pontuacao = Texto(
            f"Recorde: {self.recordes_controller.primeiro()}",
            "Materials/Early GameBoy.ttf", 20, self.WHITE, [30, 220])

        self.__texto_recordes = Texto("Recordes", "Materials/Retro Gaming.ttf",
                                      40, self.WHITE, [80, 310])
        self.__fundo_recordes = Fundo([20, 300, 360, 70], self.WHITE)
        self.__botao_recordes = Botao(self.__texto_recordes,
                                      self.__fundo_recordes, self.GREEN,
                                      self.DARK_GREEN, self.__events_inicial)

        self.__texto_play = Texto("PLAY", "Materials/Retro Gaming.ttf", 60,
                                  self.WHITE, [110, 397])
        self.__fundo_play = Fundo([20, 400, 360, 70], self.WHITE)
        self.__botao_play = Botao(self.__texto_play, self.__fundo_play,
                                  self.GREEN, self.DARK_GREEN,
                                  self.__events_inicial)
Exemple #4
0
 def criar_botoes(self):
     for texto in self.lista_opcoes:
         self.lista_botoes.append(
             Botao(self.amb, self.screen, self.lista_imgs, self.pos_inicial,
                   texto, self.local_font + "anagram.ttf",
                   self.lista_cores))
         self.pos_inicial = (self.pos_inicial[0], self.pos_inicial[1] + 225)
Exemple #5
0
    def __init__(self, jogador, obstaculo_controller, efeito_controller):
        super().__init__(jogador, obstaculo_controller, efeito_controller)
        self.__events_pausa = EventsPausa()

        self.__texto_pausado = Texto("Pausado", "Materials/Early GameBoy.ttf",
                                     50, self.BLACK, [30, 70])

        self.__texto_continuar = Texto("Continuar",
                                       "Materials/Retro Gaming.ttf", 40,
                                       self.WHITE, [75, 210])
        self.__fundo_continuar = Fundo([20, 200, 360, 70], self.WHITE)
        self.__botao_continuar = Botao(self.__texto_continuar,
                                       self.__fundo_continuar, self.GREEN,
                                       self.DARK_GREEN, self.__events_pausa)

        self.__texto_menu = Texto("Menu", "Materials/Retro Gaming.ttf", 40,
                                  self.WHITE, [135, 310])
        self.__fundo_menu = Fundo([20, 300, 360, 70], self.WHITE)
        self.__botao_menu = Botao(self.__texto_menu, self.__fundo_menu,
                                  self.GREEN, self.DARK_GREEN,
                                  self.__events_pausa)
Exemple #6
0
    def __init__(self):
        """Inicializa o jogo e cria os recursos"""
        pygame.init()
        self.configuracoes = Configuracoes()
        """Para habilitar modo Fullscreen, retire as anotações 
        dos três códigos abaixo e adicione observação no 'self.screen'"""
        # self.screen = pygame.display.set_mode((0, 0), pygame.FULLSCREEN)
        # self.configuracoes.screen_width = self.screen.get_rect().width
        # self.configuracoes.screen_height = self.screen.get_rect().height
        self.screen = pygame.display.set_mode(
            (self.configuracoes.screen_width,
             self.configuracoes.screen_height))
        pygame.display.set_caption("Invasão Klingon")
        # Cria uma instância para armazenar os dados do jogo
        self.stats = GameStats(self)
        self.placar = Placar(self)
        self.placar = Placar(self)
        # Músicas de fundo
        self.open_music = pygame.mixer.Sound(
            os.path.join("complemento/tng_open.mp3")
        )  # Abertura da série Star Trek: Next Generation
        self.battle_music = pygame.mixer.Sound(
            os.path.join(
                "complemento/first_contact.mp3"))  # Assimilation battle sound
        # Sprites
        self.nave = Nave(self)
        self.tiros = pygame.sprite.Group()
        self.klingons = pygame.sprite.Group()
        self._criar_frota()

        # Botão de iniciar
        self.play_botao = Botao(self, "Iniciar")

        # Icon
        self.icon = pygame.transform.scale(
            pygame.image.load(os.path.join("complemento/klingon_icon.png")),
            (35, 35))
        pygame.display.set_icon(self.icon)
Exemple #7
0
    def __init__(self):
        super().__init__()
        self.__texto_som = Texto("Som", "Materials/Early GameBoy.ttf", 50, self.BLACK, [130, 40])
        
        self.__texto_musica = Texto("Volume música:", "Materials/Retro Gaming.ttf", 25, self.WHITE, [20, 150])
        self.__texto_efeitos = Texto("Volume efeitos:", "Materials/Retro Gaming.ttf", 25, self.WHITE, [20, 300])
        
        self.__slider_musica = Slider(self.tela.display, 20, 230, 300, 20, min=0, max=1, step=0.1, handleColour=self.GREEN)
        self.__slider_musica.setValue(self.som_controller.volume_atual_music)
        self.__slider_sons = Slider(self.tela.display, 20, 380, 300, 20, min=0, max=1, step=0.1, handleColour=self.GREEN)
        self.__slider_sons.setValue(self.som_controller.volume_atual_sound)
        self.__sliders = [self.__slider_musica, self.__slider_sons]
        self.__events_som = EventsSom(self.__sliders)

        self.__numero_musica = Texto("", "Materials/Retro Gaming.ttf", 25, self.WHITE, [335, 225])
        self.__numero_sons = Texto("", "Materials/Retro Gaming.ttf", 25, self.WHITE, [335, 375])
        
        self.__imagem_botao_voltar = pygame.image.load("Materials/voltar.png").convert_alpha(self.tela.display)
        self.__fundo_voltar = Fundo([20, 510, 70, 70], self.WHITE)
        self.__botao_voltar = BotaoImagem(self.__imagem_botao_voltar, (25, 515), self.__fundo_voltar, self.GREEN, self.DARK_GREEN, self.__events_som)
        
        self.__texto_vol_padrao = Texto("Volume Padrão", "Materials/Retro Gaming.ttf", 27, self.BLACK, [125, 525])
        self.__fundo_vol_padrao = Fundo([110, 510, 270, 70], self.WHITE)
        self.__botao_vol_padrao = Botao(self.__texto_vol_padrao, self.__fundo_vol_padrao, self.GREEN, self.DARK_GREEN, self.__events_som)
class EstadoPausa(Estado):
    def __init__(self, jogador, obstaculo_controller, efeito_controller):
        super().__init__(jogador, obstaculo_controller, efeito_controller)
        self.__events_pausa = EventsPausa()

        self.__texto_pausado = Texto("Pausado", "Materials/Early GameBoy.ttf",
                                     50, self.BLACK, [30, 70])

        self.__texto_continuar = Texto("Continuar",
                                       "Materials/Retro Gaming.ttf", 40,
                                       self.WHITE, [75, 210])
        self.__fundo_continuar = Fundo([20, 200, 360, 70], self.WHITE)
        self.__botao_continuar = Botao(self.__texto_continuar,
                                       self.__fundo_continuar, self.GREEN,
                                       self.DARK_GREEN, self.__events_pausa)

        self.__texto_menu = Texto("Menu", "Materials/Retro Gaming.ttf", 40,
                                  self.WHITE, [135, 310])
        self.__fundo_menu = Fundo([20, 300, 360, 70], self.WHITE)
        self.__botao_menu = Botao(self.__texto_menu, self.__fundo_menu,
                                  self.GREEN, self.DARK_GREEN,
                                  self.__events_pausa)

    def start(self):
        #Updates
        self.__events_pausa.check_events()
        continuar = self.__botao_continuar.update()
        menu = self.__botao_menu.update()

        #Draws
        self.tela.fill(self.GREY)
        self.__texto_pausado.draw()
        self.__botao_continuar.draw()
        self.__botao_menu.draw()

        if self.__events_pausa.pausa or continuar:
            #self.som_controller.unpause_music()
            return "jogando"
        elif menu:
            self.pontuacao.zerar()
            self.velocidade_controller.zerar()
            self.fases_controller.zerar()
            self.jogador.reset()
            self.obstaculo_controller.zerar()
            self.efeito_controller.zerar()
            '''
            self.som_controller.stop_music()
            self.som_controller.play_music(1)
            '''
            return "inicial"
        else:
            return "pausa"
Exemple #9
0
def rodar_game():
    pygame.init()  #inicializa a biblioteca paygame

    configuracoes = Configuracoes()  #cria o objeto configuracoes

    tela = pygame.display.set_mode(
        (configuracoes.largura_tela,
         configuracoes.altura_tela))  #configura as dimensoes da tela
    pygame.display.set_caption(
        "Invasão Alienígena")  #adiciona um titulo a tela criada

    play = Botao(configuracoes, tela, "PLAY")  #criar o objeto botao para play

    nave = Nave(configuracoes, tela)  #criar o objeto nave

    tiros = Group()  #criar um grupo de tiros

    aliens = Group()  #criar um grupo de aliens

    naves_vidas = Group()  #criar um grupo de naves para vidas

    tela_pontuacao = TelaPontuacao(configuracoes,
                                   tela)  #criar tela para pontuacao

    fg.criar_frota_aliens(aliens, nave, configuracoes,
                          tela)  #criar frota inicial de aliens

    fg.criar_naves_vidas(naves_vidas, configuracoes,
                         tela)  #criar as tres naves vidas

    while True:
        fg.checar_eventos(nave, tiros, configuracoes, tela,
                          play)  #checa eventos do teclado
        fg.atualizar_tela(configuracoes, nave, naves_vidas, tela, tiros,
                          aliens, play,
                          tela_pontuacao)  #atualiza a tela para cada ciclo
        if configuracoes.jogo_ativo:  #condicao para jogo comecar
            nave.atualizacao_nave()  #atualiza a posicao da nave
            fg.atualizacao_tiros(tiros)  #atualiza a posicao dos tiros
            tela_pontuacao.atualizacao_pontuacao()
            fg.atualizar_frota(aliens, tiros, nave, naves_vidas, configuracoes,
                               tela)  #atualiza a tela por ciclo do laco
Exemple #10
0
class EstadoDerrota(Estado):
    def __init__(self, jogador, obstaculo_controller, efeito_controller):
        super().__init__(jogador, obstaculo_controller, efeito_controller)
        self.__recorde_salvo = False

        self.__texto_derrota = Texto("Derrota", "Materials/Early GameBoy.ttf",
                                     50, self.BLACK, [30, 40])

        self.__fundo_pontuacao = Fundo([20, 140, 360, 70], self.DARK_GREY)
        self.__texto_pontuacao = Texto(f"Pontos: {self.pontuacao.pontos}",
                                       "Materials/Early GameBoy.ttf", 20,
                                       self.WHITE, [30, 160])

        self.__nome = TextBox(self.tela.display,
                              20,
                              250,
                              280,
                              70,
                              borderColour=(0, 0, 0),
                              textColour=(0, 0, 0),
                              radius=10,
                              borderThickness=5)
        self.__nome.font = pygame.font.Font("Materials/Retro Gaming.ttf", 30)
        self.__texto_recorde = Texto("Insira seu nome e clique em salvar.",
                                     "Materials/Retro Gaming.ttf", 12,
                                     self.BLACK, [25, 325])

        self.__events_derrota = EventsDerrota(self.__nome)

        self.__imagem_botao_salvar = pygame.image.load(
            "Materials/disquete.png").convert_alpha(self.tela.display)
        self.__fundo_salvar = Fundo([310, 250, 70, 70], self.WHITE)
        self.__botao_salvar = BotaoImagem(self.__imagem_botao_salvar,
                                          (315, 255), self.__fundo_salvar,
                                          self.GREEN, self.DARK_GREEN,
                                          self.__events_derrota)

        self.__texto_jogar_novamente = Texto("Jogar novamente",
                                             "Materials/Retro Gaming.ttf", 30,
                                             self.WHITE, [40, 395])
        self.__fundo_jogar_novamente = Fundo([20, 380, 360, 70], self.WHITE)
        self.__botao_jogar_novamente = Botao(self.__texto_jogar_novamente,
                                             self.__fundo_jogar_novamente,
                                             self.GREEN, self.DARK_GREEN,
                                             self.__events_derrota)

        self.__texto_menu = Texto("Menu", "Materials/Retro Gaming.ttf", 40,
                                  self.WHITE, [135, 490])
        self.__fundo_menu = Fundo([20, 480, 360, 70], self.WHITE)
        self.__botao_menu = Botao(self.__texto_menu, self.__fundo_menu,
                                  self.GREEN, self.DARK_GREEN,
                                  self.__events_derrota)

    def salvar_recorde(self):
        if self.__nome.getText() != "":
            if len(self.__nome.getText()) > 10:
                self.__texto_recorde.texto = "Digite um nome menor, limite 10 caracteres."
            elif not self.__recorde_salvo:
                msg, salvo = self.recordes_controller.inclui_recorde(
                    self.__nome.getText(), self.pontuacao.pontos)
                self.__texto_recorde.texto = msg
                self.__recorde_salvo = salvo
            else:
                self.__texto_recorde.texto = "Só é possível salvar o recorde uma vez."
        else:
            self.__texto_recorde.texto = "Digite um nome."

        self.__nome.setText("")
        self.__nome.cursorPosition = 0

    def start(self):
        #Updates
        self.__events_derrota.check_events()
        jogar_novamente = self.__botao_jogar_novamente.update()
        menu_derrota = self.__botao_menu.update()

        salvar_recorde = self.__botao_salvar.update()
        if salvar_recorde:
            self.salvar_recorde()

        #Draws
        self.tela.fill(self.GREY)
        self.__texto_derrota.draw()
        self.__fundo_pontuacao.blitme()

        self.__texto_pontuacao.texto = str(f"Pontos: {self.pontuacao.pontos}")
        self.__texto_pontuacao.draw()

        self.__nome.draw()
        self.__botao_salvar.draw()
        self.__texto_recorde.draw()

        self.__botao_jogar_novamente.draw()
        self.__botao_menu.draw()

        if jogar_novamente:
            self.__recorde_salvo = False
            self.__texto_recorde.texto = "Insira seu nome e clique em salvar."
            self.pontuacao.zerar()
            self.velocidade_controller.zerar()
            self.fases_controller.zerar()
            self.jogador.reset()
            self.obstaculo_controller.zerar()
            self.efeito_controller.zerar()
            '''
            self.som_controller.stop_music()
            self.som_controller.play_music(0)
            '''
            return "jogando"
        elif menu_derrota:
            self.__recorde_salvo = False
            self.__texto_recorde.texto = "Insira seu nome e clique em salvar."
            self.pontuacao.zerar()
            self.velocidade_controller.zerar()
            self.fases_controller.zerar()
            self.jogador.reset()
            self.obstaculo_controller.zerar()
            self.efeito_controller.zerar()
            return "inicial"
        else:
            return "derrota"
Exemple #11
0
class EstadoInicial(Estado):
    def __init__(self, jogador):
        super().__init__(jogador)
        self.__events_inicial = EventsPadrao()

        self.__nome_jogo1 = Texto("co", "Materials/Mario-Kart-DS.ttf", 50,
                                  self.WHITE, [22, 100])
        self.__nome_jogo2 = Texto("RUN", "Materials/Mario-Kart-DS.ttf", 60,
                                  self.WHITE, [79, 85])
        self.__nome_jogo3 = Texto("avirus", "Materials/Mario-Kart-DS.ttf", 50,
                                  self.WHITE, [209, 100])

        self.__imagem_regras = pygame.image.load(
            "Materials/interrogacao.png").convert_alpha(self.tela.display)
        self.__fundo_regras = Fundo([340, 10, 50, 50], self.WHITE)
        self.__botao_regras = BotaoImagem(self.__imagem_regras, [345, 15],
                                          self.__fundo_regras, self.GREEN,
                                          self.DARK_GREEN,
                                          self.__events_inicial)

        self.__imagem_som = pygame.image.load(
            "Materials/som.png").convert_alpha(self.tela.display)
        self.__fundo_som = Fundo([280, 10, 50, 50], self.WHITE)
        self.__botao_som = BotaoImagem(self.__imagem_som, [285, 15],
                                       self.__fundo_som, self.GREEN,
                                       self.DARK_GREEN, self.__events_inicial)

        self.__imagem_devs = pygame.image.load(
            "Materials/devs.png").convert_alpha(self.tela.display)
        self.__fundo_devs = Fundo([220, 10, 50, 50], self.WHITE)
        self.__botao_devs = BotaoImagem(self.__imagem_devs, [225, 15],
                                        self.__fundo_devs, self.GREEN,
                                        self.DARK_GREEN, self.__events_inicial)

        self.__fundo_pontuacao = Fundo([20, 200, 360, 70], self.DARK_GREY)
        self.__texto_pontuacao = Texto(
            f"Recorde: {self.recordes_controller.primeiro()}",
            "Materials/Early GameBoy.ttf", 20, self.WHITE, [30, 220])

        self.__texto_recordes = Texto("Recordes", "Materials/Retro Gaming.ttf",
                                      40, self.WHITE, [80, 310])
        self.__fundo_recordes = Fundo([20, 300, 360, 70], self.WHITE)
        self.__botao_recordes = Botao(self.__texto_recordes,
                                      self.__fundo_recordes, self.GREEN,
                                      self.DARK_GREEN, self.__events_inicial)

        self.__texto_play = Texto("PLAY", "Materials/Retro Gaming.ttf", 60,
                                  self.WHITE, [110, 397])
        self.__fundo_play = Fundo([20, 400, 360, 70], self.WHITE)
        self.__botao_play = Botao(self.__texto_play, self.__fundo_play,
                                  self.GREEN, self.DARK_GREEN,
                                  self.__events_inicial)

    def start(self):
        #Updates
        if not self.musica:
            #self.som_controller.play_music(1)
            self.musica = True
        self.__events_inicial.check_events()
        play = self.__botao_play.update()
        regras = self.__botao_regras.update()
        recordes = self.__botao_recordes.update()
        som = self.__botao_som.update()
        devs = self.__botao_devs.update()

        # Draws
        self.tela.fill(self.GREY)
        self.__nome_jogo1.draw()
        self.__nome_jogo2.draw()
        self.__nome_jogo3.draw()
        self.__fundo_pontuacao.blitme()
        if len(self.recordes_controller.recordes) > 0:
            self.__texto_pontuacao.texto = str(
                f"Recorde: {self.recordes_controller.primeiro()['pontos']}")
        else:
            self.__texto_pontuacao.texto = str(f"Recorde:")
        self.__texto_pontuacao.draw()

        self.__botao_play.draw()
        self.__botao_regras.draw()
        self.__botao_som.draw()
        self.__botao_devs.draw()
        self.__botao_recordes.draw()

        if play:
            #self.som_controller.stop_music()
            #self.som_controller.play_music(0)
            return "jogando"
        elif regras:
            return "regras"
        elif recordes:
            return "recorde"
        elif som:
            return "som"
        elif devs:
            return "developers"
        else:
            return "inicial"
Exemple #12
0
class InvasaoKlingon:
    """Class para lidar com os comportamentos do jogo"""
    def __init__(self):
        """Inicializa o jogo e cria os recursos"""
        pygame.init()
        self.configuracoes = Configuracoes()
        """Para habilitar modo Fullscreen, retire as anotações 
        dos três códigos abaixo e adicione observação no 'self.screen'"""
        # self.screen = pygame.display.set_mode((0, 0), pygame.FULLSCREEN)
        # self.configuracoes.screen_width = self.screen.get_rect().width
        # self.configuracoes.screen_height = self.screen.get_rect().height
        self.screen = pygame.display.set_mode(
            (self.configuracoes.screen_width,
             self.configuracoes.screen_height))
        pygame.display.set_caption("Invasão Klingon")
        # Cria uma instância para armazenar os dados do jogo
        self.stats = GameStats(self)
        self.placar = Placar(self)
        self.placar = Placar(self)
        # Músicas de fundo
        self.open_music = pygame.mixer.Sound(
            os.path.join("complemento/tng_open.mp3")
        )  # Abertura da série Star Trek: Next Generation
        self.battle_music = pygame.mixer.Sound(
            os.path.join(
                "complemento/first_contact.mp3"))  # Assimilation battle sound
        # Sprites
        self.nave = Nave(self)
        self.tiros = pygame.sprite.Group()
        self.klingons = pygame.sprite.Group()
        self._criar_frota()

        # Botão de iniciar
        self.play_botao = Botao(self, "Iniciar")

        # Icon
        self.icon = pygame.transform.scale(
            pygame.image.load(os.path.join("complemento/klingon_icon.png")),
            (35, 35))
        pygame.display.set_icon(self.icon)

    def run_game(self):
        """Inicia o loop principal do jogo"""
        while True:
            self._check_events()
            self.open_music.play(loops=-1)
            self.open_music.set_volume(0.1)
            if self.stats.game_active:
                self.nave.update()
                self.open_music.stop()
                if self.open_music.stop:
                    self.battle_music.play(loops=-1)
                self._update_tiros()
                self._update_klingons()

            self._update_screen()

    def _check_events(self):
        """Notar o uso do teclado e do mouse"""
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                sys.exit()
            elif event.type == pygame.KEYDOWN:
                self._check_keydown_events(event)
            elif event.type == pygame.KEYUP:
                self._check_keyup_events(event)
            elif event.type == pygame.MOUSEBUTTONDOWN and self.stats.game_active is False:
                mouse_pos = pygame.mouse.get_pos()
                self._check_iniciar_botao(mouse_pos)
                pygame.mixer.Channel(2).play(
                    pygame.mixer.Sound(
                        os.path.join("complemento/computerbeep_10.mp3")))

    def _check_iniciar_botao(self, mouse_pos):
        """Inicia um novo jogo quando o usuário clicar no botão"""
        click_botao = self.play_botao.rect.collidepoint(mouse_pos)
        if click_botao and not self.stats.game_active:
            # Reset as configs do jogo
            self.configuracoes.inicializar_dinamica_configs()
            # Reset os stats do jogo
            self.stats.reset_stats()
            self.stats.game_active = True
            self.placar.prep_placar()
            self.placar.prep_level()
            self.placar.prep_naves()

            # Retira os aliens e disparos da partida antiga
            self.klingons.empty()
            self.tiros.empty()

            # Cria uma nova frota e centraliza a nave
            self._criar_frota()
            self.nave.center_nave()

            # Esconder o cursor do mouse
            pygame.mouse.set_visible(False)

    def _check_keydown_events(self, event):
        """Responde as teclas"""
        if event.key == pygame.K_RIGHT:
            # Move a nave para a direita
            self.nave.moving_right = True
        elif event.key == pygame.K_LEFT:
            self.nave.moving_left = True
        elif event.key == pygame.K_q:
            sys.exit()
        elif event.key == pygame.K_p:
            self._iniciar_jogo()
            pygame.mixer.Channel(2).play(
                pygame.mixer.Sound("complemento/computerbeep_10.mp3"))
        elif event.key == pygame.K_SPACE and self.stats.game_active is True:
            self._dispara_tiro()

    def _iniciar_jogo(self):
        # Reset as configs do jogo
        self.configuracoes.inicializar_dinamica_configs()
        # Reset os stats do jogo
        self.stats.reset_stats()
        self.stats.game_active = True
        self.placar.prep_placar()

    def _check_keyup_events(self, event):
        """Responde a ausência de interação com o teclado"""
        if event.key == pygame.K_RIGHT:
            self.nave.moving_right = False
        elif event.key == pygame.K_LEFT:
            self.nave.moving_left = False

    def _dispara_tiro(self):
        """Cria um novo disparo e adiciona esse tiro em uma lista"""
        if len(self.tiros) < self.configuracoes.tiros_permitidos:
            novo_disparo = Tiro(self)
            self.tiros.add(novo_disparo)
        pygame.mixer.Channel(1).play(
            pygame.mixer.Sound(os.path.join("complemento/torp.mp3")))
        pygame.mixer.Channel(1).set_volume(0.35)

    def _update_tiros(self):
        """Atualiza a posição dos disparos e se deleta os antigos"""
        # Atualiza a posição
        self.tiros.update()
        # Deleta os tiros após sairem da tela
        for tiro in self.tiros.copy():
            if tiro.rect.bottom <= 0:
                self.tiros.remove(tiro)
        self._check_colisao_disparo()

    def _check_colisao_disparo(self):
        # Checar se algum disparo atingiu uma nave inimiga
        # Se sim, retirar a nave klingon da tela
        colisao = pygame.sprite.groupcollide(self.tiros, self.klingons, True,
                                             True)
        if colisao:
            for klingon in colisao.values():
                self.stats.score += self.configuracoes.klingon_points * len(
                    klingon)
            self.placar.prep_placar()
            self.placar.check_high_score()
        if not self.klingons:
            # Destroi os tiros existentes e cria uma nova tropa
            self.tiros.empty()
            self._criar_frota()
            self.configuracoes.aumentar_vel()

            # Aumenta o nível
            self.stats.level += 1
            self.placar.prep_level()

    def _update_klingons(self):
        """Atualiza a posição de todas as naves Klingons"""
        self._check_fleet_edges()
        self.klingons.update()

        # Colisão de naves
        if pygame.sprite.spritecollideany(self.nave, self.klingons):
            self._nave_hit()

        # Verifica se a nave klingon atingiu o fundo da tela
        self._check_klingons_bottom()

    def _nave_hit(self):
        """Responde a nave caso seja atingida por uma nave klingon"""
        if self.stats.nave_left > 0:
            # Decrementa nave_left
            self.stats.nave_left -= 1
            self.placar.prep_naves()

            # Se livra das naves restantes e disparos
            self.klingons.empty()
            self.tiros.empty()

            # Cria uma nova frota de naves e centraliza a nave
            self._criar_frota()
            self.nave.center_nave()

            # Pausa
            sleep(0.5)
        else:
            self.stats.game_active = False
            pygame.mouse.set_visible(True)

    def _criar_frota(self):
        """Cria as naves Bird of Prey"""
        # Cria os Klingons e amostra a quantidade de naves em uma fileira
        # O espaço entre cada nave é igual a largura de uma nave
        klingon = Klingon(self)
        klingon_width, klingon_height = klingon.rect.size
        espaco_disp_x = self.configuracoes.screen_width - (2 * klingon_width)
        numero_klingons_x = espaco_disp_x // (2 * klingon_width)

        # Determina a primeira frota completa de Klingons
        nave_height = self.nave.rect.height
        espaco_disp_y = (self.configuracoes.screen_height -
                         (3 * klingon_height) - nave_height)
        num_fileiras = espaco_disp_y // (2 * klingon_height)

        # Cria a primeira fileira de naves
        for num_fileiras in range(num_fileiras):
            for quant_klingon in range(numero_klingons_x):
                self._criar_klingon(quant_klingon, num_fileiras)

    def _criar_klingon(self, quant_klingon, num_fileiras):
        """Cria uma nave e a posiciona em uma fileira"""
        klingon = Klingon(self)
        klingon_width, klingon_height = klingon.rect.size
        klingon.x = klingon_width + 2 * klingon_width * quant_klingon
        klingon.rect.x = klingon.x
        klingon.rect.y = klingon.rect.height + 2 * klingon.rect.height * num_fileiras
        self.klingons.add(klingon)

    def _check_fleet_edges(self):
        """Responde apropriadamente se qualquer nave klingon atingir a borda da tela"""
        for klingon in self.klingons.sprites():
            if klingon.check_edges():
                self._mudar_direcao_frota()
                break

    def _check_klingons_bottom(self):
        """Checa se alguma nave klingon atingiu o fundo da tela"""
        screen_rect = self.screen.get_rect()
        for klingon in self.klingons.sprites():
            if klingon.rect.bottom >= screen_rect.bottom:
                # Trata da mesma forma como se a nave fosse atingida
                self._nave_hit()
                break

    def _mudar_direcao_frota(self):
        """Mudar a direção da frota inteira"""
        for klingon in self.klingons.sprites():
            klingon.rect.y += self.configuracoes.fleet_drop_speed
        self.configuracoes.direcao_frota *= -1

    def _update_screen(self):
        # Redesenha a tela durante cada passada do loop
        # self.screen.fill(self.configuracoes.bg_color)
        self.screen.blit(self.configuracoes.background, [0, 0])
        self.nave.blitme()
        for tiros in self.tiros.sprites():
            tiros.draw_tiro()
        self.klingons.draw(self.screen)
        self.placar.show_placar()

        # Desenha o botão de Íniciar se o jogo estiver inativo
        if not self.stats.game_active:
            self.screen.blit(self.configuracoes.background, [0, 0])
            self.nave.blitme()
            self.play_botao.draw_botao()
            self.screen.blit(self.configuracoes.logo, [270, 35])

        pygame.display.flip()
Exemple #13
0
contador = 0

listaSprites = pygame.sprite.Group()
hero = Hero(40, 430)

bt1 = pygame.image.load('Imagens/Buttons/bt1.png').convert_alpha()
bt2 = pygame.image.load('Imagens/Buttons/bt2.png').convert_alpha()
bt3 = pygame.image.load('Imagens/Buttons/bt3.png').convert_alpha()
bt4 = pygame.image.load('Imagens/Buttons/bt4.png').convert_alpha()
bt5 = pygame.image.load('Imagens/Buttons/bt5.png').convert_alpha()
bt6 = pygame.image.load('Imagens/Buttons/bt6.png').convert_alpha()
bt7 = pygame.image.load('Imagens/Buttons/bt7.png').convert_alpha()
bt8 = pygame.image.load('Imagens/Buttons/bt8.png').convert_alpha()
bt9 = pygame.image.load('Imagens/Buttons/bt9.png').convert_alpha()

botao1 = Botao(106, 320, bt3, 3)
botao2 = Botao(412, 150, bt1, 1)
botao3 = Botao(718, 320, bt2, 2)

botao4 = Botao(106, 320, bt5, 2)
botao5 = Botao(412, 150, bt4, 3)
botao6 = Botao(718, 320, bt6, 1)

botao7 = Botao(106, 320, bt9, 3)
botao8 = Botao(412, 150, bt8, 1)
botao9 = Botao(718, 320, bt7, 2)

chave1 = []
chave2 = []
chave3 = []
Exemple #14
0
    def resetar(self):

        pygame.init()

        self.sons = Sons()

        self.ai_settings = Settings()

        self.screen = pygame.display.set_mode(
            (self.ai_settings.screen_width, self.ai_settings.screen_height))
        # ponteiro do mause disaparece
        pygame.mouse.set_visible(True)
        # Cria espaçonave
        self.painel_vacina = Painel_vacina(self.ai_settings, self.screen)
        self.mira = Mira(self.ai_settings, self.screen, self.painel_vacina)
        # Grupo de virus
        self.viroses = Group()
        self.miras = Group()
        self.mira_colisor = Mira_colisor(self.ai_settings, self.screen)
        self.miras.add(self.mira_colisor)

        pygame.display.set_caption('VAC')
        # Define background
        self.background = pygame.image.load(self.ai_settings.background_path)
        self.background = pygame.transform.scale(
            self.background, (self.ai_settings.screen_width + 500,
                              self.ai_settings.screen_height))

        self.background_init = pygame.image.load(
            self.ai_settings.background_path_init)
        self.background_init = pygame.transform.scale(
            self.background_init,
            (self.ai_settings.screen_width, self.ai_settings.screen_height))
        """ Define o estado do jogo"""

        self.barra_tempo = Barra_tempo(self.ai_settings, self.screen)
        # Define um multiprocess
        self.atualiza_movimento = UpMovVirus(self.viroses)
        self.estado_jogo = EstadoJogo(self.ai_settings, self.viroses,
                                      self.screen, self.painel_vacina,
                                      self.barra_tempo,
                                      self.atualiza_movimento)
        self.barra_tempo.estado_jogo = self.estado_jogo
        if self.estado_jogo.fullscreen:
            self.screen = pygame.display.set_mode(
                (self.ai_settings.screen_width,
                 self.ai_settings.screen_height), pygame.FULLSCREEN)

        self.pontuacao_placar = Pontuacao(self.ai_settings, self.screen,
                                          self.estado_jogo)
        self.pontuacao_placar.inicia_pontos()

        self.estado_jogo.pontuacao = self.pontuacao_placar

        grupos_viroses = gf.coloca_virus_tela(self.ai_settings, self.screen,
                                              self.viroses, self.estado_jogo)

        self.estado_jogo.set_grupo_viroses(grupos_viroses)
        """ Indica estado do jogo se está iniciado ou não"""

        # Define um multiprocess

        self.atualiza_barra_tempo = UpMovBarra(self.barra_tempo,
                                               grupos_viroses)

        self.ranking_bd = Ranking('bd_score', self.nome_player)

        self.play_botao = Botao(self.ai_settings, self.screen,
                                './imagens/icones/iniciar.png',
                                self.func_call_back_play)
        self.ranking_botao = Botao(self.ai_settings, self.screen,
                                   './imagens/icones/ranking.png',
                                   self.func_call_back_ranking)
        self.play_botao.rect.centerx = 350
        self.play_botao.rect.bottomleft = (
            self.screen.get_rect().bottomleft[0] + 50,
            self.screen.get_rect().bottomleft[1] - 50)
        self.ranking_botao.rect.bottomright = (
            self.screen.get_rect().bottomright[0] - 50,
            self.screen.get_rect().bottomright[1] - 50)

        self.pause_botao = Botao(self.ai_settings, self.screen,
                                 './imagens/icones/pause-play.png',
                                 self.func_call_back_pause)
        self.pause_botao.altura = 50
        self.pause_botao.largura = 50
        self.pause_botao.make_rect()
        self.pause_botao.rect.centerx = self.ai_settings.screen_width - 30
        self.pause_botao.rect.centery = 70

        self.vetor_botoes = []
        self.vetor_botoes.append(self.play_botao)
        self.vetor_botoes.append(self.ranking_botao)
        self.vetor_botoes.append(self.pause_botao)

        pygame.mixer.music.play(-1)
Exemple #15
0
class Jogo():
    def __init__(self, nome_player):
        pygame.mixer.init()
        pygame.mixer.music.load('./audios/menu.wav')
        self.nome_player = nome_player
        self.ranking_botao_clicado = False

    def resetar(self):

        pygame.init()

        self.sons = Sons()

        self.ai_settings = Settings()

        self.screen = pygame.display.set_mode(
            (self.ai_settings.screen_width, self.ai_settings.screen_height))
        # ponteiro do mause disaparece
        pygame.mouse.set_visible(True)
        # Cria espaçonave
        self.painel_vacina = Painel_vacina(self.ai_settings, self.screen)
        self.mira = Mira(self.ai_settings, self.screen, self.painel_vacina)
        # Grupo de virus
        self.viroses = Group()
        self.miras = Group()
        self.mira_colisor = Mira_colisor(self.ai_settings, self.screen)
        self.miras.add(self.mira_colisor)

        pygame.display.set_caption('VAC')
        # Define background
        self.background = pygame.image.load(self.ai_settings.background_path)
        self.background = pygame.transform.scale(
            self.background, (self.ai_settings.screen_width + 500,
                              self.ai_settings.screen_height))

        self.background_init = pygame.image.load(
            self.ai_settings.background_path_init)
        self.background_init = pygame.transform.scale(
            self.background_init,
            (self.ai_settings.screen_width, self.ai_settings.screen_height))
        """ Define o estado do jogo"""

        self.barra_tempo = Barra_tempo(self.ai_settings, self.screen)
        # Define um multiprocess
        self.atualiza_movimento = UpMovVirus(self.viroses)
        self.estado_jogo = EstadoJogo(self.ai_settings, self.viroses,
                                      self.screen, self.painel_vacina,
                                      self.barra_tempo,
                                      self.atualiza_movimento)
        self.barra_tempo.estado_jogo = self.estado_jogo
        if self.estado_jogo.fullscreen:
            self.screen = pygame.display.set_mode(
                (self.ai_settings.screen_width,
                 self.ai_settings.screen_height), pygame.FULLSCREEN)

        self.pontuacao_placar = Pontuacao(self.ai_settings, self.screen,
                                          self.estado_jogo)
        self.pontuacao_placar.inicia_pontos()

        self.estado_jogo.pontuacao = self.pontuacao_placar

        grupos_viroses = gf.coloca_virus_tela(self.ai_settings, self.screen,
                                              self.viroses, self.estado_jogo)

        self.estado_jogo.set_grupo_viroses(grupos_viroses)
        """ Indica estado do jogo se está iniciado ou não"""

        # Define um multiprocess

        self.atualiza_barra_tempo = UpMovBarra(self.barra_tempo,
                                               grupos_viroses)

        self.ranking_bd = Ranking('bd_score', self.nome_player)

        self.play_botao = Botao(self.ai_settings, self.screen,
                                './imagens/icones/iniciar.png',
                                self.func_call_back_play)
        self.ranking_botao = Botao(self.ai_settings, self.screen,
                                   './imagens/icones/ranking.png',
                                   self.func_call_back_ranking)
        self.play_botao.rect.centerx = 350
        self.play_botao.rect.bottomleft = (
            self.screen.get_rect().bottomleft[0] + 50,
            self.screen.get_rect().bottomleft[1] - 50)
        self.ranking_botao.rect.bottomright = (
            self.screen.get_rect().bottomright[0] - 50,
            self.screen.get_rect().bottomright[1] - 50)

        self.pause_botao = Botao(self.ai_settings, self.screen,
                                 './imagens/icones/pause-play.png',
                                 self.func_call_back_pause)
        self.pause_botao.altura = 50
        self.pause_botao.largura = 50
        self.pause_botao.make_rect()
        self.pause_botao.rect.centerx = self.ai_settings.screen_width - 30
        self.pause_botao.rect.centery = 70

        self.vetor_botoes = []
        self.vetor_botoes.append(self.play_botao)
        self.vetor_botoes.append(self.ranking_botao)
        self.vetor_botoes.append(self.pause_botao)

        pygame.mixer.music.play(-1)

    """Inicia um novo jogo quando o jogador clicar em Play."""

    def func_call_back_play(self):
        print('CARREGANDO JOGO ...')
        if not self.estado_jogo.jogo_estado:
            try:
                self.resetar()
                self.atualiza_movimento.start()
                self.atualiza_barra_tempo.start()
            except:
                self.atualiza_movimento = UpMovVirus(self.viroses)
                self.atualiza_barra_tempo = UpMovVirus(self.viroses)
                gf.reseta_jogo(self.barra_tempo, self.estado_jogo)
        self.estado_jogo.jogo_estado = True
        self.play_botao.ativo = False
        self.ranking_botao.ativo = False
        self.play_botao.is_visivel = False
        self.ranking_botao.is_visivel = False

    def func_call_back_pause(self):
        self.estado_jogo.pause = not self.estado_jogo.pause

    """Inicia um novo jogo quando o jogador clicar em Play."""

    def func_call_back_ranking(self):
        self.ranking_botao.flag_click = True
        gf.ranking_tela(self.ranking_bd, self.screen, self.ai_settings,
                        self.play_botao, self.ranking_botao)

    def funcao_desenha(self):
        gf.update_screen(self.ai_settings, self.screen, self.mira,
                         self.painel_vacina, self.viroses, self.miras,
                         self.background, self.pontuacao_placar,
                         self.barra_tempo, self.play_botao, self.ranking_botao,
                         self.ranking_bd, self.pause_botao)
        # Percorre os update atacado no modulo principal
        gf.update_logica(self.ai_settings, self.viroses, self.painel_vacina,
                         self.barra_tempo, self.mira, self.estado_jogo,
                         self.ranking_bd)
        # Desenha o botão Play se o jogo estiver inativo
        pygame.display.flip()

    def tela_inicial(self):
        if not self.estado_jogo.jogo_estado:
            self.screen.fill((200, 100, 100), self.screen.get_rect())
            self.screen.blit(self.background_init,
                             self.background_init.get_rect())
            self.play_botao.draw_botao()
            self.ranking_botao.draw_botao()
        if not self.ranking_botao_clicado:
            pygame.display.flip()

    def run_game(self):
        print('Jogo iniciado ...')
        self.tela_inicial()
        # estado_jogo.jogo_estado = False
        while True:

            gf.check_events(self.ai_settings, self.screen, self.mira,
                            self.mira_colisor, self.painel_vacina, self.miras,
                            self.viroses, self.estado_jogo.grupo_viroses,
                            self.estado_jogo, self.pontuacao_placar,
                            self.barra_tempo, self.play_botao,
                            self.atualiza_movimento, self.atualiza_barra_tempo,
                            self.ranking_botao, self.ranking_bd, self.sons,
                            self.vetor_botoes)

            if self.ranking_botao.flag_click:
                self.ranking_botao.flag_click = False
                # ranking_tela(ranking_bd,screen, ai_settings, play_botao, ranking_botao)
                gf.ranking_tela(self.ranking_bd, self.screen, self.ai_settings,
                                self.play_botao, self.ranking_botao)
                self.ranking_botao_clicado = True

            if self.estado_jogo.jogo_estado:
                self.funcao_desenha()

            if not self.estado_jogo.jogo_estado:
                # Tela recente fica visivel
                pygame.mouse.set_visible(True)
            else:
                pygame.mouse.set_visible(False)

            self.tela_inicial()

            gf.is_fim_jogo(self.barra_tempo, self.estado_jogo, self.ranking_bd,
                           self.screen, self.play_botao, self.ranking_botao)