Skip to content

Commit c3d3669

Browse files
committed
Fim da implementação do Python Birds
1 parent 0869245 commit c3d3669

4 files changed

Lines changed: 89 additions & 62 deletions

File tree

Exercícios/teste_oo_carro.py

Lines changed: 14 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -1,47 +1,15 @@
1-
if __name__ == '__main__':
2-
motor = Motor()
3-
print(motor.velocidade)
4-
motor.acelerar()
5-
print(motor.velocidade)
6-
motor.acelerar()
7-
print(motor.velocidade)
8-
motor.acelerar()
9-
print(motor.velocidade)
10-
motor.frear
11-
print(motor.velocidade)
12-
motor.frear
13-
print(motor.velocidade)
14-
direcao = Direcao()
15-
print(direcao.valor)
1+
from unittest import TestCase
2+
from Exercícios.oo_carro import Motor, Direcao, Carro
3+
4+
5+
class CarroTestCase(TestCase):
6+
def teste_velocidade_inicial(self):
7+
motor = Motor()
8+
self.assertEqual(0, motor.velocidade)
9+
10+
def teste_acelerar(self):
11+
motor = Motor()
12+
motor.acelerar()
13+
self.assertEqual(1, motor.velocidade)
14+
1615

17-
direcao.girar_a_direita()
18-
print(direcao.valor)
19-
direcao.girar_a_direita()
20-
print(direcao.valor)
21-
direcao.girar_a_direita()
22-
print(direcao.valor)
23-
direcao.girar_a_direita()
24-
print(direcao.valor)
25-
direcao.girar_a_esquerda()
26-
print(direcao.valor)
27-
direcao.girar_a_esquerda()
28-
print(direcao.valor)
29-
direcao.girar_a_esquerda()
30-
print(direcao.valor)
31-
direcao.girar_a_esquerda()
32-
print(direcao.valor)
33-
carro = Carro(direcao, motor)
34-
carro.calcular_velocidade()
35-
carro.acelerar()
36-
print(carro.calcular_velocidade())
37-
carro.acelerar()
38-
print(carro.calcular_velocidade())
39-
carro.frear
40-
print(carro.calcular_velocidade())
41-
print(carro.calcular_direcao())
42-
carro.girar_a_direita()
43-
print(carro.calcular_direcao())
44-
carro.girar_a_esquerda()
45-
print(carro.calcular_direcao())
46-
carro.girar_a_esquerda()
47-
print(carro.calcular_direcao())

atores.py

Lines changed: 43 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ def calcular_posicao(self, tempo):
3838
:param tempo: o tempo do jogo
3939
:return: posição x, y do ator
4040
"""
41-
return 1, 1
41+
return self.x, self.y
4242

4343
def colidir(self, outro_ator, intervalo=1):
4444
"""
@@ -52,16 +52,21 @@ def colidir(self, outro_ator, intervalo=1):
5252
:param intervalo: Intervalo a ser considerado
5353
:return:
5454
"""
55-
pass
55+
if self.status == ATIVO and outro_ator.status == ATIVO:
56+
delta_x = abs(self.x - outro_ator.x)
57+
delta_y = abs(self.y - outro_ator.y)
58+
if delta_x <= intervalo and delta_y <= intervalo:
59+
self.status = outro_ator.status = DESTRUIDO
5660

5761

5862

5963
class Obstaculo(Ator):
60-
pass
64+
_caracter_ativo = 'O'
6165

6266

6367
class Porco(Ator):
64-
pass
68+
_caracter_ativo = '@'
69+
_caracter_destruido = '+'
6570

6671

6772
class DuploLancamentoExcecao(Exception):
@@ -93,15 +98,22 @@ def foi_lancado(self):
9398
9499
:return: booleano
95100
"""
96-
return True
101+
return not self._tempo_de_lancamento is None
102+
"""
103+
if not self._tempo_de_lancamento is None:
104+
return False
105+
else:
106+
return True
107+
"""
97108

98109
def colidir_com_chao(self):
99110
"""
100111
Método que executa lógica de colisão com o chão. Toda vez que y for menor ou igual a 0,
101112
o status dos Passaro deve ser alterado para destruido, bem como o seu caracter
102113
103114
"""
104-
pass
115+
if self.y <= 0:
116+
self.status = DESTRUIDO
105117

106118
def calcular_posicao(self, tempo):
107119
"""
@@ -117,8 +129,22 @@ def calcular_posicao(self, tempo):
117129
:param tempo: tempo de jogo a ser calculada a posição
118130
:return: posição x, y
119131
"""
120-
return 1, 1
132+
if self._esta_voando():
133+
delta_t = tempo - self._tempo_de_lancamento
134+
self._calcular_posicao_vertical(delta_t)
135+
self._calcular_posicao_horizontal(delta_t)
136+
return super().calcular_posicao(tempo)
121137

