99
1010
1111class Ator ():
12+ """
13+ Classe que representa um ator. Ele representa um ponto cartesiano na tela.
14+ """
1215 _caracter_ativo = 'A'
1316 _caracter_destruido = ' '
1417
1518 def __init__ (self , x = 0 , y = 0 ):
19+ """
20+ Método de inicialização da classe. Deve inicializar os parâmetros x, y, caracter e status
21+
22+ :param x: Posição horizontal inicial do ator
23+ :param y: Posição vertical inicial do ator
24+ """
1625 self .y = y
1726 self .x = x
1827 self .caracter = self ._caracter_ativo
1928 self .status = ATIVO
2029
2130 def calcular_posicao (self , tempo ):
31+ """
32+ Método que calcula a posição do ator em determinado tempo.
33+ Deve-se imaginar que o tempo começa em 0 e avança de 0,01 segundos
34+
35+ :param tempo: o tempo do jogo
36+ :return: posição x, y do ator
37+ """
2238 return self .x , self .y
2339
2440 def colidir (self , outro_ator , intervalo = 1 ):
41+ """
42+ Método que executa lógica de colisão entre dois atores.
43+ Só deve haver colisão se os dois atores tiverem seus status ativos.
44+ Para colisão, é considerado um quadrado, com lado igual ao parâmetro intervalo, em volta do ponto onde se
45+ encontra o ator. Se os atores estiverem dentro desse mesmo quadrado, seus status devem ser alterados para
46+ destruido, seus caracteres para destruido também.
47+
48+ :param outro_ator: Ator a ser considerado na colisão
49+ :param intervalo: Intervalo a ser considerado
50+ :return:
51+ """
2552 if self .status == DESTRUIDO or outro_ator .status == DESTRUIDO :
2653 return
2754
@@ -45,19 +72,38 @@ class Passaro(Ator):
4572 velocidade_escalar = None
4673
4774 def __init__ (self , x = 0 , y = 0 ):
75+ """
76+ Método de inicialização de pássaro.
77+
78+ Deve chamar a inicialização de ator. Além disso, deve armazenar a posição inicial e incializar o tempo de
79+ lançamento e angulo de lançamento
80+
81+ :param x:
82+ :param y:
83+ """
4884 super ().__init__ (x , y )
4985 self ._x_inicial = x
5086 self ._y_inicial = y
5187 self ._tempo_de_lancamento = None
5288 self ._angulo_de_lancamento = None # radianos
5389
5490 def foi_lancado (self ):
91+ """
92+ Método que retorna verdaeira se o pássaro já foi lançado e falso caso contrário
93+
94+ :return: booleano
95+ """
5596 return self ._tempo_de_lancamento is not None
5697
5798 def colidir_com_chao (self ):
99+ """
100+ Método que executa lógica de colisão com o chão. Toda vez que y for menor ou igual a 0,
101+ o status dos Passaro deve ser alterado para destruido, bem como o seu caracter
102+
103+ """
58104 if self .y <= 0 :
59105 self .status = DESTRUIDO
60- self .caracter = self ._caracter_destruido
106+ self .caracter = self ._caracter_destruido
61107
62108 def _calcular_posicao_horizontal (self , delta_t ):
63109 self .x = self ._x_inicial + self .velocidade_escalar * delta_t * math .cos (self ._angulo_de_lancamento )
@@ -73,15 +119,36 @@ def _calcular_posicao(self, tempo):
73119 self ._calcular_posicao_horizontal (delta_t )
74120
75121 def calcular_posicao (self , tempo ):
122+ """
123+ Método que cálcula a posição do passaro de acordo com o tempo.
124+
125+ Antes do lançamento o pássaro deve retornar o valor de sua posição inicial
126+
127+ Depois do lançamento o pássaro deve calcular de acordo com sua posição inicial, velocidade escalar,
128+ ângulo de lancamento, gravidade (constante GRAVIDADE) e o tempo do jogo.
129+
130+ Após a colisão, ou seja, ter seus status destruido, o pássaro deve apenas retornar a última posição calculada.
131+
132+ :param tempo: tempo de jogo a ser calculada a posição
133+ :return: posição x, y
134+ """
76135 if self ._tempo_de_lancamento is None :
77136 return self ._x_inicial , self ._y_inicial
78137 if self .status == ATIVO :
79138 self ._calcular_posicao (tempo )
80139 return self .x , self .y
81140
82141
83- def lancar (self , angulo , tempo ):
84- self ._tempo_de_lancamento = tempo
142+ def lancar (self , angulo , tempo_de_lancamento ):
143+ """
144+ Lógica que lança o pássaro. Deve armazenar o ângulo e o tempo de lançamento para posteriores cálculo.
145+ O ângulo é passado em graus e deve ser transformado em radianos
146+
147+ :param angulo:
148+ :param tempo_de_lancamento:
149+ :return:
150+ """
151+ self ._tempo_de_lancamento = tempo_de_lancamento
85152 self ._angulo_de_lancamento = math .radians (angulo )
86153
87154 def _aguardando_lancamento (self , tempo ):
0 commit comments