diff --git a/aulas.zip b/aulas.zip new file mode 100644 index 000000000..ef6cdbb94 Binary files /dev/null and b/aulas.zip differ diff --git a/fase.py b/fase.py index b2bdf8c8f..de2d5cb37 100644 --- a/fase.py +++ b/fase.py @@ -13,7 +13,7 @@ def __eq__(self, other): return self.x == other.x and self.y == other.y and self.caracter == other.caracter def __repr__(self, *args, **kwargs): - return "Ponto(%s,%s,'%s')" % (self.x, self.y, self.caracter) + return "Ponto(%s, %s,'%s')" % (self.x, self.y, self.caracter) class Fase(): diff --git a/fases/brasil.py b/fases/brasil.py index cbae108bc..b56bb0116 100644 --- a/fases/brasil.py +++ b/fases/brasil.py @@ -11,7 +11,7 @@ from placa_grafica_tkinter import rodar_fase if __name__ == '__main__': - fase = Fase(intervalo_de_colisao=10) + fase = Fase(intervalo_de_colisao=32) deltax_gambi=80 diff --git a/fases/escudo_espartano.py b/fases/escudo_espartano.py index b5478e16c..9b01135f0 100644 --- a/fases/escudo_espartano.py +++ b/fases/escudo_espartano.py @@ -13,7 +13,7 @@ from random import randint if __name__ == '__main__': - fase = Fase(intervalo_de_colisao=10) + fase = Fase(intervalo_de_colisao=32) # Adicionar Pássaros Amarelos diff --git a/fases/rodar_fase_exemplo.py b/fases/rodar_fase_exemplo.py index 26cbc27f5..0f67e4cf1 100644 --- a/fases/rodar_fase_exemplo.py +++ b/fases/rodar_fase_exemplo.py @@ -11,7 +11,7 @@ from placa_grafica_tkinter import rodar_fase if __name__ == '__main__': - fase = Fase(intervalo_de_colisao=10) + fase = Fase(intervalo_de_colisao=32) # Adicionar Pássaros Vermelhos diff --git a/placa_grafica_tkinter.py b/placa_grafica_tkinter.py index 9b8e76f7d..fcc2ea11d 100644 --- a/placa_grafica_tkinter.py +++ b/placa_grafica_tkinter.py @@ -43,13 +43,15 @@ def plotar(camada_de_atores, ponto): camada_de_atores.create_image((x, y), image=image, anchor=NW) -def animar(tela, camada_de_atores, fase, passo=0.01, delta_t=0.01): +def animar(tela, camada_de_atores, fase, passo=0.01, delta_t=0.04): tempo = 0 passo = int(1000 * passo) angulo = 0 multiplicador_rebobinar = 20 def _animar(): + tempo_de_inicio_de_animacao=time.time() + nonlocal tempo nonlocal delta_t nonlocal angulo @@ -73,10 +75,12 @@ def _animar(): camada_de_atores.create_line(52, 493, 52 + tamanho_seta * math.cos(angulo_rad), 493 + tamanho_seta * math.sin(angulo_rad), width=1.5) - camada_de_atores.create_text(35, 493, text=u"%d°" % angulo) + camada_de_atores.create_text(35, 493, text="%d" % angulo) for ponto in fase.calcular_pontos(tempo): plotar(camada_de_atores, ponto) - tela.after(passo, _animar) + tempo_gasto_com_animacao= round((time.time() - tempo_de_inicio_de_animacao)*1000) # Trans + tempo_proxima_animacao = passo - tempo_gasto_com_animacao if passo>tempo_gasto_com_animacao else 1 + tela.after(tempo_proxima_animacao, _animar) def _ouvir_comandos_lancamento(evento): nonlocal angulo @@ -132,7 +136,7 @@ def rodar_fase(fase): if __name__ == '__main__': - fase = Fase(intervalo_de_colisao=10) + fase = Fase(intervalo_de_colisao=32) passaros = [PassaroVermelho(30, 30), PassaroAmarelo(30, 30), PassaroAmarelo(30, 30)] porcos = [Porco(750, 1), Porco(700, 1)] obstaculos = [Obstaculo(310, 100)] diff --git a/placa_texto.py b/placa_texto.py new file mode 100644 index 000000000..94356a806 --- /dev/null +++ b/placa_texto.py @@ -0,0 +1,141 @@ +# -*- coding: utf-8 -*- +import os +import platform +import time +import sys +from templates import FIM + +try: + import msvcrt +except: + pass +import select + + +eh_windows = platform.system() == 'Windows' +apagar_tela = lambda: os.system('cls') if eh_windows else lambda: os.system('clear') + +# workaround retirado de http://stackoverflow.com/questions/292095/polling-the-keyboard-in-python + + +def ouvir_teclado_fn(): + i, o, e = select.select([sys.stdin], [], [], 0.0001) + for s in i: + if s == sys.stdin: + return True + return False + + +if eh_windows: + ouvir_teclado = msvcrt.kbhit +else: + ouvir_teclado = ouvir_teclado_fn + +LARGURA = 80 +ALTURA = 20 + + +def desenhar_e_esperar(delta_t, fase, passo, tempo, msg): + time.sleep(passo) + pontos_cartesianos = fase.calcular_pontos(tempo) + print() + print('############### %s Tempo: %.2f #################' % (msg, tempo)) + print(desenhar(*pontos_cartesianos)) + tempo += delta_t + return tempo + + +def _animar(delta_t, fase, passo, tempo, msg): + while not fase.acabou(tempo): + tempo = desenhar_e_esperar(delta_t, fase, passo, tempo, msg) + return tempo + + +def _jogar(delta_t, fase, passo, tempo, msg): + while not fase.acabou(tempo): + tempo = desenhar_e_esperar(delta_t, fase, passo, tempo, msg) + entrada = ouvir_teclado() + if entrada: + while True: + try: + if not eh_windows: + input() + angulo = float(input('Digite o Ângulo de Lançamento: ')) + fase.lancar(angulo, tempo) + break + except: + print('Erro: valor tem que ser númerico!') + return tempo + + +def rebobina(delta_t, fase, passo, tempo, msg): + while tempo > 0: + tempo = desenhar_e_esperar(-delta_t, fase, passo, tempo, msg) + return tempo + + +def animar(fase, passo=0.1, delta_t=0.1): + tempo = 0 + tempo_final = _jogar(delta_t, fase, passo, tempo, 'Play!') + if input('Deseja ver o Replay? (s para sim): ').lower() == 's': + velocidade_rebobina = 10 + rebobina(delta_t, fase, passo / velocidade_rebobina, tempo_final, + 'Rebobinando %s vezes mais rápido!' % velocidade_rebobina) + velocidade_replay = 1 + _animar(delta_t, fase, passo / velocidade_replay, tempo, 'Replay %s vezes mais rápido!' % velocidade_replay) + apagar_tela() + print(fase.status(tempo_final)) + print(FIM) + + +def normalizar_coordenadas(x, y): + return x, ALTURA - y - 1 + + +def esta_dentro_da_tela(x, y): + return 0 < x < (LARGURA - 1) and 0 < y < (ALTURA - 1) + + +def escolher_caracter_limitrofe(x, y): + if x == 0 or x == LARGURA - 1: + return '|' + if y == 0: + return '-' + return 'T' + + +def escolher_caracter(x, y, *pontos_cartesianos): + for ponto in pontos_cartesianos: + x_normalizdo, y_normalizado = normalizar_coordenadas(ponto.x, ponto.y) + if x == x_normalizdo and y == y_normalizado: + return ponto.caracter + return ' ' + + +def desenhar(*pontos_cartesianos): + return [p for p in pontos_cartesianos] + + +def main(): + from atores import PassaroVermelho, PassaroAmarelo, Porco, Obstaculo + from fase import Fase + + fase_exemplo = Fase() + passaros = [PassaroVermelho(3, 3), PassaroAmarelo(3, 3), PassaroAmarelo(3, 3)] + porcos = [Porco(78, 1), Porco(70, 1)] + obstaculos = [Obstaculo(31, 10)] + + fase_exemplo.adicionar_passaro(*passaros) + fase_exemplo.adicionar_porco(*porcos) + fase_exemplo.adicionar_obstaculo(*obstaculos) + + # Solução para ganhar + # fase_exemplo.lancar(45, 1) + # fase_exemplo.lancar(63, 3) + # fase_exemplo.lancar(23, 4) + + animar(fase_exemplo) + + +if __name__ == '__main__': + main()