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"
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"
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"
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"