138+
def _calcular_posicao_vertical(self, delta_t):
139+
y_atual = self._y_inicial
140+
y_atual += self.velocidade_escalar * delta_t * math.sin(self._angulo_de_lancamento)
141+
y_atual -= (GRAVIDADE * (delta_t ** 2))/2
142+
self.y = y_atual
143+
144+
def _calcular_posicao_horizontal(self, delta_t):
145+
x_atual = self._x_inicial
146+
x_atual += + self.velocidade_escalar * math.cos(self._angulo_de_lancamento) * delta_t
147+
self.x = x_atual
122148

123149
def lancar(self, angulo, tempo_de_lancamento):
124150
"""
@@ -129,12 +155,19 @@ def lancar(self, angulo, tempo_de_lancamento):
129155
:param tempo_de_lancamento:
130156
:return:
131157
"""
132-
pass
158+
self._angulo_de_lancamento = math.radians(angulo)
159+
self._tempo_de_lancamento = tempo_de_lancamento
133160

161+
def _esta_voando(self):
162+
return self.foi_lancado() and self.status == ATIVO
134163

135164
class PassaroAmarelo(Passaro):
136-
pass
165+
_caracter_ativo = 'A'
166+
_caracter_destruido = 'a'
167+
velocidade_escalar = 30
137168

138169

139170
class PassaroVermelho(Passaro):
140-
pass
171+
_caracter_ativo = 'V'
172+
_caracter_destruido = 'v'
173+
velocidade_escalar = 20

fase.py

Lines changed: 31 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -43,23 +43,23 @@ def adicionar_obstaculo(self, *obstaculos):
4343
4444
:param obstaculos:
4545
"""
46-
pass
46+
self._obstaculos.extend(obstaculos)
4747

4848
def adicionar_porco(self, *porcos):
4949
"""
5050
Adiciona porcos em uma fase
5151
5252
:param porcos:
5353
"""
54-
pass
54+
self._porcos.extend(porcos)
5555

5656
def adicionar_passaro(self, *passaros):
5757
"""
5858
Adiciona pássaros em uma fase
5959
6060
:param passaros:
6161
"""
62-
pass
62+
self._passaros.extend(passaros)
6363

6464
def status(self):
6565
"""
@@ -73,7 +73,12 @@ def status(self):
7373
7474
:return:
7575
"""
76-
return EM_ANDAMENTO
76+
if not self._possui_porco_ativo():
77+
return VITORIA
78+
elif self._possui_passaro_ativo():
79+
return EM_ANDAMENTO
80+
else:
81+
return DERROTA
7782

7883
def lancar(self, angulo, tempo):
7984
"""
@@ -86,7 +91,10 @@ def lancar(self, angulo, tempo):
8691
:param angulo: ângulo de lançamento
8792
:param tempo: Tempo de lançamento
8893
"""
89-
pass
94+
for passaro in self._passaros:
95+
if not passaro.foi_lancado():
96+
passaro.lancar(angulo, tempo)
97+
break
9098

9199

92100
def calcular_pontos(self, tempo):
@@ -98,10 +106,28 @@ def calcular_pontos(self, tempo):
98106
:param tempo: tempo para o qual devem ser calculados os pontos
99107
:return: objeto do tipo Ponto
100108
"""
109+
for passaro in self._passaros:
110+
passaro.calcular_posicao(tempo)
111+
for alvo in self._obstaculos + self._porcos:
112+
passaro.colidir(alvo, self.intervalo_de_colisao)
113+
passaro.colidir_com_chao()
101114
pontos=[self._transformar_em_ponto(a) for a in self._passaros+self._obstaculos+self._porcos]
102115

103116
return pontos
104117

105118
def _transformar_em_ponto(self, ator):
106119
return Ponto(ator.x, ator.y, ator.caracter())
107120

121+
def _possui_porco_ativo(self):
122+
for porco in self._porcos:
123+
if porco.status == ATIVO:
124+
return True
125+
return False
126+
127+
def _possui_passaro_ativo(self):
128+
for passaros in self._passaros:
129+
if passaros.status == ATIVO:
130+
return True
131+
return False
132+
133+

oo/pessoa.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ def __init__(self, *filhos, nome=None, idade=None):
77
self.filhos = list(filhos)
88

99
def cumprimentar(self):
10-
return 'Olá'
10+
return f'Olá, meu nome é {self.nome}'
1111

1212
@staticmethod
1313
def metodo_estático():

0 commit comments

Comments
 (0)