@@ -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
5963class Obstaculo (Ator ):
60- pass
64+ _caracter_ativo = 'O'
6165
6266
6367class Porco (Ator ):
64- pass
68+ _caracter_ativo = '@'
69+ _caracter_destruido = '+'
6570
6671
6772class 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
135164class PassaroAmarelo (Passaro ):
136- pass
165+ _caracter_ativo = 'A'
166+ _caracter_destruido = 'a'
167+ velocidade_escalar = 30
137168
138169
139170class PassaroVermelho (Passaro ):
140- pass
171+ _caracter_ativo = 'V'
172+ _caracter_destruido = 'v'
173+ velocidade_escalar = 20
0 commit comments