예제 #1
0
def newmob(centerx=None, centery=None):
    if centerx is None and centery is None:
        # seq_num из Map.py
        cell_num = random.randrange(0, seq_num - 1)
        centerx = spawn_coord_x[cell_num]
        centery = spawn_coord_y[cell_num]
    m = Mob(centerx, centery)
    all_sprites.add(m)
    mobs.add(m)
예제 #2
0
    def __init__(self, number, boss=0, player=0):
        self.dimensions = c.LEVEL_PIXEL_DIMENSIONS
        self.time = True
        self.window = pygame.display.set_mode(self.dimensions)
        pygame.display.set_caption("A mutant's tale")
        self.background = pygame.image.load("assets/levels/background.jpeg")
        self.rock = pygame.image.load("assets/levels/Rock.png").convert_alpha()
        self.health_hole = pygame.image.load(
            "assets/levels/LifeHole.png").convert_alpha()
        self.stamina_hole = pygame.image.load(
            "assets/levels/StaminaHole.png").convert_alpha()
        self.disabledHoles = False
        self.bush = pygame.image.load("assets/levels/bush.png").convert_alpha()
        self.tree = pygame.image.load("assets/levels/tree.png").convert_alpha()
        self.portal = pygame.image.load(
            "assets/levels/NextPortal.png").convert_alpha()
        self.disabledSprite = pygame.image.load(
            "assets/levels/DisabledHole.png").convert_alpha()
        self.portalRect = self.portal.get_rect()
        self.badguy = boss
        self.player = player
        self.it = 0
        self.loop = True
        self.mob = []
        if number != 5:
            for i in range(5):
                self.mob.append(m.Mob(self))
        else:
            for i in range(10):
                self.mob.append(m.Mob(self))

        self.walls = []
        with open("assets/levels/level" + str(number) + ".txt", 'r') as file:
            for line in file:
                chars = line.split(" ")
                self.walls.append(chars)
