コード例 #1
0
ファイル: AplJogo.py プロジェクト: neimarp/Jogo
class AplJogo:

    def __init__(self):
        self.personagem = Personagem(350, 250)
        self.pontos = 0
        self.pontosatual = 0
        self.fimdejogo = False
        self.desceu = True
        self.obstaculos = list()
        self.novo = 44


    def configuracao(self):
        self.clock = pygame.time.Clock()
        self.entradas = EntradaUsuario()

    def player_input(self):
        for event in pygame.event.get():
            self.entradas.reset()
            if event.type == pygame.QUIT:
                self.entradas.quit_pressed = True
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_SPACE:
                    self.entradas.quit_pressed = True
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_UP:
                    self.diminui_velocidade()
            if event.type == pygame.KEYUP:
                if event.key == pygame.K_UP:
                    self.aumenta_velocidade()
            pygame.key.set_repeat(1)

    def aumenta_velocidade(self):
        self.personagem.velocidadey = 10

    def diminui_velocidade(self):
        self.personagem.velocidadey = -15

    def movimenta_personagem(self):
        self.personagem.modifica_posicao(self.personagem.posicao.eixox, self.personagem.posicao.eixoy + self.personagem.velocidadey)

    def cria_obstaculos(self):
        if self.novo == 45:
            self.novo = 0
            if len(self.obstaculos) < 3:
                self.obstaculos.append(FabricaObstaculo.criarObstaculo(randint(1,2)))

    def movimenta_obstaculo_horizontalmente(self):
        for obs in self.obstaculos:
            obs.modifica_posicao(obs.posicao.eixox - obs.velocidadex, obs.posicao.eixoy)

    def movimenta_obstaculo_verticalmente(self):
        for obs in self.obstaculos:
            if obs.posicao.eixoy <= 0:
                self.desceu = True
            elif obs.posicao.eixoy >= 450:
                self.desceu = False

            if self.desceu == True:
                obs.desce()
            elif self.desceu == False:
                obs.sobe()

    def verifica_limite_da_tela(self):
        self.personagem.atingiu_limite_da_tela()

    def incrementa_pontuacao(self):
        for obs in self.obstaculos:
            if self.personagem.posicao.eixox > obs.posicao.eixox and self.personagem.posicao.eixox < obs.posicao.eixox+10:
                self.pontos += 1

    def remove_obstaculo(self):
        if self.obstaculos[0].posicao.eixox < -80:
            del self.obstaculos[0]

    def verifica_colisao(self, rect1, rect2):
        if rect1.colliderect(rect2) and self.pontos != self.pontosatual:
            self.personagem.vida -= 1
            self.pontosatual = self.pontos

    def verifica_qtd_de_vidas(self):
        if self.personagem.acabou_vida():
            self.fimdejogo = True
            self.personagem.velocidadey = 0
            for obs in self.obstaculos:
                obs.velocidadex = 0

    def jogar(self):
        self.player_input()
        self.movimenta_personagem()
        self.cria_obstaculos()
        self.movimenta_obstaculo_horizontalmente()
        self.movimenta_obstaculo_verticalmente()
        self.remove_obstaculo()
        self.verifica_limite_da_tela()
        self.verifica_qtd_de_vidas()
        self.incrementa_pontuacao()
        if self.entradas.quit_pressed:
            exit(0)
        pygame.display.flip()
        self.clock.tick(60)
