Skip to content

Commit dabb16b

Browse files
committed
[feat] Python birds finalizado.
1 parent 19e65d5 commit dabb16b

3 files changed

Lines changed: 47 additions & 8 deletions

File tree

atores.py

Lines changed: 40 additions & 7 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,22 @@ 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):
6064
_caracter_ativo = "O"
65+
_caracter_destruido = " "
6166

6267

6368
class Porco(Ator):
6469
_caracter_ativo = "@"
70+
_caracter_destruido = "+"
6571

6672

6773
class DuploLancamentoExcecao(Exception):
@@ -93,15 +99,17 @@ def foi_lancado(self):
9399
94100
:return: booleano
95101
"""
96-
return True
102+
return not self._tempo_de_lancamento is None
97103

98104
def colidir_com_chao(self):
99105
"""
100106
Método que executa lógica de colisão com o chão. Toda vez que y for menor ou igual a 0,
101107
o status dos Passaro deve ser alterado para destruido, bem como o seu caracter
102108
103109
"""
104-
pass
110+
if self.y <= 0:
111+
self.status = DESTRUIDO
112+
105113

106114
def calcular_posicao(self, tempo):
107115
"""
@@ -117,7 +125,11 @@ def calcular_posicao(self, tempo):
117125
:param tempo: tempo de jogo a ser calculada a posição
118126
:return: posição x, y
119127
"""
120-
return 1, 1
128+
if self.foi_lancado() and self.status == ATIVO:
129+
delta_t = tempo - self._tempo_de_lancamento
130+
self._calcular_posicao_vertical(delta_t)
131+
self._calcular_posicao_horizontal(delta_t)
132+
return super().calcular_posicao(tempo)
121133

122134

123135
def lancar(self, angulo, tempo_de_lancamento):
@@ -129,12 +141,33 @@ def lancar(self, angulo, tempo_de_lancamento):
129141
:param tempo_de_lancamento:
130142
:return:
131143
"""
132-
pass
144+
self._angulo_de_lancamento = math.radians(angulo)
145+
self._tempo_de_lancamento = tempo_de_lancamento
146+
147+
148+
def _calcular_posicao_vertical(self, delta_t):
149+
y_atual = self._y_inicial
150+
angulo_radianos = self._angulo_de_lancamento
151+
y_atual += self.velocidade_escalar*delta_t*math.sin(angulo_radianos)
152+
y_atual -= (GRAVIDADE*(delta_t**2))/2
153+
self.y = y_atual
154+
155+
156+
def _calcular_posicao_horizontal(self, delta_t):
157+
x_atual = self._x_inicial
158+
angulo_radianos = self._angulo_de_lancamento
159+
x_atual += self.velocidade_escalar*delta_t*math.cos(angulo_radianos)
160+
self.x = x_atual
161+
133162

134163

135164
class PassaroAmarelo(Passaro):
136165
_caracter_ativo = "A"
166+
_caracter_destruido = "a"
167+
velocidade_escalar = 30
137168

138169

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

fase.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,12 @@ def calcular_pontos(self, tempo):
106106
:param tempo: tempo para o qual devem ser calculados os pontos
107107
:return: objeto do tipo Ponto
108108
"""
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()
114+
109115
pontos=[self._transformar_em_ponto(a) for a in self._passaros+self._obstaculos+self._porcos]
110116

111117
return pontos

testes/testes_atores.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ def test_caracter(self):
113113
def assert_colisao_atores_ativos(self, ator, ator2, intervalo=1):
114114
"""
115115
Se certifica que há colisão entre atores ativos
116-
Atenção: Esse não é método de teste porque nao se inicia com prefixo "text".
116+
Atenção: Esse não é método de teste porque nao se inicia com prefixo "test".
117117
Ele serve apenas para encapsular toda lógica de teste de colisão entre dois atores ativos
118118
"""
119119
# Conferindo status dos dois atores antes da colisão

0 commit comments

Comments
 (0)