예제 #3
0
def tela_mostra_pontuacao(screen, nomecolocado, pont):

    # fontes com os tamanhos 
    largeText = pygame.font.Font(path.join(fnt_dir, "PressStart2P.ttf"), 27)
    maiortext = pygame.font.Font(path.join(fnt_dir, "PressStart2P.ttf"), 40)
    clock = pygame.time.Clock()

    # todas as informações na tela, junto com a imagem de fundo
    background = pygame.image.load(path.join(img_dir, "tela_inicial.png")).convert()
    background_rect = background.get_rect()
    screen.blit(background, background_rect)

    poetexto, thenew = text_object(f"{nomecolocado}", maiortext)
    thenew.center = ((WIDTH/2),(HEIGHT/2-360))
    screen.blit(poetexto, thenew)

    poetexto2, thenew = text_object("SUA PONTUAÇÃO:", largeText)
    thenew.center = ((WIDTH/2),(HEIGHT/2 - 300))
    screen.blit(poetexto2, thenew)

    poenome, thenew = text_object(f"{pont}", maiortext)
    thenew.center = ((WIDTH/2),(HEIGHT/2 - 250))
    screen.blit(poenome, thenew)

    # Colocando os botões 
    button("RESTART (R)", 180, 540, 75, 50, YELLOW, bright_YELLOW)
    button("QUIT (Q)", 345, 540, 75, 50, WHITE, WHITE)

    # Vendo se a pessoa foi recordista ou não
    maior_pontuacao = get_high_score()
    if pont >= maior_pontuacao:
        poenome, thenew = text_object("O MAIS NOVO", largeText)
        thenew.center = ((WIDTH/2),(HEIGHT/2 - 100))
        screen.blit(poenome, thenew)
        poenome, thenew = text_object("RECORDISTA!", largeText)
        thenew.center = ((WIDTH/2),(HEIGHT/2 - 40))
        screen.blit(poenome, thenew)

    pygame.display.flip()
    clock.tick(30)

    # Coloca ações para os "botões" do final do jogo
    done = False
    while not done:
        for event in pygame.event.get():
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_q:
                    principal("")
                    done = True
                if event.key == pygame.K_r:
                    principal(nomecolocado) 
                    done = True

        # Carrega a fonte para desenhar o score.
        score_font = assets["score_font"]

        # Cria um carrinho. O construtor será chamado automaticamente. O for é para a animação da roda
        carro=[]
        for i in range(4):
            carrinho = "game_over{}.png".format(i)
            player_img = pygame.image.load(path.join(img_dir, carrinho)).convert()
            player_img = pygame.transform.scale(player_img, (58, 75))
            player_img.set_colorkey(WHITE)
            carro.append(player_img)
        player = Player(carro)

        # Cria todos os sprites e adiciona o player em tal
        all_sprites = pygame.sprite.Group()
        all_sprites.add(player)

        # Cria um grupo só dos carrinhos inimigos. O for é para a animação das rodas
        mobs = pygame.sprite.Group()
        inimigo=[]
        for i in range(4):
            filename = "inimigo{}.png".format(i)
            inimigo_img = pygame.image.load(path.join(img_dir, filename)).convert()
            inimigo_img = pygame.transform.scale(inimigo_img, (58, 75))  
            inimigo_img.set_colorkey(WHITE)
            inimigo.append(inimigo_img)
        
        # grupo para moedas
        mais = pygame.sprite.Group()

        # grupo para caixas
        box = pygame.sprite.Group()


        #grupo de tiros
        tiro = pygame.sprite.Group()

        # cria carrinhos e add em mobs
        for i in range(4):
            m = Mob(inimigo)
            all_sprites.add(m)
            mobs.add(m)
            
        #cria as moedas
        imagem_mais=[]
        for i in range(9):
            filename = "mais{}.png".format(i)
            Mais_img = pygame.image.load(path.join(img_dir, filename)).convert()
            Mais_img = pygame.transform.scale(Mais_img, (35, 35))
            Mais_img.set_colorkey(WHITE)
            imagem_mais.append(Mais_img)

        # adiciona as moedas nos
        c = Mais(imagem_mais)
        all_sprites.add(c)
        mais.add(c)
        
        # define quantos tiros a pessoa começa e quantos pontos
        contagemdetiros = 3
        score = 0
          
        
            nomecolocado = tela_inicial(screen)

        # loop principal
        running = True
        while running:

            # ajusta a velocidade do jogo
            clock.tick(FPS)

    
            # sortear caixinha
            if random.randrange(1, 700) == 1:
                b = Box(assets["box_img"])
                all_sprites.add(b)
                box.add(b)

            # sortear moeda
            if random.randrange(1,500) == 1:
                m = (imagem_mais)
                all_sprites.add(c)
                mais.add(c)
    
            # eventos (mouse, teclado, botão, etc).
            for event in pygame.event.get():
                
                #  fechado.
                if event.type == pygame.QUIT:
                    running = False
                
                # apertou alguma tecla.
                if event.type == pygame.KEYDOWN:
                    
                    # dependendo da tecla, altera a velocidade.
                    fator = 0
                    if estanevando or estanevando_tempo > 0:
                        fator = 2
                    if event.key == pygame.K_LEFT:
                        speedx = -5 + fator
                    if event.key == pygame.K_RIGHT:
                        speedx = 5 + fator
                    
                    # se for um espaço, atira! (se tiver)
                    if contagemdetiros > 0:    
                        if event.key == pygame.K_SPACE:
                            tiroo = Tiro(assets["tiro_img"], player.rect.centerx, player.rect.top)
                            all_sprites.add(tiro)
                            tiro.add(tiroo)
                            pew_sound.play()
                            contagemdetiros -= 1
                                      
                # se soltou alguma tecla.
                if event.type == pygame.KEYUP:
                    fator = 0
                    if estanevando or estanevando_tempo > 0:
                        fator = 2
                    
            
            # velocidade em x do player (carro)
            player.speedx = speedx
                        
            # se jogador encostou a parede. Se encostar, morre.
            if player.rect.right > 519:
                batida_sound.play()
                running = False
            if player.rect.left < 89:
                batida_sound.play()
                running = False    
            
        
            all_sprites.update()
                
            # se tiro acertou carrinhos
            hits = pygame.sprite.groupcollide(mobs, tiro, True, True)
            for hit in hits:
                #precisa gerar outro
                destroy_sound.play()
                m = Mob(inimigo) 
                all_sprites.add(m)
                mobs.add(m)
                score += 5
            
            # se bater
            hits = pygame.sprite.spritecollide(player, mobs, False, pygame.sprite.collide_circle)
            if hits:
                boom_sound.play()
                # Precisa esperar senão fecha duma vez
                time.sleep(0.5)
                running = False
            
            # pegar o mais
            hits = pygame.sprite.spritecollide(player, mais, True, False)
            if hits:
                mais.play()
                score += 10

            # pegar a caixa
            hits = pygame.sprite.spritecollide(player, caixa, True, False)
            for hit in hits:
                Ta_Da.play()
                score += 5
                contagemdetiros += 3
                

            # vai aumentando e estabiliza em 18
            if velocidade < 18:
                velocidade += aceleracao

            # a cada loop, redesenha o fundo e os sprites  
            background_y_cima += velocidade
            background_y += velocidade
    
            if background_y >= HEIGHT:
                background_y = 0
                background_y_cima = -HEIGHT

            background_rect_cima.y = background_y_cima
            background_rect.y = background_y               

            screen.blit(background, background_rect_cima)
            screen.blit(background, background_rect)
            all_sprites.draw(screen)

            # Desenha o score, por tempo
            timee += 1
            pont = (timee//FPS)+score
            text_surface = score_font.render("{:01d}".format(pont), True, BLACK)           
            text_rect = text_surface.get_rect()
            text_rect.midtop = (WIDTH-300,  10)
            screen.blit(text_surface, text_rect)

            if contagemdetiros > 0:
                text_surface = score_font.render("SPACE:{:01d} ESPECIAIS".format(contagemdetiros), True, BLACK)
                text_rect = text_surface.get_rect()
                text_rect.midtop = (WIDTH/2,  HEIGHT-130)
                screen.blit(text_surface, text_rect)                

           
            pygame.display.flip()

            # para ver se a pessoa fez a maior pontuação
            maior_pontuacao(pont, nomecolocado)

        # maior pontuador
        maior_pontuacao(pont, nomecolocado)

        # tela final para mostrar a pontuação da pessoa
        tela_mostra_pontuacao(screen, nomecolocado, pont)

        # Matando os mobs e o player para fazê-lo novamente quando voltar o loop
        for mobs in all_sprites:
            mobs.kill()
            player.kill()
예제 #4
0
level1 = l.Level(1)
level2 = l.Level(2)
level3 = l.Level(3)
level4 = l.Level(4)
level5 = l.Level(5)

menu = l.Menu()
perso = p.Player([level1, level2, level3, level4, level5])
level1.player = perso
level2.player = perso
level3.player = perso
level4.player = perso
level5.player = perso

boss1 = m.Officer(10, 16, level1, 1)
boss2 = m.Officer(7, 1, level2, 2)
boss3 = m.Officer(7, 1, level3, 3)
boss4 = m.Officer(10, 7, level4, 4)
FinalBoss = p.BadGuy([level5], perso)

pygame.display.flip()

Menu = True
keepGoing = True
i = 0
while keepGoing:
	while Menu:
		menu.display()
		pygame.display.flip()
		for event in pygame.event.get():
예제 #5
0
def principal(nomecolocado):

    game_roda = True
    while game_roda:

        # Sorteia uma música para o jogo
        a = random.randint(0, 10)
        if a % 2 == 0:
            pygame.mixer.music.load(path.join(snd_dir, 'top_gear.wav'))
            pygame.mixer.music.set_volume(1)
        else:
            pygame.mixer.music.load(path.join(snd_dir, 'top_gear0.wav'))
            pygame.mixer.music.set_volume(1)

        # Carrega a fonte para desenhar o score.
        score_font = assets["score_font"]

        # Cria um carrinho. O construtor será chamado automaticamente. O for é para a animação da roda
        carro = []
        for i in range(4):
            carrinho = 'finally{}.png'.format(i)
            player_img = pygame.image.load(path.join(img_dir,
                                                     carrinho)).convert()
            player_img = pygame.transform.scale(player_img, (58, 75))
            player_img.set_colorkey(WHITE)
            carro.append(player_img)
        player = Player(carro)

        # Cria todos os sprites e adiciona o player em tal
        all_sprites = pygame.sprite.Group()
        all_sprites.add(player)

        # Cria um grupo só dos carrinhos inimigos. O for é para a animação das rodas
        mobs = pygame.sprite.Group()
        inimigo = []
        for i in range(4):
            filename = 'inimigo{}.png'.format(i)
            inimigo_img = pygame.image.load(path.join(img_dir,
                                                      filename)).convert()
            inimigo_img = pygame.transform.scale(inimigo_img, (58, 75))
            inimigo_img.set_colorkey(WHITE)
            inimigo.append(inimigo_img)

        # Cria grupo para as moedas
        coin = pygame.sprite.Group()

        # Cria um grupo para as caixas
        box = pygame.sprite.Group()

        #Cria grupo para os flocos
        flocos = pygame.sprite.Group()

        #Cria um grupo para o laser
        laser = pygame.sprite.Group()

        # Cria carrinhos e adiciona no grupo mobs
        for i in range(4):
            m = Mob(inimigo)
            all_sprites.add(m)
            mobs.add(m)

        #Cria as moedas
        imagem_coin = []
        for i in range(9):
            filename = 'Gold_0{}.png'.format(i)
            Coin_img = pygame.image.load(path.join(img_dir,
                                                   filename)).convert()
            Coin_img = pygame.transform.scale(Coin_img, (35, 35))
            Coin_img.set_colorkey(WHITE)
            imagem_coin.append(Coin_img)

        # Adiciona as moedas nos
        c = Coin(imagem_coin)
        all_sprites.add(c)
        coin.add(c)

        # Função para criar o floco de neve (FUNÇÃO POIS SÓ QUER UM POR VEZ)
        def chama_floco():
            f = Floco(assets["flocos_img"])
            all_sprites.add(f)
            flocos.add(f)

        # Chama a função que é usada posteriormente também
        chama_floco()

        estanevando = False
        estanevando_tempo = 0
        speedx = 0
        timee = 0
        clock.tick(FPS)
        pygame.mixer.music.play(loops=-1)
        velocidade = 0
        aceleracao = 0.75
        background_y_cima = -HEIGHT
        background_y = 0

        # Define quantos tiros a pessoa começa e quantos pontos
        contagemdetiros = 3
        score = 0

        # Um if para caso a pessoa aperte RESTART não precise colocar o nome novamente
        if nomecolocado == "":
            # Pegar o nome colocado pela pessoa chamando a função da tela inicial
            nomecolocado = tela_inicial(screen)

        # Loop principal
        running = True
        while running:

            # Ajusta a velocidade do jogo
            clock.tick(FPS)

            # Para o x parar de acelerar (derrapagem) quando se pega a neve em algum momento
            estanevando_tempo -= 1
            if estanevando_tempo == 1:
                estanevando_tempo = 0
                speedx = 0
                estanevando = False

            # Probabilidade de sortear caixinha
            if random.randrange(1, 700) == 1:
                b = Box(assets["box_img"])
                all_sprites.add(b)
                box.add(b)

            # Probabilidade de sortear moeda
            if random.randrange(1, 500) == 1:
                c = Coin(imagem_coin)
                all_sprites.add(c)
                coin.add(c)

            # Processa os eventos (mouse, teclado, botão, etc).
            for event in pygame.event.get():

                # Verifica se foi fechado.
                if event.type == pygame.QUIT:
                    running = False

                # Verifica se apertou alguma tecla.
                if event.type == pygame.KEYDOWN:
                    # Dependendo da tecla, altera a velocidade.
                    fator = 0
                    if estanevando or estanevando_tempo > 0:
                        fator = 2
                    if event.key == pygame.K_LEFT:
                        speedx = -5 + fator
                    if event.key == pygame.K_RIGHT:
                        speedx = 5 + fator

                    # Se for um espaço, atira! (caso tenha tiro)
                    if contagemdetiros > 0:
                        if event.key == pygame.K_SPACE:
                            laserr = Laser(assets['laser_img'],
                                           player.rect.centerx,
                                           player.rect.top)
                            all_sprites.add(laserr)
                            laser.add(laserr)
                            pew_sound.play()
                            contagemdetiros -= 1

                # Verifica se soltou alguma tecla.
                if event.type == pygame.KEYUP:
                    fator = 0
                    if estanevando or estanevando_tempo > 0:
                        fator = 2
                    # Dependendo da nevasca, altera a velocidade.
                    if event.key == pygame.K_LEFT:
                        speedx = fator
                    if event.key == pygame.K_RIGHT:
                        speedx = fator

            # Aponta a velocidade em x do player (carro)
            player.speedx = speedx

            # Verifica se jogador encostou a parede. Se encostar, morre.
            if player.rect.right > 519:
                boom_sound.play()
                running = False
            if player.rect.left < 89:
                boom_sound.play()
                running = False

            # Atualiza a acao de cada sprite.
            all_sprites.update()

            # Verifica se houve colisão entre Laser e carrinhos
            hits = pygame.sprite.groupcollide(mobs, laser, True, True)
            for hit in hits:
                # O carrinho é destruido e precisa ser recriado
                destroy_sound.play()
                m = Mob(inimigo)
                all_sprites.add(m)
                mobs.add(m)
                score += 5

            # Verifica se houve colisão entre os carrinhos
            hits = pygame.sprite.spritecollide(player, mobs, False,
                                               pygame.sprite.collide_circle)
            if hits:
                boom_sound.play()
                # Precisa esperar senão fecha duma vez
                time.sleep(0.5)
                running = False

            # Verifica se houve colisão com a moeda. Se houve, soma pontos
            hits = pygame.sprite.spritecollide(player, coin, True, False)
            if hits:
                moeda.play()
                score += 10

            # Verifica se houve colisão com o misterybox. Se houve, soma pontos e ativa laser (ou soma)
            hits = pygame.sprite.spritecollide(player, box, True, False)
            for hit in hits:
                Ta_Da.play()
                score += 5
                contagemdetiros += 3

            # Verifica se houve colisão entre player e floco de neve
            hits = pygame.sprite.spritecollide(player, flocos, True, False)
            if hits:
                # Ativa o modo nevasca
                estanevando = True
                estanevando_tempo = 120
                speedx = 1
                for i in range(30):
                    n = Nevasca(assets["flocos2_img"])
                    all_sprites.add(n)
                chama_floco()

            # Velocidade do player. Vai aumentando e estabiliza em 18
            if velocidade < 18:
                velocidade += aceleracao

            # A cada loop, redesenha o fundo e os sprites
            background_y_cima += velocidade
            background_y += velocidade

            if background_y >= HEIGHT:
                background_y = 0
                background_y_cima = -HEIGHT

            background_rect_cima.y = background_y_cima
            background_rect.y = background_y

            screen.blit(background, background_rect_cima)
            screen.blit(background, background_rect)
            all_sprites.draw(screen)

            # Desenha o score, por tempo
            timee += 1
            pont = (timee // FPS) + score
            text_surface = score_font.render("{:01d}".format(pont), True,
                                             BLACK)
            text_rect = text_surface.get_rect()
            text_rect.midtop = (WIDTH - 300, 10)
            screen.blit(text_surface, text_rect)

            if contagemdetiros > 0:
                text_surface = score_font.render(
                    "SPACE:{:01d} ESPECIAIS".format(contagemdetiros), True,
                    BLACK)
                text_rect = text_surface.get_rect()
                text_rect.midtop = (WIDTH / 2, HEIGHT - 130)
                screen.blit(text_surface, text_rect)

            # Depois de desenhar tudo, inverte o display.
            pygame.display.flip()

            # Chamando a função para ver se a pessoa fez a maior pontuação
            maior_pontuacao(pont, nomecolocado)

        # Chamando para aparecer na tela se for o maior pontuador
        maior_pontuacao(pont, nomecolocado)

        # Chama a tela final para mostrar a pontuação da pessoa
        tela_mostra_pontuacao(screen, nomecolocado, pont)

        # Matando os mobs e o player para fazê-lo novamente quando voltar o loop
        for mobs in all_sprites:
            mobs.kill()
            player.kill()