コード例 #2
0
class ControladorJogo:
    TAM_FONTE_PONTUACAO = 40
    DESLOCAMENTO_TELA = 5
    POSICAO_TROCA_TELA = -500

    def __init__(self):
        pygame.init()
        self.apljogo = AplJogo()
        self.telajogo = TelaJogo()
        self.imagempersonagem = self.get_imagem("personagem.png")
        self.posicaotela = EstiloElementos.posicao_imagem_fundo()
        self.entradas = EntradaUsuario()
        self.fabricaimagens = FlyweightFabrica()

    @staticmethod
    def get_obstaculo(nomeobstaculo):
        return pygame.image.load(os.path.join(CaminhoRecursos.caminho_imagens_obstaculos(), nomeobstaculo))

    @staticmethod
    def get_imagem(nomeimagem):
        return pygame.image.load(os.path.join(CaminhoRecursos.caminho_imagens(), nomeimagem))

    @staticmethod
    def get_musica(nomemusica):
        return os.path.join(CaminhoRecursos.caminho_musicas(), nomemusica)

    @staticmethod
    def get_som(nomesom):
        return os.path.join(CaminhoRecursos.caminho_sons(), nomesom)

    def exibir_tela_jogo(self):
        imagem = self.get_imagem("fundojogo.png")
        self.telajogo.exibe_imagem(imagem, self.posicaotela)
        self.anda_tela()

    def anda_tela(self):
        self.posicaotela.eixox -= self.DESLOCAMENTO_TELA
        if self.posicaotela.eixox == self.POSICAO_TROCA_TELA:
            self.posicaotela.eixox = 0

    def exibir_vidas(self):
        for numvida in range(self.apljogo.personagem.vida):
            imagem = self.get_imagem("vida.png")
            self.telajogo.exibe_imagem(imagem, EstiloElementos.get_posicao_vida(numvida))

    def exibir_pontuacao(self, mensagem):
        self.telajogo.exibe_texto(mensagem + str(self.apljogo.pontos), self.TAM_FONTE_PONTUACAO,
                                  EstiloElementos.posicao_pontuacao())

    def exibir_fim_de_jogo(self):
        imagem = self.get_imagem("gameover.png")
        self.telajogo.exibe_imagem(imagem, EstiloElementos.posicao_imagem_fundo())
        self.posicaotela.eixox = 0

    def exibir_mensagem(self, mensagem):
        self.telajogo.exibe_texto(mensagem, self.TAM_FONTE_PONTUACAO, EstiloElementos.posicao_mensagem())

    def atualiza_tela(self):
        self.exibir_tela_jogo()
        self.fabricaimagens.get_flyweight("personagem").desenhar_imagem(self.apljogo.personagem.posicao)
        for obstaculo in self.apljogo.lobstaculos:
            self.fabricaimagens.get_flyweight(obstaculo.nome).desenhar_imagem(obstaculo.posicao)
        self.exibir_pontuacao("Score: ")
        self.exibir_vidas()

    def entrada_jogador(self):
        for event in pygame.event.get():
            self.entradas.reset()
            if event.type == pygame.QUIT:
                self.entradas.quit_pressed = True
            if (event.type == pygame.KEYDOWN):
                if (event.key == pygame.K_SPACE):
                    self.entradas.quit_pressed = True
            if (event.type == pygame.KEYDOWN):
                if (event.key == pygame.K_UP):
                    self.apljogo.personagem.diminui_deslocamento()
            if (event.type == pygame.KEYUP):
                if (event.key == pygame.K_UP):
                    self.apljogo.personagem.aumenta_deslocamento()
            pygame.key.set_repeat(1)

    def jogo(self):
        self.apljogo.configuracao()
        continua = True
        while continua:
            self.entrada_jogador()
            self.apljogo.jogar()
            self.atualiza_tela()
            for obstaculo in self.apljogo.lobstaculos:
                imagemobstaculo = self.get_obstaculo(obstaculo.nome + ".png")
                if self.apljogo.verifica_colisao_personagem(self.imagempersonagem, imagemobstaculo, obstaculo):
                    self.apljogo.penaliza_jogador()
                    som = self.get_som("colisao.wav")
                    self.telajogo.exibe_som(som)
            if self.apljogo.fimdejogo:
                self.exibir_fim_de_jogo()
            if self.entradas.quit_pressed:
                exit(0)
        pygame.quit()
