monsters.add(mob3) if random.randrange(1, 10) == 1: bullet = Bullet(mob3.rect.centerx, mob3.rect.top) all_sprites.add(bullet) bullets.add(bullet) pew_sound.play() if random.randrange(1, 200) == 1: mob = Mob() # Cria um grupo só do inimigo all_sprites.add(mob) monsters.add(mob) if random.randrange(1, 50) == 1: #Cria plataforma tamanhos = [1, 3, 5] plat = Plataforma(WIDTH, HEIGHT - 300, tamanhos[random.randrange(0, 3)]) all_sprites.add(plat) plataformas.add(plat) for event in pygame.event.get(): if event.type == pygame.QUIT: running = False if event.type == pygame.KEYDOWN: if event.key == pygame.K_LEFT: vx = 8 player.imgs = [] n = 6 for i in range(n): player.imgs.append(
def game_screen(screen): contador = 0 clock = pygame.time.Clock() # Carrega o fundo do jogo background = pygame.image.load(path.join('Fundo4.jpg')).convert() background_rect = background.get_rect() x = 0 vx = 0 #gravidade g = 1 # Carrega os sons do jogo pygame.mixer.music.load(path.join(snd_dir, 'naruto.mp3')) pygame.mixer.music.set_volume(0.4) boom_sound = pygame.mixer.Sound(path.join(snd_dir, 'expl3.wav')) destroy_sound = pygame.mixer.Sound(path.join(snd_dir, 'expl6.wav')) pew_sound = pygame.mixer.Sound(path.join(snd_dir, 'pew.wav')) player = Player() # Cria um grupo só do inimigo monsters = pygame.sprite.Group() #Cria um grupo para plataformas plataformas = pygame.sprite.Group() # Cria um grupo de todos os sprites e adiciona a nave. all_sprites = pygame.sprite.Group() all_sprites.add(player) bullets = pygame.sprite.Group() pygame.mixer.music.play(loops=-1) PLAYING = 0 state = PLAYING MORRENDO= 1 DONE = 2 #Cria Pontuação score = 0 #Cria Vidas vidas=3 while state != DONE and contador < 3: # Ajusta a velocidade do jogo. clock.tick(FPS) if random.randrange(1,100) == 1: mob2 = Mob2() all_sprites.add(mob2) monsters.add(mob2) if random.randrange(1,200) == 1: mob3 = Mob3() all_sprites.add(mob3) monsters.add(mob3) if random.randrange(1,200) == 1: mob = Mob() # Cria um grupo só do inimigo all_sprites.add(mob) monsters.add(mob) if random.randrange(1, 50) == 1: #Cria plataforma tamanhos = [1, 3, 5] plat = Plataforma(WIDTH, HEIGHT-325, tamanhos[random.randrange(0, 3)]) all_sprites.add(plat) plataformas.add(plat) for event in pygame.event.get(): if event.type == pygame.QUIT: running = False if event.type == pygame.KEYDOWN: if event.key == pygame.K_LEFT: vx = 8 player.imgs = [] n=6 for i in range(n): player.imgs.append(pygame.image.load(path.join(img_dir, "Left{0}.png".format(i+1))).convert()) player.frame = 0 player.step = 5 player.image = player.imgs[player.frame] player.image = pygame.transform.scale(player.image, (1,1)) if event.key == pygame.K_RIGHT: vx = -8 player.imgs = [] n=6 for i in range(n): player.imgs.append(pygame.image.load(path.join(img_dir, "Run{0}.png".format(i+1))).convert()) player.frame = 0 player.step = 5 player.image = player.imgs[player.frame] player.image = pygame.transform.scale(player.image, (1,1)) if event.key == pygame.K_UP:#pulo player.speedy = -15 if event.key == pygame.K_DOWN: player.speedy = 10 if event.key == pygame.K_SPACE: player.imgs = [] n=5 for i in range(n): player.imgs.append(pygame.image.load(path.join(img_dir, "Punch{0}.png".format(i+1))).convert()) player.frame = 0 player.image = player.imgs[player.frame] player.step=5 player.image = pygame.transform.scale(player.image, (1,1)) bullet = Bullet(player.rect.centerx, player.rect.top) all_sprites.add(bullet) bullets.add(bullet) pew_sound.play() if event.key == pygame.K_m: player.imgs = [] n=6 for i in range(n): player.imgs.append(pygame.image.load(path.join(img_dir, "R{0}.png".format(i+1))).convert()) player.frame = 0 player.image = player.imgs[player.frame] player.step=5 player.image = pygame.transform.scale(player.image, (1,1)) ras = Rasengan(player.rect.centerx, player.rect.top) all_sprites.add(ras) bullets.add(ras) pew_sound.play() ################################# # Verifica se soltou alguma tecla. if event.type == pygame.KEYUP: # Dependendo da tecla, altera a velocidade. if event.key == pygame.K_LEFT: vx = 0 player.imgs = [] n=6 for i in range(n): player.imgs.append(pygame.image.load(path.join(img_dir, "Naruto{0}.png".format(i+1))).convert()) player.frame = 0 player.image = player.imgs[player.frame] player.image = pygame.transform.scale(player.image, (1,1)) player.speedx = 0 if event.key == pygame.K_RIGHT: vx = 0 player.imgs = [] n=6 for i in range(n): player.imgs.append(pygame.image.load(path.join(img_dir, "Naruto{0}.png".format(i+1))).convert()) player.frame = 0 player.image = player.imgs[player.frame] player.image = pygame.transform.scale(player.image, (1,1)) player.speedx = 0 if event.key == pygame.K_UP: if event.key == pygame.K_RIGHT: vx = 0 player.imgs = [] n=6 for i in range(n): player.imgs.append(pygame.image.load(path.join(img_dir, "Naruto{0}.png".format(i+1))).convert()) player.frame = 0 player.image = player.imgs[player.frame] player.image = pygame.transform.scale(player.image, (1,1)) player.speedx = 0 if event.key == pygame.K_DOWN: player.speedy = 0 if event.key == pygame.K_SPACE: player.imgs = [] n=6 for i in range(n): player.imgs.append(pygame.image.load(path.join(img_dir, "Run{0}.png".format(i+1))).convert()) player.frame = 0 player.image = player.imgs[player.frame] player.image = pygame.transform.scale(player.image, (1,1)) player.speedx = 0 player.step=5 if event.key == pygame.K_m: player.imgs = [] player.steps = 5 n=6 for i in range(n): player.imgs.append(pygame.image.load(path.join(img_dir, "Run{0}.png".format(i+1))).convert()) player.frame = 0 player.steps = 5 player.image = player.imgs[player.frame] player.image = pygame.transform.scale(player.image, (1,1)) player.speedx = 0 if player.rect.y < HEIGHT/2 - 45.5:#gravidade player.speedy +=g # Verifica se houve colisão entre tiro e inimigo hits = pygame.sprite.groupcollide(monsters, bullets, True, True) for hit in hits: # Pode haver mais de um score += 50 # O meteoro e destruido e precisa ser recriado destroy_sound.play() contador += 1 #m = Mob() #all_sprites.add(m) #monsters.add(m) # Verifica se houve colisão entre personagem e inimigo hits = pygame.sprite.spritecollide(player, monsters, False, pygame.sprite.collide_circle) if hits: # Toca o som da colisão boom_sound.play() #time.sleep(5) # Precisa esperar senão fecha #morte #morte = Morte(hit.rect.center) #all_sprites.add(morte) boom_sound.play() #all_sprites.add(morte) #state = MORRENDO #morte_tick = pygame.time.get_ticks() #morte_duration = morte.frame_ticks * len(morte.morte_anim) + 400 #if vidas<=0: player.kill() running = False #else: #vidas-=1 # Depois de processar os eventos. # Atualiza a acao de cada sprite. all_sprites.update() # A cada loop, redesenha o fundo e os sprites screen.fill(BLACK) rel_x = x % background.get_rect().width x+= vx screen.blit(background, (rel_x -background.get_rect().width , 0)) if rel_x < WIDTH: screen.blit(background, (rel_x, 0)) all_sprites.draw(screen) # Depois de desenhar tudo, inverte o display. pygame.display.flip() #Desenha pontuação draw_text(screen, str(score), 18, WIDTH/2, 50) #Desenha vidas #draw_text(screen, str(vidas), 18, WIDTH/2, 80) g = 0 while state != DONE and contador >= 3: # Ajusta a velocidade do jogo. clock.tick(FPS) if random.randrange(1,100) == 1: mob2 = Mob2() all_sprites.add(mob2) monsters.add(mob2) if random.randrange(1,200) == 1: mob3 = Mob3() all_sprites.add(mob3) monsters.add(mob3) if random.randrange(1,200) == 1: mob = Mob() if random.randrange(1, 50) == 1: #Cria plataforma tamanhos = [1, 3, 5] plat = Plataforma(WIDTH, HEIGHT-325, tamanhos[random.randrange(0, 3)]) all_sprites.add(plat) plataformas.add(plat) for event in pygame.event.get(): if event.type == pygame.QUIT: running = False if event.type == pygame.KEYDOWN: if event.key == pygame.K_LEFT: vx = 8 player.imgs = [] n=5 for i in range(n): player.imgs.append(pygame.image.load(path.join(img_dir, "Flip{0}.png".format(i+1))).convert()) player.frame = 0 player.step = 5 player.image = player.imgs[player.frame] player.image = pygame.transform.scale(player.image, (1,1)) if event.key == pygame.K_RIGHT: vx = -8 player.imgs = [] n=8 for i in range(n): player.imgs.append(pygame.image.load(path.join(img_dir, "Nr{0}.png".format(i+1))).convert()) player.frame = 0 player.step = 3 player.image = player.imgs[player.frame] player.image = pygame.transform.scale(player.image, (1,1)) if event.key == pygame.K_UP:#pulo player.speedy = -15 if player.rect.y < HEIGHT/2 - 45.5:#gravidade player.speedy +=g all_sprites.update() time.sleep(1e-2) screen.fill(BLACK) screen.blit(background, (x, 0)) all_sprites.draw(screen) pygame.display.flip() if event.key == pygame.K_DOWN: player.speedy = 10 if event.key == pygame.K_SPACE: player.imgs = [] n=10 for i in range(n): player.imgs.append(pygame.image.load(path.join(img_dir, "P{0}.png".format(i+1))).convert()) player.frame = 0 player.image = player.imgs[player.frame] player.step = 5 player.image = pygame.transform.scale(player.image, (1,1)) bullet = Nrpower(player.rect.centerx, player.rect.top) all_sprites.add(bullet) bullets.add(bullet) pew_sound.play() if event.key == pygame.K_m: player.imgs = [] n=5 for i in range(n): player.imgs.append(pygame.image.load(path.join(img_dir, "NrP{0}.png".format(i+1))).convert()) player.frame = 0 player.image = player.imgs[player.frame] player.step = 5 player.image = pygame.transform.scale(player.image, (1,1)) powe = Nrm(player.rect.centerx, player.rect.top) all_sprites.add(powe) bullets.add(powe) pew_sound.play() ################################# # Verifica se soltou alguma tecla. if event.type == pygame.KEYUP: # Dependendo da tecla, altera a velocidade. if event.key == pygame.K_LEFT: vx = 0 player.imgs = [] n=8 for i in range(n): player.imgs.append(pygame.image.load(path.join(img_dir, "Nr{0}.png".format(i+1))).convert()) player.frame = 0 player.image = player.imgs[player.frame] player.image = pygame.transform.scale(player.image, (1,1)) player.speedx = 0 if event.key == pygame.K_RIGHT: vx = 0 player.imgs = [] n=8 for i in range(n): player.imgs.append(pygame.image.load(path.join(img_dir, "Nr{0}.png".format(i+1))).convert()) player.frame = 0 player.image = player.imgs[player.frame] player.image = pygame.transform.scale(player.image, (1,1)) player.speedx = 0 if event.key == pygame.K_UP: if event.key == pygame.K_RIGHT: vx = 0 player.imgs = [] n=8 for i in range(n): player.imgs.append(pygame.image.load(path.join(img_dir, "Nr{0}.png".format(i+1))).convert()) player.frame = 0 player.image = player.imgs[player.frame] player.image = pygame.transform.scale(player.image, (1,1)) player.speedx = 0 if event.key == pygame.K_DOWN: player.speedy = 0 if event.key == pygame.K_SPACE: player.imgs = [] n=8 for i in range(n): player.imgs.append(pygame.image.load(path.join(img_dir, "Nr{0}.png".format(i+1))).convert()) player.frame = 0 player.image = player.imgs[player.frame] player.image = pygame.transform.scale(player.image, (1,1)) player.speedx = 0 player.step=5 if event.key == pygame.K_m: player.imgs = [] player.steps = 5 n=8 for i in range(n): player.imgs.append(pygame.image.load(path.join(img_dir, "Nr{0}.png".format(i+1))).convert()) player.frame = 0 player.steps = 5 player.image = player.imgs[player.frame] player.image = pygame.transform.scale(player.image, (1,1)) player.speedx = 0 if player.rect.y < HEIGHT/2 - 45.5:#gravidade player.speedy +=g time.sleep(1e-2) # Verifica se houve colisão entre tiro e inimigo hits = pygame.sprite.groupcollide(monsters, bullets, True, True) for hit in hits: # Pode haver mais de um # O meteoro e destruido e precisa ser recriado destroy_sound.play() contador += 1 score += 100 #m = Mob() #all_sprites.add(m) #monsters.add(m) # No lugar do meteoro antigo, adicionar uma explosão. # Verifica se houve colisão entre personagem e inimigo hits = pygame.sprite.spritecollide(player, monsters, False, pygame.sprite.collide_circle) if hits: # Toca o som da colisão #morte = Morte(hit.rect.center) #all_sprites.add(morte) boom_sound.play() #all_sprites.add(morte) #state = MORRENDO #morte_tick = pygame.time.get_ticks() #morte_duration = morte.frame_ticks * len(morte.morte_anim) + 400 #if vidas<=0: player.kill() state = DONE #else: #vidas-=1 #state = MORRENDO #now = pygame.time.get_ticks() #if now - morte_tick > morte_duration: #state = PLAYING #elif state == MORRENDO: # now = pygame.time.get_ticks() #if now - morte_tick > morte_duration: # state = DONE time.sleep(5) # Precisa esperar senão fecha # Depois de processar os eventos. # Atualiza a acao de cada sprite. all_sprites.update() hits = pygame.sprite.spritecollide(player, plataformas, False) if hits: player.rect.y = hits[0].rect.top player.speedy = 0 # A cada loop, redesenha o fundo e os sprites screen.fill(BLACK) rel_x = x % background.get_rect().width x+= vx screen.blit(background, (rel_x -background.get_rect().width , 0)) if rel_x < WIDTH: screen.blit(background, (rel_x, 0)) for p in plataformas: p.move(vx) all_sprites.draw(screen) #Desenha pontuação draw_text(screen, str(score), 18, WIDTH/2, 50) #Desenha vidas #draw_text(screen, str(vidas), 18, WIDTH/2, 80) # Depois de desenhar tudo, inverte o display. pygame.display.flip() return OVER
def eventos(self, e): if e.type == pygame.MOUSEBUTTONUP and e.button == 1: self.arrastando_entidade = False if e.type == pygame.MOUSEBUTTONDOWN and e.button == 2: self.camera_mov_x += self.pos[0] self.camera_mov_y += self.pos[1] if e.type == pygame.MOUSEBUTTONUP and e.button == 2: self.camera_mov_x -= self.pos[0] self.camera_mov_y -= self.pos[1] if e.type == pygame.MOUSEBUTTONUP and e.button == 3: entidade = self.pegar_entidade_cursor() if entidade: nomes = entidade.get_nomes() param = multenterbox(msg=entidade.__class__.__name__, title='Editor de atributos', fields=(nomes)) if param: entidade.setar_atributos(param) else: nomes = ["ID", "Cor", "Imagem Fundo"] param = multenterbox(msg="Fase", title='Editor de atributos', fields=(nomes)) if param: self.fase.setar_atributos(param) if e.type == pygame.KEYDOWN: if e.key == pygame.K_DELETE: entidade = self.pegar_entidade_cursor() if entidade: self.entidades.remove(entidade) self.fase.remover(entidade) mods = pygame.key.get_mods() if mods & pygame.KMOD_CTRL: # get_mods para poder pegar o evento de duas teclas pressionadas (e.g CTRL + NUMPAD1/2/3/4) if mods & pygame.KMOD_SHIFT and e.key == pygame.K_s: if self.arquivo_atual: self.ff.salvar_arquivo("Fases/" + self.arquivo_atual, self.fase) print("Salvo!") else: msgbox("Nenhum arquivo foi aberto!", "Erro") elif e.key == pygame.K_s: if self.fase.get_id() == -1: _id = enterbox("Digite o id da fase!") if _id: self.fase.set_id(_id) else: return arquivo = enterbox("Digite o nome do arquivo a ser salvo!") if arquivo: self.arquivo_atual = arquivo self.ff.salvar_arquivo("Fases/" + self.arquivo_atual, self.fase) if e.key == pygame.K_1: jogador = Jogador(400, 420, 30, 30, 0.0, 0.0, 2.3, (0, 25, 125), "no_img") self.entidades.append(jogador) self.fase.set_jogador(jogador) elif e.key == pygame.K_2: plataforma = Plataforma(0, 570, 800, 30, 0.0, 0.0, 0.0, (10, 10, 15), "no_img") self.entidades.append(plataforma) self.fase.adicionar_plataforma(plataforma) elif e.key == pygame.K_3: plataforma = PlataformaAndante(400, 300, 100, 30, 0, 0, 0.5, (100, 200), (0, 0), 0.0, (200, 0, 150), "no_img") self.entidades.append(plataforma) self.fase.adicionar_plataforma(plataforma) elif e.key == pygame.K_4: energia = Energia(400, 240, 20, 30, 0, 0, 0.0, True, (255, 255, 125), "no_img") self.entidades.append(energia) self.fase.adicionar_energia(energia) elif e.key == pygame.K_5: moeda = Moeda(300, 510, 10, 10, 0, 0, 0.0, (255, 100, 10), "no_img") self.entidades.append(moeda) self.fase.adicionar_moeda(moeda) elif e.key == pygame.K_6: inimigo = Inimigo(170, 540, 30, 30, 0, 0, 2.0, True, 25.0, False, (0, 25, 125), "canon.png", "gold_bullet.png") self.entidades.append(inimigo) self.fase.adicionar_inimigo(inimigo) elif e.key == pygame.K_l: arquivo = enterbox( "Digite o nome do arquivo a ser carregado!") if arquivo: self.arquivo_atual = arquivo ret = self.gf.iniciar(self.arquivo_atual) if ret: ret = ret[:] self.entidades = ret[0] self.fase = ret[1] else: msgbox("Arquivo não existente ou corrompido!", "Erro") elif e.key == pygame.K_c: entidade = self.pegar_entidade_cursor() if entidade: self.entidade_copia = self.copiar_entidade(entidade) elif e.key == pygame.K_v: if self.entidade_copia: self.entidade_copia.x = self.pos[ 0] - self.camera.x - self.entidade_copia.w / 2 self.entidade_copia.y = self.pos[ 1] - self.camera.y - self.entidade_copia.h / 2 clone = self.copiar_entidade(self.entidade_copia) self.entidades.append(clone) self.fase.adicionar(clone) elif mods & pygame.KMOD_SHIFT and e.key == pygame.K_f: if self.arquivo_atual: copy2("Fases/" + self.arquivo_atual, "../Projeto/Fases") print("Arquivo enviado!") else: msgbox("Nenhum arquivo para ser enviado!", "Erro") elif e.key == pygame.K_f: nome = enterbox("Digite o nome do arquivo a enviado!") if nome: copy2("Fases/" + nome, "../Projeto/Fases") elif mods & pygame.KMOD_SHIFT and e.key == pygame.K_b: if self.arquivo_atual: self.ff.salvar_arquivo("Fases/" + self.arquivo_atual, self.fase) print("Salvo!") copy2("Fases/" + self.arquivo_atual, "../Projeto/Fases") print("Arquivo enviado!") Popen("python jogo.py", cwd="../Projeto/Codigo/", shell=True) else: msgbox("Nenhum arquivo aberto ou salvo!", "Erro") elif e.key == pygame.K_b: Popen("python jogo.py", cwd="../Projeto/Codigo/", shell=True) elif e.key == pygame.K_n: self.entidades = [] self.fase = Fase(-1, None, self.dummy_fundo, [], [], [], [], "no_img") self.arquivo_atual = ""
def criar_fase(self, linha): plataformas = [] moedas = [] energias = [] inimigos = [] cor = (65, 65, 65) fundo = pygame.Surface((800, 600)) fundo.fill(cor) jogador = None _id = 0 for i in linha: i = i.split(":") if i[0] == "plataforma": i = i[1].split("|") print(i) plataformas.append( Plataforma(float(i[0]), float(i[1]), float(i[2]), float(i[3]), float(i[4]), float(i[5]), float(i[6]), parse_tuple(i[7]), i[8])) elif i[0] == "plataforma_andante": i = i[1].split("|") print(i) plataformas.append( PlataformaAndante(float(i[0]), float(i[1]), float(i[2]), float(i[3]), float(i[4]), float(i[5]), float(i[6]), parse_tuple(i[7]), parse_tuple(i[8]), float(i[9]), parse_tuple(i[10]), i[11])) elif i[0] == "energia": i = i[1].split("|") print(i) energias.append( Energia(float(i[0]), float(i[1]), float(i[2]), float(i[3]), float(i[4]), float(i[5]), float(i[6]), parse_bool(i[7]), parse_tuple(i[8]), i[9])) elif i[0] == "inimigo": i = i[1].split("|") print(i) inimigos.append( Inimigo(float(i[0]), float(i[1]), float(i[2]), float(i[3]), float(i[4]), float(i[5]), float(i[6]), parse_bool(i[7]), float(i[8]), parse_bool(i[9]), parse_tuple(i[10]), i[11], i[12])) elif i[0] == "jogador": i = i[1].split("|") jogador = Jogador(float(i[0]), float(i[1]), float(i[2]), float(i[3]), float(i[4]), float(i[5]), float(i[6]), parse_tuple(i[7]), i[8]) elif i[0] == "moeda": i = i[1].split("|") moedas.append( Moeda(float(i[0]), float(i[1]), float(i[2]), float(i[3]), float(i[4]), float(i[5]), float(i[6]), parse_tuple(i[7]), i[8])) elif i[0] == "cor": cor = parse_tuple(i[1]) fundo.fill(cor) elif i[0] == "fundo": caminho_fundo = i[1] elif i[0] == "fase_indice": _id = int(i[1]) if caminho_fundo != "no_img": fundo = pygame.image.load("../Imagens/" + caminho_fundo).convert_alpha() return Fase(_id, jogador, fundo, plataformas, moedas, energias, inimigos, cor)
def cargar_plataformas(self): """Carga todas las plataformas del nivel""" for bound in self.bounds_plataformas: self.plataformas.append(Plataforma(bound))
lista_sprites_enemigos.add(enemigo_secundario) """esto es un comentario""" #paredes pared = Pared(250, 0, 10, 450) lista_sprites_activos.add(pared) lista_sprites_enemigos.add(pared) # Creamos al jugador con la imagen p1_walk.png jugador_principal = Player("imagenes/p1_walk.png", lista_sprites_enemigos) jugador_principal.rect.x = 0 jugador_principal.rect.y = constantes.ALTURA_PANTALLA - jugador_principal.rect.height lista_sprites_activos.add(jugador_principal) #plataformas GRASS_MIDDLE = (648, 648, 70, 40) plataforma = Plataforma("imagenes/tiles_spritesheet.png", GRASS_MIDDLE) plataforma.rect.x = 100 plataforma.rect.y = 100 lista_sprites_activos.add(plataforma) lista_sprites_enemigos.add(plataforma) #plataforma con movimitnto GRASS_MIDDLE = (648, 648, 70, 40) plataformaMov = PlataformaConMovimiento("imagenes/tiles_spritesheet.png", GRASS_MIDDLE, jugador_principal) plataformaMov.rect.x = 600 plataformaMov.rect.y = 400 lista_sprites_activos.add(plataformaMov) lista_sprites_enemigos.add(plataformaMov) plataformaMov.limite_izquierdo = 500 plataformaMov.limite_derecho = 660
def __init__(self, ruta, sprite_sheet_data, jugador): Plataforma.__init__(self, ruta, sprite_sheet_data) self.jugador = jugador
newbackgroud2 = PlanoFundo(objectGroup) newbackgroud2.rect.center = [430, 290] newbackgroud2.image = newbackgroud2.images[2] backgroud2.speed = 2 newbackgroud2.speed = 2 backgroud3 = PlanoFundo(objectGroup) newbackgroud3 = PlanoFundo(objectGroup) newbackgroud3.rect.center = [430, 290] backgroud3.image = backgroud3.images[3] newbackgroud3.image = newbackgroud2.images[3] backgroud3.speed = 3 newbackgroud3.speed = 3 # Plataforma plataforma = Plataforma(objectGroup) newplataforma = Plataforma(objectGroup) newplataforma.rect.center = [430, 520] # buzina buz = Buzina(objectGroup) buz.rect.bottom = plataforma.rect.top # Personagens leo = Leo(DelayGroup) leo.rect.bottom = plataforma.rect.top renan = Renan(DelayGroup) renan.rect.bottom = plataforma.rect.top carol = Carol(DelayGroup, carolGroup)