Skip to content

Commit 289fed9

Browse files
author
renzon
committed
Projeto Rodando Com exemplo na pasta de testes de fase
1 parent ee9dc48 commit 289fed9

File tree

6 files changed

+109
-18
lines changed

6 files changed

+109
-18
lines changed

atores.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
class Ator():
1111
_caracter_ativo = 'A'
12-
_caracter_destruido = ''
12+
_caracter_destruido = '+'
1313

1414
def caracter(self, tempo):
1515
if self.status(tempo) == ATIVO:
@@ -55,7 +55,7 @@ class Obstaculo(Ator):
5555

5656

5757
class Porco(Ator):
58-
_caracter_ativo = ''
58+
_caracter_ativo = '@'
5959

6060

6161
GRAVIDADE = 10 # m/s^2
@@ -113,7 +113,7 @@ class PassaroAmarelo(Passaro):
113113

114114
class PassaroVermelho(Passaro):
115115
_velocidade_scalar = 20 # m/s
116-
_caracter_ativo = '»'
116+
_caracter_ativo = 'D'
117117

118118

119119

fase.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
from itertools import chain
12
from atores import ATIVO
23

34

@@ -10,6 +11,9 @@ def __init__(self, x, y, caracter):
1011
def __eq__(self, other):
1112
return self.x == other.x and self.y == other.y and self.caracter == other.caracter
1213

14+
def __repr__(self, *args, **kwargs):
15+
return "Ponto(%s,%s,'%s')" % (self.x, self.y, self.caracter)
16+
1317

1418
class Fase():
1519
def __init__(self):
@@ -42,6 +46,25 @@ def lancar(self, angulo, tempo):
4246
passaro.lancar(angulo, tempo)
4347
return
4448

49+
def calcular_pontos(self, tempo):
50+
pontos = [self._calcular_ponto_de_passaro(p, tempo) for p in self._passaros]
51+
obstaculos_e_porcos = chain(self._obstaculos, self._porcos)
52+
pontos.extend([self._transformar_em_ponto(ator, tempo) for ator in obstaculos_e_porcos])
53+
return pontos
54+
55+
def _transformar_em_ponto(self, ator, tempo):
56+
return Ponto(ator.x, ator.y, ator.caracter(tempo))
57+
58+
def _calcular_ponto_de_passaro(self, passaro, tempo, ):
59+
passaro.calcular_posicao(tempo)
60+
for ator in chain(self._obstaculos, self._porcos):
61+
if ATIVO == passaro.status(tempo):
62+
passaro.colidir(ator, tempo)
63+
passaro.colidir_com_chao(tempo)
64+
else:
65+
break
66+
return self._transformar_em_ponto(passaro, tempo)
67+
4568
def _existe_porco_ativo(self, tempo):
4669
return self._verificar_se_existe_ator_ativo(self._porcos, tempo)
4770

placa_grafica.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ def desenhar_e_esperar(delta_t, fase, passo, tempo, msg):
1414
time.sleep(passo)
1515
apagar_tela()
1616
pontos_cartesianos = fase.calcular_pontos(tempo)
17-
print('%s Tempo: %s' % (msg, tempo))
17+
print('%s Tempo: %.2f' % (msg, tempo))
1818
print(desenhar(*pontos_cartesianos))
1919
tempo += delta_t
2020
return tempo
@@ -35,10 +35,14 @@ def rebobina(delta_t, fase, passo, tempo, msg):
3535
def animar(fase, passo=0.1, delta_t=0.1):
3636
tempo = 0
3737
tempo_final = _animar(delta_t, fase, passo, tempo, 'Play!')
38-
rebobina(delta_t, fase, passo / 50, tempo_final, 'Rebobinando 50 vezes mais rápido!')
39-
_animar(delta_t, fase, passo / 20, tempo, 'Replay 20 vezes mais rápido!')
38+
if input('Deseja ver o Replay? (s para sim): ').lower() == 's':
39+
velocidade_rebobina = 10
40+
rebobina(delta_t, fase, passo / velocidade_rebobina, tempo_final,
41+
'Rebobinando %s vezes mais rápido!' % velocidade_rebobina)
42+
velocidade_replay = 3
43+
_animar(delta_t, fase, passo / velocidade_replay, tempo, 'Replay %s vezes mais rápido!' % velocidade_replay)
4044
apagar_tela()
41-
print(fase.status())
45+
print(fase.status(tempo_final))
4246
print(FIM)
4347

4448

python_birds.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
# -*- coding: utf-8 -*-
2+
from atores import PassaroVermelho, PassaroAmarelo, Porco, Obstaculo
3+
from fase import Fase
4+
import placa_grafica
5+
6+
fase_exemplo = Fase()
7+
passaros = [PassaroVermelho(3, 3), PassaroAmarelo(3, 3), PassaroAmarelo(3, 3)]
8+
porcos = [Porco(78, 1), Porco(70, 1)]
9+
obstaculos = [Obstaculo(31, 10)]
10+
11+
fase_exemplo.adicionar_passaro(*passaros)
12+
fase_exemplo.adicionar_porco(*porcos)
13+
fase_exemplo.adicionar_obstaculo(*obstaculos)
14+
15+
fase_exemplo.lancar(45, 1)
16+
fase_exemplo.lancar(63, 3)
17+
fase_exemplo.lancar(23, 4)
18+
19+
if __name__ == '__main__':
20+
placa_grafica.animar(fase_exemplo)