コード例 #3
0
ファイル: AplJogo.py プロジェクト: neimarp/Jogo
class AplJogo:

    def __init__(self):
        self.personagem = Personagem(350, 250)
        self.obstaculo = Obstaculo(700, randint(0, 445))
        #TODO trocar esses objetos estaticos e gerar aleatoriamente
        self.obstaculo2 = Obstaculo(700, randint(0, 445))
        self.pontos = 0
        self.pontosatual = 0
        self.fimdejogo = False
        self.desceu = True

    def config(self):
        self.clock = pygame.time.Clock()
        self.entradas = EntradaUsuario()

    def player_input(self):
        for event in pygame.event.get():
            self.entradas.reset()
            if event.type == pygame.QUIT:
                self.entradas.quit_pressed = True
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_SPACE:
                    self.entradas.quit_pressed = True
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_UP:
                    self.diminui_velocidade()
            if event.type == pygame.KEYUP:
                if event.key == pygame.K_UP:
                    self.aumenta_velocidade()
            pygame.key.set_repeat(1)

    def aumenta_velocidade(self):
        self.personagem.velocidadey = 10

    def diminui_velocidade(self):
        self.personagem.velocidadey = -15

    def movimenta_personagem(self):
        self.personagem.modifica_posicao(self.personagem.posicao.eixox, self.personagem.posicao.eixoy + self.personagem.velocidadey)

    def movimenta_obstaculo_horizontalmente(self):
        self.obstaculo.modifica_posicao(self.obstaculo.posicao.eixox - self.obstaculo.velocidadex , self.obstaculo.posicao.eixoy)
        self.obstaculo2.modifica_posicao(self.obstaculo2.posicao.eixox - self.obstaculo2.velocidadex , self.obstaculo2.posicao.eixoy)

    def movimenta_obstaculo_verticalmente(self):
        if self.obstaculo.posicao.eixoy <= 0:
            self.desceu = True
        elif self.obstaculo.posicao.eixoy >= 450:
            self.desceu = False

        if self.desceu == True:
            self.obstaculo.desce()
        elif self.desceu == False:
            self.obstaculo.sobe()

        #por enquanto gera "obstaculos estaticos", futuramente serao gerados automaticamente e aleatoriamente
        if self.obstaculo2.posicao.eixoy <= 0:
            self.desceu = True
        elif self.obstaculo2.posicao.eixoy >= 450:
            self.desceu = False

        if self.desceu == True:
            self.obstaculo2.desce()
        elif self.desceu == False:
            self.obstaculo2.sobe()

    def verifica_limite_da_tela(self):
        self.personagem.atingiu_limite_da_tela()

    def incrementa_pontuacao(self):
        if self.personagem.posicao.eixox > self.obstaculo.posicao.eixox and self.personagem.posicao.eixox < self.obstaculo.posicao.eixox+10:
            self.pontos += 1

    def proximo_obstaculo(self):
        #para aparecer varios obstaculos
        if self.obstaculo.posicao.eixox < -80:
            self.obstaculo.posicao.eixox = 700
            self.obstaculo.posicao.eixoy = randint(0,500)
            self.obstaculo2.posicao.eixox = 600
            self.obstaculo2.posicao.eixoy = randint(0,500)

    def verifica_colisao(self, rect1, rect2):
        if rect1.colliderect(rect2) and self.pontos != self.pontosatual:
            self.personagem.vida -= 1
            self.pontosatual = self.pontos

    def verifica_qtd_de_vidas(self):
        if self.personagem.acabou_vida():
            self.fimdejogo = True
            self.personagem.velocidadey = 0
            self.obstaculo.velocidadex = 0
            self.obstaculo2.velocidadex = 0

    def jogar(self):
        self.player_input()
        self.incrementa_pontuacao()
        self.movimenta_personagem()
        self.movimenta_obstaculo_horizontalmente()
        self.movimenta_obstaculo_verticalmente()
        self.proximo_obstaculo()
        self.verifica_limite_da_tela()
        self.verifica_qtd_de_vidas()
        if self.entradas.quit_pressed:
            exit(0)

        pygame.display.flip()
        self.clock.tick(60)