@@ -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
5963class Obstaculo (Ator ):
6064 _caracter_ativo = "O"
65+ _caracter_destruido = " "
6166
6267
6368class Porco (Ator ):
6469 _caracter_ativo = "@"
70+ _caracter_destruido = "+"
6571
6672
6773class 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
135164class PassaroAmarelo (Passaro ):
136165 _caracter_ativo = "A"
166+ _caracter_destruido = "a"
167+ velocidade_escalar = 30
137168
138169
139170class PassaroVermelho (Passaro ):
140- _caracter_ativo = "V"
171+ _caracter_ativo = "V"
172+ _caracter_destruido = "v"
173+ velocidade_escalar = 20
0 commit comments