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"
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 __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 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)
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 __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 __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"
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
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"
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()
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 = []
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)
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)