""" module docs """ import re import turtle as tl from time import sleep as pause from menus import main_menu def ler_falas(file: str) -> dict[str: list[str]]: pattern_inicio: str = r"CENA ([\w ]+)\s?" pattern_fim: str = r"CENA ([\w ]+) END\s?" falas = dict() with open(file, "r", encoding="utf-8") as arquivo: atual = "" lendo = True linha = arquivo.readline() while linha != "": inicio = re.search(pattern_inicio, linha) fim = re.search(pattern_fim, linha) if inicio: atual = inicio.group()[5:-1] linha = arquivo.readline() lendo = True continue elif fim: lendo = False continue if lendo == False: linha = arquivo.readline() continue else: if falas.get(atual) == None: falas[atual] = [] linha = linha.replace("\\n", "\n") falas[atual].append((linha[0], linha[2:-1])) linha = arquivo.readline() return falas def lerp(inicial: tl.Vec2D, final: tl.Vec2D, t: float) -> tl.Vec2D: return inicial + (final - inicial) * t # Função de movimento com troca de sprite def goto_animado(personagem: tl.Turtle, x: float, y: float, sprites: list[str], passos: int = 10): posicao_inicial: tl.Vec2D = personagem.pos() posicao_final: tl.Vec2D = tl.Vec2D(x, y) for posicao in range(passos): personagem.shape(sprites[posicao%len(sprites)]) #shape(sprites[posicao % 2]) # Alterna os sprites personagem.goto(lerp(posicao_inicial, posicao_final, 1/(passos + 1) * posicao)) # Move a tartaruga # Funcao para fazer as falas dos personagens def falas(personagem: tl.Turtle, text: str, tempo: float = 3) -> None: fala.goto(personagem.pos()) fala.left(45) fala.fd(50) fala.color("white") fala.write(text,False,font=("arial",10,"normal")) pause(tempo) count = 0 while count <= 3: fala.undo() count += 1 def falar_do_roteiro(roteiro: list[tuple[str, str]], index: int, tempo: float = 3): if roteiro[index][0] == "P": falas(pinto, roteiro[index][1], tempo) elif roteiro[index][0] == "C": falas(cobra, roteiro[index][1], tempo) return index + 1 def pinto_acha_cobra() -> str: """ Roteiro da cena 1: Lugar misterioso com um baú. O pinto entra na cena. "Eita, um baú totalmente estranho no meio dessa masmorra super perigosa." "Baús são legais. Com certeza deve ter algo legal dentro. Vou ver o que tem nele." - Diz o pinto. O pinto vai até o baú e tenta abrir ele. O baú abre e sai uma cobra de dentro. "Vixe, uma cobra!" - Diz o pinto se afastando do baú. "Tenha calma pequeno pinto. Eu não sou uma cobra má." - Diz a cobra saindo do baú. "Por que eu deveria acreditar em você?" - Diz o pinto se afastando. "Porque o meu nome é Python! Cobras com esse nome são confiáveis..." - Diz a cobra. "Tipo aquela linguagem de programação?" - Pergunta o pinto. "Isso mesmo!" - Responde a cobra. "Eu não quero fazer programa!!!" - Diz o pinto enquanto sai de cena "Volte aqui pintinho, eu não vou fazer você programar!" - Diz a acobra correndo atrás do pinto. Ambos saem de cena. """ cena = "pinto_acha_cobra" index = 0 terminou = "não" tl.addshape("sprites/fundos/fundo_1_bau_fechado.gif") bgpic.shape("sprites/fundos/fundo_1_bau_fechado.gif") tl.addshape("sprites/personagens/pinto_.gif") pinto.shape("sprites/personagens/pinto_.gif") pinto.goto(-281, -89) pinto.showturtle() pinto.goto(-132, -89) index = falar_do_roteiro(falas_dict[cena], index) index = falar_do_roteiro(falas_dict[cena], index) pinto.goto(28, -89) pinto.goto(31, -16) pause(2) tl.addshape("sprites/fundos/fundo_1_bau_aberto.gif") bgpic.shape("sprites/fundos/fundo_1_bau_aberto.gif") pause(1) tl.addshape("sprites/personagens/_cobra.gif") cobra.shape("sprites/personagens/_cobra.gif") cobra.goto(31, 53) cobra.showturtle() pinto.goto(-160, -132) index = falar_do_roteiro(falas_dict[cena], index) cobra.goto(-3, -62) index = falar_do_roteiro(falas_dict[cena], index) pinto.goto(-242, -164) index = falar_do_roteiro(falas_dict[cena], index) cobra.goto(-55, -108) index = falar_do_roteiro(falas_dict[cena], index, tempo = 4) index = falar_do_roteiro(falas_dict[cena], index) index = falar_do_roteiro(falas_dict[cena], index) tl.addshape("sprites/personagens/_pinto.gif") count = 0 while count <= 4: pinto.shape("sprites/personagens/_pinto.gif") pause(0.15) pinto.shape("sprites/personagens/pinto_.gif") pause(0.15) count += 1 pinto.shape("sprites/personagens/_pinto.gif") index = falar_do_roteiro(falas_dict[cena], index) pause(0.5) pinto.goto(-281, -89) pinto.hideturtle() index = falar_do_roteiro(falas_dict[cena], index) cobra.goto(-281, -89) cobra.hideturtle() pause(2) terminou = "sim" if terminou == "sim": return "Finalizou cena" else: return "Nao conseguiu finalizar a cena" def pinto_foge_cobra() -> str: """ Roteiro da cena 2: Um lugar da masmorra sombria. Esse lugar tem mais de uma saída. Tem paredes e obstáculos. O pinto aparece correndo da cobra. "Ainda bem que eu já passei por aqui!" - Diz ele. O pinto então passa pelos lugares certos e vai na direção de cima. Enquanto isso a cobra chega no lugar e fica "perdida". "Que lugar estranho! No baú era melhor." - Diz ela. Não sabendo para onde foi o pinto, ela diz - "Não sei para onde esse pinto foi..." Então ela vai para baixo. Ambos fora de cena. """ cena = "pinto_foge_cobra" index = 0 terminou = "não" tl.addshape("sprites/fundos/fundo_2.gif") bgpic.shape("sprites/fundos/fundo_2.gif") tl.addshape("sprites/personagens/_pinto.gif") pinto.shape("sprites/personagens/_pinto.gif") pinto.goto(286, -26) pinto.showturtle() pinto.goto(2, -28) index = falar_do_roteiro(falas_dict[cena], index) tl.addshape("sprites/personagens/pinto_.gif") pinto.shape("sprites/personagens/pinto_.gif") pinto.goto(-1, 298) pinto.hideturtle() tl.addshape("sprites/personagens/_cobra.gif") cobra.shape("sprites/personagens/_cobra.gif") cobra.goto(286, -26) cobra.showturtle() cobra.goto(2, -28) index = falar_do_roteiro(falas_dict[cena], index) tl.addshape("sprites/personagens/cobra_.gif") count = 0 while count <= 4: cobra.shape("sprites/personagens/cobra_.gif") pause(0.15) cobra.shape("sprites/personagens/_cobra.gif") pause(0.15) count += 1 index = falar_do_roteiro(falas_dict[cena], index) cobra.shape("sprites/personagens/cobra_.gif") cobra.goto(1, -285) cobra.hideturtle() pause(2) terminou = "sim" if terminou == "sim": return "Finalizou cena" else: return "Nao conseguiu finalizar a cena" def pinto_acha_arma() -> str: """ Roteiro da cena 3: Nessa cena o pinto chega em uma nova sala estranha com um baú. "Nossa, outro baú muito perigoso nessa masmorra. Vou abrir!" - Diz o pinto indo em direção ao baú. O pinto vai até o baú e após abrir ele, acha um lança-chamas. "Isso com certeza vai servir!" - Diz ele segurando a arma e indo para uma outra sala. O pinto na outra sala vai para a sala da esquerda. A cobra sai debaixo e fala - "Eu achei você!" - Depois ela vai para a sala. A cobra segue o pinto. Todos saem de cena. """ cena = "pinto_acha_arma" index = 0 terminou = "não" tl.addshape("sprites/fundos/fundo_3_bau_fechado.gif") bgpic.shape("sprites/fundos/fundo_3_bau_fechado.gif") tl.addshape("sprites/personagens/pinto_.gif") pinto.shape("sprites/personagens/pinto_.gif") pinto.hideturtle() pinto.goto(0, -352) pinto.showturtle() pinto.goto(0, -16) index = falar_do_roteiro(falas_dict[cena], index) tl.addshape("sprites/fundos/fundo_3_bau_aberto.gif") bgpic.shape("sprites/fundos/fundo_3_bau_aberto.gif") tl.addshape("sprites/objetos/lancachamas.gif") lanca_chamas.shape("sprites/objetos/lancachamas.gif") lanca_chamas.goto(0, 64) lanca_chamas.showturtle() index = falar_do_roteiro(falas_dict[cena], index) lanca_chamas.hideturtle() tl.addshape("sprites/personagens/_pinto_flamer.gif") pinto.shape("sprites/personagens/_pinto_flamer.gif") pause(1) pinto.goto(0, -352) # OUTRA SALA ---------------------------------------------------------------------------------------- tl.addshape("sprites/fundos/fundo_2.gif") bgpic.shape("sprites/fundos/fundo_2.gif") pinto.hideturtle() pinto.goto(0, 352) pinto.showturtle() pinto.goto(0, 0) pinto.goto(-352, 0) tl.addshape("sprites/personagens/_cobra.gif") cobra.shape("sprites/personagens/_cobra.gif") cobra.hideturtle() cobra.goto(0, -352) cobra.showturtle() cobra.goto(0, 0) index = falar_do_roteiro(falas_dict[cena], index) cobra.goto(-352, 0) pause(2) terminou = "sim" if terminou == "sim": return "Finalizou cena" else: return "Nao conseguiu finalizar a cena" def pinto_mata_cobra() -> str: """ Roteiro da cena 4: O pinto com a sua arma chega na nova sala da masmorra e fica mirando para a porta esperando a cobra. "Daqui não tem como errar..." - Diz o pinto. A cobra chega na sala indo em direção ao pinto. "Vou te alcançar!" Diz ela. Com a cobra se aproximando do pinto. O pinto aperta o gatilho e sai uma rajada de fogo na cobra; ela morre cremada. "Parece que agora eu não sou o 'pequeno pinto', né?" Diz o pinto. O pinto deixa o lança chamas no chão. "Vou voltar a explorar essa masmorra legal." Diz o pinto. Ele sai da cena. """ cena = "pinto_mata_cobra" index = 0 terminou = "não" tl.addshape("sprites/fundos/fundo_4.gif") bgpic.shape("sprites/fundos/fundo_4.gif") tl.addshape("sprites/personagens/_pinto_flamer.gif") pinto.shape("sprites/personagens/_pinto_flamer.gif") pinto.hideturtle() pinto.goto(290, -123) pinto.showturtle() pinto.goto(-134, -121) tl.addshape("sprites/personagens/pinto_flamer_.gif") pinto.shape("sprites/personagens/pinto_flamer_.gif") index = falar_do_roteiro(falas_dict[cena], index) tl.addshape("sprites/personagens/_cobra.gif") cobra.shape("sprites/personagens/_cobra.gif") cobra.hideturtle() cobra.goto(290, -123) cobra.showturtle() cobra.goto(150, -121) index = falar_do_roteiro(falas_dict[cena], index) cobra.goto(5, -121) tl.addshape("sprites/objetos/fogo.gif") fogo.shape("sprites/objetos/fogo.gif") fogo.goto(-50, -121) fogo.showturtle() index = falar_do_roteiro(falas_dict[cena], index, tempo=1.5) pause(1.5) tl.addshape("sprites/personagens/_cobra_burnt.gif") cobra.shape("sprites/personagens/_cobra_burnt.gif") fogo.hideturtle() index = falar_do_roteiro(falas_dict[cena], index, tempo = 1) index = falar_do_roteiro(falas_dict[cena], index, tempo=4.5) tl.addshape("sprites/personagens/pinto_.gif") pinto.shape("sprites/personagens/pinto_.gif") tl.addshape("sprites/objetos/lancachamas.gif") lanca_chamas.shape("sprites/objetos/lancachamas.gif") lanca_chamas.goto(-112, -131) lanca_chamas.showturtle() pinto.goto(-297, -112) pinto.hideturtle() pause(2) terminou = "sim" if terminou == "sim": return "Finalizou cena" else: return "Nao conseguiu finalizar a cena" def main() -> None: """ Funcao main que chama as funcoes de cada cena da animacao """ scene_num = int(input(main_menu)) # input para saber qual cena ver while scene_num != 6: if scene_num == 1: pinto_acha_cobra() elif scene_num == 2: pinto_foge_cobra() elif scene_num == 3: pinto_acha_arma() elif scene_num == 4: pinto_mata_cobra() elif scene_num == 5: # adicionado para verificar cenas da animacao sem pausa pinto_acha_cobra() pinto_foge_cobra() pinto_acha_arma() pinto_mata_cobra() else: print("Cena nao disponivel") scene_num = int(input(main_menu)) exit() # sair do programa caso escolha a opcao 6 if __name__ == "__main__": # spawna a tela com suas config tl.setup(600,600,None,None) tl.bgcolor("black") tl.title("A Lenda de Javi, O Grande pinto") # Variaveis usadas para definir fundos, personagens, objetos e falas bgpic = tl.Turtle() bgpic.up() pinto = tl.Turtle(visible=False) pinto.up() cobra = tl.Turtle(visible=False) cobra.up() fogo = tl.Turtle(visible=False) fogo.up() lanca_chamas = tl.Turtle(visible=False) lanca_chamas.up() fala = tl.Turtle(visible=False) fala.up() falas_dict = ler_falas("falas.txt") index = 0 main() #chamando funcao principal tl.mainloop()