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)
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)
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()
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():
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()