diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 000000000..4355a0e3b --- /dev/null +++ b/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +encoding/fase.py=utf-8 diff --git a/atores.py b/atores.py index b4519a9db..2f87f0540 100644 --- a/atores.py +++ b/atores.py @@ -7,7 +7,6 @@ ATIVO = 'Ativo' GRAVIDADE = 10 # m/s^2 - class Ator(): """ Classe que representa um ator. Ele representa um ponto cartesiano na tela. @@ -37,7 +36,8 @@ def calcular_posicao(self, tempo): :param tempo: o tempo do jogo :return: posição x, y do ator """ - return 1, 1 + + return self.x, self.y def colidir(self, outro_ator, intervalo=1): """ @@ -51,16 +51,21 @@ def colidir(self, outro_ator, intervalo=1): :param intervalo: Intervalo a ser considerado :return: """ - pass - + if self.status == ATIVO and outro_ator.status == ATIVO: + if self.x - intervalo <= outro_ator.x <= self.x + intervalo and self.y - intervalo <= outro_ator.y <= self.y + intervalo: + self.status = DESTRUIDO + outro_ator.status = DESTRUIDO + self.caracter() + outro_ator.caracter() class Obstaculo(Ator): - pass + _caracter_ativo = 'O' class Porco(Ator): - pass + _caracter_ativo = '@' + _caracter_destruido = '+' class Passaro(Ator): @@ -85,10 +90,9 @@ def __init__(self, x=0, y=0): def foi_lancado(self): """ Método que retorna verdaeira se o pássaro já foi lançado e falso caso contrário - :return: booleano """ - return True + return self._tempo_de_lancamento is not None def colidir_com_chao(self): """ @@ -96,7 +100,9 @@ def colidir_com_chao(self): o status dos Passaro deve ser alterado para destruido, bem como o seu caracter """ - pass + if self.y <= 0: + self.status = DESTRUIDO + self.caracter() def calcular_posicao(self, tempo): """ @@ -112,8 +118,12 @@ def calcular_posicao(self, tempo): :param tempo: tempo de jogo a ser calculada a posição :return: posição x, y """ - return 1, 1 + if self.status == ATIVO and self.foi_lancado(): + delta_t = tempo - self._tempo_de_lancamento + self.x = self._x_inicial + self.velocidade_escalar * math.cos(self._angulo_de_lancamento) * delta_t + self.y =self._y_inicial + self.velocidade_escalar * math.sin(self._angulo_de_lancamento) * delta_t - (GRAVIDADE * delta_t ** 2)/2 + return self.x, self.y def lancar(self, angulo, tempo_de_lancamento): """ @@ -123,13 +133,21 @@ def lancar(self, angulo, tempo_de_lancamento): :param angulo: :param tempo_de_lancamento: :return: - """ - pass + """ + self._angulo_de_lancamento = math.radians(angulo) + self._tempo_de_lancamento = tempo_de_lancamento -class PassaroAmarelo(Passaro): - pass + + +class PassaroAmarelo(Passaro): + velocidade_escalar = 30 + _caracter_destruido = "a" + class PassaroVermelho(Passaro): - pass \ No newline at end of file + velocidade_escalar = 20 + _caracter_ativo = "V" + _caracter_destruido = "v" + diff --git a/fase.py b/fase.py index ea8f9af24..842762388 100644 --- a/fase.py +++ b/fase.py @@ -38,6 +38,8 @@ def __init__(self, intervalo_de_colisao=1): def adicionar_obstaculo(self, *obstaculos): + self ._obstaculos.extend(obstaculos) + """ Adiciona obstáculos em uma fase @@ -46,6 +48,7 @@ def adicionar_obstaculo(self, *obstaculos): pass def adicionar_porco(self, *porcos): + self ._porcos.extend(porcos) """ Adiciona porcos em uma fase @@ -54,6 +57,7 @@ def adicionar_porco(self, *porcos): pass def adicionar_passaro(self, *passaros): + self._passaros.extend(passaros) """ Adiciona pássaros em uma fase @@ -73,8 +77,16 @@ def status(self): :return: """ + porco, passaro = False, False + porco = [True for i in self._porcos if i.status == ATIVO] + passaro = [True for i in self._passaros if i.status == ATIVO] + if not porco: + return VITORIA + elif not passaro: + return DERROTA return EM_ANDAMENTO + def lancar(self, angulo, tempo): """ Método que executa lógica de lançamento. @@ -86,8 +98,11 @@ def lancar(self, angulo, tempo): :param angulo: ângulo de lançamento :param tempo: Tempo de lançamento """ - pass - + # [i.lancar(angulo,tempo) for i in self._passaros if i.status == ATIVO and not i.foi_lancado()] + for i in self._passaros: + if i.status == ATIVO and not i.foi_lancado(): + i.lancar(angulo, tempo) + break def calcular_pontos(self, tempo): """ @@ -98,10 +113,21 @@ def calcular_pontos(self, tempo): :param tempo: tempo para o qual devem ser calculados os pontos :return: objeto do tipo Ponto """ - pontos=[] - + boo = True + pontos = [] + # 1.0 Calcular a posição de cada passaro. + # 1.1 Mandar Calcular a posição passando o tempo. + for passaro in self._passaros: + passaro.calcular_posicao(tempo) + # 2.0 Verificar se colidiu com porcos ou obstaculo + for ator in self._porcos + self._obstaculos: + passaro.colidir(ator, self.intervalo_de_colisao) + passaro.colidir_com_chao() + # 3.0 Transformar tudo em pontos (atores, obstaculos e passaros) + # 3.1 Passar tudo para a lista e retorna-la + for ator in self._porcos + self._obstaculos + self._passaros: + pontos.append(self._transformar_em_ponto(ator)) return pontos - def _transformar_em_ponto(self, ator): - return Ponto(ator.x, ator.y, ator.caracter()) - + def _transformar_em_ponto(self, c): + return Ponto(c.x, c.y, c.caracter())