testes/atores_testes.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ def teste_colisao_somente_um_ator_destruido(self):
8989

9090
def teste_status(self):
9191
ator = Ator()
92-
assert_ator_status(self, ator, 'A', '')
92+
assert_ator_status(self, ator, 'A', '+')
9393

9494

9595
class ObstaculoTestes(TestCase):
@@ -101,7 +101,7 @@ def teste_status(self):
101101
class PorcoTestes(TestCase):
102102
def teste_status(self):
103103
porco = Porco()
104-
assert_ator_status(self, porco, '', '')
104+
assert_ator_status(self, porco, '@', '+')
105105

106106

107107
class PassaroBaseTests(TestCase):
@@ -130,7 +130,7 @@ def teste_posicao_antes_do_lancamento(self):
130130

131131
def teste_status(self):
132132
passaro_amarelo = PassaroVermelho(1, 1)
133-
assert_ator_status(self, passaro_amarelo, '»', '')
133+
assert_ator_status(self, passaro_amarelo, 'D', '+')
134134

135135
def teste_colisao_com_chao(self):
136136
for i in range(30):
@@ -165,7 +165,7 @@ def teste_posicao_antes_do_lancamento(self):
165165

166166
def teste_status(self):
167167
passaro_amarelo = PassaroAmarelo(1, 1)
168-
assert_ator_status(self, passaro_amarelo, '>', '')
168+
assert_ator_status(self, passaro_amarelo, '>', '+')
169169

170170
def teste_colisao_com_chao(self):
171171
for i in range(30):

testes/fase_testes.py

Lines changed: 51 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,15 @@
1-
# -*- coding: utf-8 -*-
2-
3-
from __future__ import unicode_literals
1+
import os
42
from unittest.case import TestCase
53
import math
4+
import sys
5+
6+
project_dir = os.path.join(os.path.dirname(__file__), '..')
7+
project_dir = os.path.normpath(project_dir)
8+
sys.path.append(project_dir)
9+
610
from atores import Obstaculo, Porco, PassaroVermelho, PassaroAmarelo
7-
from fase import Fase
11+
from fase import Fase, Ponto
12+
import placa_grafica
813

914

1015
class FaseTestes(TestCase):
@@ -124,8 +129,47 @@ def teste_lancar_passaro_sem_erro_quando_nao_existe_passaro(self):
124129
self.assertEqual(3, passaro_amarelo._tempo_de_lancamento)
125130

126131

127-
# def teste_calcular_pontos(self):
128-
# fase=Fase()
129-
# self.assertListEqual([],fase.calcular)
132+
def teste_calcular_pontos(self):
133+
expected = [Ponto(3, 3, 'D'), Ponto(3, 3, '>'), Ponto(3, 3, '>'), Ponto(31, 10, 'O'), Ponto(78, 1, '@'),
134+
Ponto(70, 1, '@')]
135+
self.assertListEqual(expected, fase_exemplo.calcular_pontos(0))
136+
137+
expected = [Ponto(31, 11, '+'), Ponto(17, 25, '>'), Ponto(3, 3, '>'), Ponto(31, 10, ' '), Ponto(78, 1, '@'),
138+
Ponto(70, 1, '@')]
139+
self.assertListEqual(expected, fase_exemplo.calcular_pontos(4))
140+
141+
expected = [Ponto(31, 11, '+'), Ponto(57, 30, '>'), Ponto(69, 2, '+'), Ponto(31, 10, ' '), Ponto(78, 1, '@'),
142+
Ponto(70, 1, '+')]
143+
self.assertListEqual(expected, fase_exemplo.calcular_pontos(7))
144+
145+
expected = [Ponto(31, 11, '+'), Ponto(77, 2, '+'), Ponto(69, 2, '+'), Ponto(31, 10, ' '), Ponto(78, 1, '+'),
146+
Ponto(70, 1, '+')]
147+
self.assertListEqual(expected, fase_exemplo.calcular_pontos(8.5))
148+
149+
self.assertFalse(fase_exemplo.acabou(8.3))
150+
self.assertTrue(fase_exemplo.acabou(8.5))
151+
152+
153+
fase_exemplo = Fase()
154+
passaros = [PassaroVermelho(3, 3), PassaroAmarelo(3, 3), PassaroAmarelo(3, 3)]
155+
porcos = [Porco(78, 1), Porco(70, 1)]
156+
obstaculos = [Obstaculo(31, 10)]
157+
158+
fase_exemplo.adicionar_passaro(*passaros)
159+
fase_exemplo.adicionar_porco(*porcos)
160+
fase_exemplo.adicionar_obstaculo(*obstaculos)
161+
162+
fase_exemplo.lancar(45, 1)
163+
fase_exemplo.lancar(63, 3)
164+
fase_exemplo.lancar(23, 4)
165+
166+
for i in range(86):
167+
fase_exemplo.calcular_pontos(i / 10)
168+
169+
if __name__ == '__main__':
170+
placa_grafica.animar(fase_exemplo)
171+
172+
173+
130174

131175

0 commit comments

Comments
 (0)