@@ -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,20 @@ def colidir(self, outro_ator, intervalo=1):
5252 :param intervalo: Intervalo a ser considerado
5353 :return:
5454 """
55- pass
56-
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
5760
5861
5962class Obstaculo (Ator ):
60- pass
63+ _caracter_ativo = 'O'
6164
6265
6366class Porco (Ator ):
64- pass
67+ _caracter_ativo = '@'
68+ _caracter_destruido = '+'
6569
6670
6771class DuploLancamentoExcecao (Exception ):
@@ -93,15 +97,16 @@ def foi_lancado(self):
9397
9498 :return: booleano
9599 """
96- return True
100+ return not self . _tempo_de_lancamento is None
97101
98102 def colidir_com_chao (self ):
99103 """
100104 Método que executa lógica de colisão com o chão. Toda vez que y for menor ou igual a 0,
101105 o status dos Passaro deve ser alterado para destruido, bem como o seu caracter
102106
103107 """
104- pass
108+ if self .y <= 0 :
109+ self .status = DESTRUIDO
105110
106111 def calcular_posicao (self , tempo ):
107112 """
@@ -117,8 +122,13 @@ def calcular_posicao(self, tempo):
117122 :param tempo: tempo de jogo a ser calculada a posição
118123 :return: posição x, y
119124 """
120- return 1 , 1
121125
126+ if self .foi_lancado () and self .status == ATIVO :
127+ delta_t = tempo - self ._tempo_de_lancamento
128+ self ._calcular_posicao_vertical (delta_t )
129+ self ._calcular_posicao_horizontal (delta_t )
130+
131+ return super ().calcular_posicao (tempo )
122132
123133 def lancar (self , angulo , tempo_de_lancamento ):
124134 """
@@ -129,12 +139,31 @@ def lancar(self, angulo, tempo_de_lancamento):
129139 :param tempo_de_lancamento:
130140 :return:
131141 """
132- pass
142+ self ._angulo_de_lancamento = math .radians (angulo )
143+ self ._tempo_de_lancamento = tempo_de_lancamento
144+
145+ def _calcular_posicao_vertical (self , delta_t ):
146+ y_atual = self ._y_inicial
147+ angulo_radianos = self ._angulo_de_lancamento
148+ y_atual += self .velocidade_escalar * delta_t * math .sin (angulo_radianos )
149+ # gravidade
150+ y_atual -= (GRAVIDADE * delta_t ** 2 ) / 2
151+ self .y = y_atual
152+
153+ def _calcular_posicao_horizontal (self , delta_t ):
154+ x_atual = self ._x_inicial
155+ angulo_radianos = self ._angulo_de_lancamento
156+ x_atual += self .velocidade_escalar * delta_t * math .cos (angulo_radianos )
157+ self .x = x_atual
133158
134159
135160class PassaroAmarelo (Passaro ):
136- pass
161+ velocidade_escalar = 30
162+ _caracter_ativo = 'A'
163+ _caracter_destruido = 'a'
137164
138165
139166class PassaroVermelho (Passaro ):
140- pass
167+ velocidade_escalar = 20
168+ _caracter_ativo = 'V'
169+ _caracter_destruido = 'v'
0 commit comments