From 422aee9f94f74e45d09ae21161f12417d9b2ebdb Mon Sep 17 00:00:00 2001 From: Matheus Date: Sat, 29 May 2021 16:08:17 -0300 Subject: [PATCH 01/11] Criada a classe pessoa --- oo/__init__.py | 0 oo/pessoa.py | 2 ++ 2 files changed, 2 insertions(+) create mode 100644 oo/__init__.py create mode 100644 oo/pessoa.py diff --git a/oo/__init__.py b/oo/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/oo/pessoa.py b/oo/pessoa.py new file mode 100644 index 000000000..eb7c0a9c1 --- /dev/null +++ b/oo/pessoa.py @@ -0,0 +1,2 @@ +class Pessoa: + pass From a4ad4d8a86bc53e8294efd59a46083bd78860149 Mon Sep 17 00:00:00 2001 From: Matheus Date: Sat, 5 Jun 2021 18:56:08 -0300 Subject: [PATCH 02/11] =?UTF-8?q?criado=20atributo=20de=20inst=C3=A2ncia?= =?UTF-8?q?=20nome=20e=20idade?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- oo/pessoa.py | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/oo/pessoa.py b/oo/pessoa.py index eb7c0a9c1..a3930c097 100644 --- a/oo/pessoa.py +++ b/oo/pessoa.py @@ -1,2 +1,19 @@ class Pessoa: - pass + + def __init__(self, nome=None, idade=35): + self.nome = nome + self.idade = idade + + def cumprimentar(self): + return f'Olá {id(self)}' + + +if __name__ == '__main__': + p = Pessoa('Luciano') + print(Pessoa.cumprimentar(p)) + print(id(p)) + print(p.cumprimentar()) + print(p.nome) + p.nome = 'Renzo' + print(p.nome) + print(p.idade) From 12f9e13b9aac4575607ff956dc4af207b61c1849 Mon Sep 17 00:00:00 2001 From: Matheus Date: Sun, 6 Jun 2021 14:54:42 -0300 Subject: [PATCH 03/11] =?UTF-8?q?Criado=20atributo=20din=C3=A2mico=20filho?= =?UTF-8?q?s?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- oo/pessoa.py | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/oo/pessoa.py b/oo/pessoa.py index a3930c097..04af4bf4a 100644 --- a/oo/pessoa.py +++ b/oo/pessoa.py @@ -1,19 +1,22 @@ class Pessoa: - def __init__(self, nome=None, idade=35): + def __init__(self, *filhos, nome=None, idade=35): self.nome = nome self.idade = idade + self.filhos = list(filhos) def cumprimentar(self): return f'Olá {id(self)}' if __name__ == '__main__': - p = Pessoa('Luciano') - print(Pessoa.cumprimentar(p)) - print(id(p)) - print(p.cumprimentar()) - print(p.nome) - p.nome = 'Renzo' - print(p.nome) - print(p.idade) + renzo = Pessoa(nome='Renzo') + luciano = Pessoa(renzo, nome='Luciano') + print(Pessoa.cumprimentar(luciano)) + print(id(luciano)) + print(luciano.cumprimentar()) + print(luciano.nome) + print(luciano.idade) + print(luciano.filhos) + for filho in luciano.filhos: + print(filho.nome) From 117f5d8e595359657030cfc08caef571acbe8d16 Mon Sep 17 00:00:00 2001 From: Matheus Date: Sun, 6 Jun 2021 16:32:57 -0300 Subject: [PATCH 04/11] =?UTF-8?q?Criado=20=20e=20removido=20atributo=20din?= =?UTF-8?q?=C3=A2mico=20de=20objeto=20do=20tipo=20pessoa?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- oo/pessoa.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/oo/pessoa.py b/oo/pessoa.py index 04af4bf4a..9983b6389 100644 --- a/oo/pessoa.py +++ b/oo/pessoa.py @@ -20,3 +20,8 @@ def cumprimentar(self): print(luciano.filhos) for filho in luciano.filhos: print(filho.nome) + luciano.sobrenome = 'Ramalho' + del luciano.filhos + print(luciano.__dict__) + print(renzo.__dict__) + From 23ac29c0abcfb0f910cd51cd26e7d942909e4f48 Mon Sep 17 00:00:00 2001 From: Matheus Date: Sun, 6 Jun 2021 16:42:02 -0300 Subject: [PATCH 05/11] Criado atributo de classe, olhos. --- oo/pessoa.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/oo/pessoa.py b/oo/pessoa.py index 9983b6389..4f699478b 100644 --- a/oo/pessoa.py +++ b/oo/pessoa.py @@ -1,5 +1,7 @@ class Pessoa: + olhos = 2 + def __init__(self, *filhos, nome=None, idade=35): self.nome = nome self.idade = idade @@ -22,6 +24,14 @@ def cumprimentar(self): print(filho.nome) luciano.sobrenome = 'Ramalho' del luciano.filhos + luciano.olhos = 1 + del luciano.olhos print(luciano.__dict__) print(renzo.__dict__) + Pessoa.olhos = 3 + print(Pessoa.olhos) + print(luciano.olhos) + print(renzo.olhos) + print(id(Pessoa.olhos), id(luciano.olhos), id(renzo.olhos)) + From 22692f146fe733dfc15f49bc5b1d84c0b7b3e77c Mon Sep 17 00:00:00 2001 From: Matheus Date: Sun, 6 Jun 2021 18:38:24 -0300 Subject: [PATCH 06/11] =?UTF-8?q?Criado=20m=C3=A9todo=20est=C3=A1tico=20e?= =?UTF-8?q?=20de=20classe=20para=20a=20classe=20Pessoa.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- oo/pessoa.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/oo/pessoa.py b/oo/pessoa.py index 4f699478b..5fb7923fd 100644 --- a/oo/pessoa.py +++ b/oo/pessoa.py @@ -10,6 +10,12 @@ def __init__(self, *filhos, nome=None, idade=35): def cumprimentar(self): return f'Olá {id(self)}' + @staticmethod + def metodo_estatico(): + return 42 + @classmethod + def nome_e_atributos_de_classe(cls): + return f'{cls} - olhos {cls.olhos}' if __name__ == '__main__': renzo = Pessoa(nome='Renzo') @@ -33,5 +39,9 @@ def cumprimentar(self): print(luciano.olhos) print(renzo.olhos) print(id(Pessoa.olhos), id(luciano.olhos), id(renzo.olhos)) + print(Pessoa.metodo_estatico(), luciano.metodo_estatico()) + print(Pessoa.nome_e_atributos_de_classe(), luciano.nome_e_atributos_de_classe()) + + From 296975f53bfbdf07b9b3b21e419d8f57ad48c81c Mon Sep 17 00:00:00 2001 From: Matheus Date: Sun, 6 Jun 2021 21:56:44 -0300 Subject: [PATCH 07/11] =?UTF-8?q?Criado=20o=20M=C3=B3dulo=20Carro,=20para?= =?UTF-8?q?=20desenvolver=20os=20conceitos=20de=20composi=C3=A7=C3=A3o=20e?= =?UTF-8?q?m=20python.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- oo/carro.py | 146 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 146 insertions(+) create mode 100644 oo/carro.py diff --git a/oo/carro.py b/oo/carro.py new file mode 100644 index 000000000..b80bd2725 --- /dev/null +++ b/oo/carro.py @@ -0,0 +1,146 @@ +""" +Você deve criar uma classe carro que vai possuir +dois atributos compostos por outras duas classes: + + 1. Motor + 2. Direção +O Motor terá a responsabilidade de controlar a velocidade. +Ele oferece os seguintes atributos: + + 1. Atributo de dado velocidade + 2. Método acelerar, que deverá incremetar a velocidade de uma unidade + 3. Método frear que deverá decrementar a velocidade em duas unidades + +A Direção terá a responsabilidade de controlar a direção. Ela oferece +os seguintes atributos: + +1. Valor de diração com valores possíveis: Norte, Sul, Leste, Oeste. +2. Método girar_a_direita +3. Método girar_a_esquerda + + N + O L + S + +Exemplo: + >>> # Testando motor + >>> motor = Motor() + >>> motor.velocidade + 0 + >>> motor.acelerar() + >>> motor.velocidade + 1 + >>> motor.acelerar() + >>> motor.velocidade + 2 + >>> motor.acelerar() + >>> motor.velocidade + 3 + >>> motor.frear() + >>> motor.velocidade + 1 + >>> motor.frear() + >>> motor.velocidade + 0 + >>> # Testando Direcao + >>> direcao = Direcao() + >>> direcao.valor + 'Norte' + >>> direcao.girar_a_direita() + >>> direcao.valor + 'Leste' + >>> direcao.girar_a_direita() + >>> direcao.valor + 'Sul' + >>> direcao.girar_a_direita() + >>> direcao.valor + 'Oeste' + >>> direcao.girar_a_direita() + >>> direcao.valor + 'Norte' + >>> direcao.girar_a_esquerda() + >>> direcao.valor + 'Oeste' + >>> direcao.girar_a_esquerda() + >>> direcao.valor + 'Sul' + >>> direcao.girar_a_esquerda() + >>> direcao.valor + 'Leste' + >>> direcao.girar_a_esquerda() + >>> direcao.valor + 'Norte' + >>> carro = Carro(direcao, motor) + >>> carro.calcular_velocidade() + 0 + >>> carro.acelerar() + >>> carro.calcular_velocidade() + 1 + >>> carro.acelerar() + >>> carro.calcular_velocidade() + 2 + >>> carro.frear() + >>> carro.calcular_velocidade() + 0 + >>> carro.calcular_direcao() + 'Norte' + >>> carro.girar_a_direita() + >>> carro.calcular_direcao() + 'Leste' + >>> carro.girar_a_esquerda() + >>> carro.calcular_direcao() + 'Norte' + >>> carro.girar_a_esquerda() + >>> carro.calcular_direcao() + 'Oeste' + +""" + + +class Motor: + + def __init__(self, velocidade=0): + self.velocidade = velocidade + + def acelerar(self): + self.velocidade += 1 + + def frear(self): + self.velocidade -= 2 + self.velocidade = max(0,self.velocidade) + +class Direcao: + DIRECAO = ['Norte', 'Leste', 'Sul', 'Oeste'] + + def __init__(self): + self.valor = self.DIRECAO[0] + self.__direcao = 0 + + def girar_a_direita(self): + self.__direcao = (self.__direcao + 1) % len(self.DIRECAO) + self.valor = self.DIRECAO[self.__direcao] + + def girar_a_esquerda(self): + self.__direcao = (self.__direcao - 1) % len(self.DIRECAO) + self.valor = self.DIRECAO[self.__direcao] + + +class Carro: + + def __init__(self, direcao, motor): + self.motor = Motor() + self.direcao = Direcao() + + def calcular_velocidade(self): + return self.motor.velocidade + + def acelerar(self): + self.motor.acelerar() + def frear(self): + self.motor.frear() + def girar_a_direita(self): + self.direcao.girar_a_direita() + def girar_a_esquerda(self): + self.direcao.girar_a_esquerda() + def calcular_direcao(self): + return self.direcao.valor From 3ca127fff1384d8bd4f080eea0c39eb65a21f24c Mon Sep 17 00:00:00 2001 From: Matheus Date: Mon, 7 Jun 2021 21:31:12 -0300 Subject: [PATCH 08/11] =?UTF-8?q?Implementado=20m=C3=B3dulo=20de=20testes?= =?UTF-8?q?=20para=20a=20Classe=20Carro?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- fase.py | 6 +++--- oo/carro.py | 1 + oo/pessoa.py | 9 ++++++++- oo/teste_carro.py | 14 ++++++++++++++ testes/{atores_testes.py => testes_atores.py} | 0 testes/{fase_testes.py => testes_fase.py} | 0 6 files changed, 26 insertions(+), 4 deletions(-) create mode 100644 oo/teste_carro.py rename testes/{atores_testes.py => testes_atores.py} (100%) rename testes/{fase_testes.py => testes_fase.py} (100%) diff --git a/fase.py b/fase.py index 3385175c6..1c8fd161f 100644 --- a/fase.py +++ b/fase.py @@ -43,7 +43,7 @@ def adicionar_obstaculo(self, *obstaculos): :param obstaculos: """ - pass + self._obstaculos.extend(obstaculos) def adicionar_porco(self, *porcos): """ @@ -51,7 +51,7 @@ def adicionar_porco(self, *porcos): :param porcos: """ - pass + self._porcos.extend(porcos) def adicionar_passaro(self, *passaros): """ @@ -59,7 +59,7 @@ def adicionar_passaro(self, *passaros): :param passaros: """ - pass + self._passaros.extend(passaros) def status(self): """ diff --git a/oo/carro.py b/oo/carro.py index b80bd2725..e48576995 100644 --- a/oo/carro.py +++ b/oo/carro.py @@ -144,3 +144,4 @@ def girar_a_esquerda(self): self.direcao.girar_a_esquerda() def calcular_direcao(self): return self.direcao.valor + diff --git a/oo/pessoa.py b/oo/pessoa.py index 5fb7923fd..fabbea7de 100644 --- a/oo/pessoa.py +++ b/oo/pessoa.py @@ -17,8 +17,11 @@ def metodo_estatico(): def nome_e_atributos_de_classe(cls): return f'{cls} - olhos {cls.olhos}' +class Homem(Pessoa): + pass + if __name__ == '__main__': - renzo = Pessoa(nome='Renzo') + renzo = Homem(nome='Renzo') luciano = Pessoa(renzo, nome='Luciano') print(Pessoa.cumprimentar(luciano)) print(id(luciano)) @@ -41,6 +44,10 @@ def nome_e_atributos_de_classe(cls): print(id(Pessoa.olhos), id(luciano.olhos), id(renzo.olhos)) print(Pessoa.metodo_estatico(), luciano.metodo_estatico()) print(Pessoa.nome_e_atributos_de_classe(), luciano.nome_e_atributos_de_classe()) + pessoa = Pessoa('Anonimo') + print(isinstance(pessoa, Pessoa)) + print(isinstance(pessoa, Homem)) + print(isinstance(renzo, Homem)) diff --git a/oo/teste_carro.py b/oo/teste_carro.py new file mode 100644 index 000000000..0c507cbfb --- /dev/null +++ b/oo/teste_carro.py @@ -0,0 +1,14 @@ +from unittest import TestCase + +from oo.carro import Motor + + +class CarroTestCase(TestCase): + def teste_velocidade_inicial(self): + motor = Motor() + self.assertEqual(0, motor.velocidade) + + def teste_acelerar(self): + motor = Motor() + motor.acelerar() + self.assertEqual(1, motor.velocidade) \ No newline at end of file diff --git a/testes/atores_testes.py b/testes/testes_atores.py similarity index 100% rename from testes/atores_testes.py rename to testes/testes_atores.py diff --git a/testes/fase_testes.py b/testes/testes_fase.py similarity index 100% rename from testes/fase_testes.py rename to testes/testes_fase.py From 4fb75d5a55438821ab08b3f15ccbc51c4a5a4429 Mon Sep 17 00:00:00 2001 From: Matheus Date: Mon, 7 Jun 2021 22:39:23 -0300 Subject: [PATCH 09/11] =?UTF-8?q?Adicionada=20sobrescrita=20a=20m=C3=A9tod?= =?UTF-8?q?os?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- atores.py | 4 ++-- oo/pessoa.py | 25 +++++++++++++++---------- 2 files changed, 17 insertions(+), 12 deletions(-) diff --git a/atores.py b/atores.py index cfc2ef5ea..69446fb59 100644 --- a/atores.py +++ b/atores.py @@ -57,11 +57,11 @@ def colidir(self, outro_ator, intervalo=1): class Obstaculo(Ator): - pass + _caracter_ativo = 'O' class Porco(Ator): - pass + _caracter_ativo = '@' class DuploLancamentoExcecao(Exception): diff --git a/oo/pessoa.py b/oo/pessoa.py index fabbea7de..79ceb44bc 100644 --- a/oo/pessoa.py +++ b/oo/pessoa.py @@ -1,5 +1,4 @@ class Pessoa: - olhos = 2 def __init__(self, *filhos, nome=None, idade=35): @@ -8,21 +7,29 @@ def __init__(self, *filhos, nome=None, idade=35): self.filhos = list(filhos) def cumprimentar(self): - return f'Olá {id(self)}' + return f'Olá, meu nome é {self.nome}' @staticmethod def metodo_estatico(): return 42 + @classmethod def nome_e_atributos_de_classe(cls): return f'{cls} - olhos {cls.olhos}' + class Homem(Pessoa): - pass + def cumprimentar(self): + cumprimentar_da_classe_pai = super().cumprimentar() + return f'{cumprimentar_da_classe_pai}. Aperto de mão' + +class Mutante(Pessoa): + olhos = 3 + if __name__ == '__main__': - renzo = Homem(nome='Renzo') - luciano = Pessoa(renzo, nome='Luciano') + renzo = Mutante(nome='Renzo') + luciano = Homem(renzo, nome='Luciano') print(Pessoa.cumprimentar(luciano)) print(id(luciano)) print(luciano.cumprimentar()) @@ -37,7 +44,7 @@ class Homem(Pessoa): del luciano.olhos print(luciano.__dict__) print(renzo.__dict__) - Pessoa.olhos = 3 + print(Pessoa.olhos) print(luciano.olhos) print(renzo.olhos) @@ -48,7 +55,5 @@ class Homem(Pessoa): print(isinstance(pessoa, Pessoa)) print(isinstance(pessoa, Homem)) print(isinstance(renzo, Homem)) - - - - + print(luciano.cumprimentar()) + print(renzo.cumprimentar()) From 34f2d92749ab97854827c3d2ab2b42766232d4db Mon Sep 17 00:00:00 2001 From: Matheus Date: Sun, 20 Jun 2021 20:32:19 -0300 Subject: [PATCH 10/11] =?UTF-8?q?Adicionada=20sobrescrita=20a=20m=C3=A9tod?= =?UTF-8?q?os?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- atores.py | 25 ++++++++++----- fase.py | 31 +++++++++++++++++-- testes/testes_atores.py | 2 +- .../{integracao.py => testes_integracao.py} | 0 4 files changed, 48 insertions(+), 10 deletions(-) rename testes/{integracao.py => testes_integracao.py} (100%) diff --git a/atores.py b/atores.py index 69446fb59..65d6cc381 100644 --- a/atores.py +++ b/atores.py @@ -9,7 +9,7 @@ GRAVIDADE = 10 # m/s^2 -class Ator(): +class Ator: """ Classe que representa um ator. Ele representa um ponto cartesiano na tela. """ @@ -38,7 +38,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): """ @@ -52,7 +53,13 @@ def colidir(self, outro_ator, intervalo=1): :param intervalo: Intervalo a ser considerado :return: """ - pass + if self.status == ATIVO and outro_ator.status == ATIVO: + delta_x = abs(self.x - outro_ator.x) + delta_y = abs(self.y - outro_ator.y) + if delta_x <= intervalo and delta_y <= intervalo: + self.status = outro_ator.status = DESTRUIDO + + @@ -62,7 +69,7 @@ class Obstaculo(Ator): class Porco(Ator): _caracter_ativo = '@' - + _caracter_destruido = '+' class DuploLancamentoExcecao(Exception): pass @@ -93,7 +100,8 @@ def foi_lancado(self): :return: booleano """ - return True + return not self._tempo_de_lancamento is None + def colidir_com_chao(self): """ @@ -129,7 +137,8 @@ def lancar(self, angulo, tempo_de_lancamento): :param tempo_de_lancamento: :return: """ - pass + self._angulo_de_lancamento = angulo + self._tempo_de_lancamento = tempo_de_lancamento class PassaroAmarelo(Passaro): @@ -137,4 +146,6 @@ class PassaroAmarelo(Passaro): class PassaroVermelho(Passaro): - pass \ No newline at end of file + _caracter_ativo = 'V' + _caracter_destruido = 'v' + velocidade_escalar = 20 \ No newline at end of file diff --git a/fase.py b/fase.py index 1c8fd161f..c5d0ab81f 100644 --- a/fase.py +++ b/fase.py @@ -73,7 +73,13 @@ def status(self): :return: """ - return EM_ANDAMENTO + + if not self._possui_porco_ativo(): + return VITORIA + elif self._possui_passaros_ativos(): + return EM_ANDAMENTO + else: + return DERROTA def lancar(self, angulo, tempo): """ @@ -86,7 +92,10 @@ def lancar(self, angulo, tempo): :param angulo: ângulo de lançamento :param tempo: Tempo de lançamento """ - pass + for passaro in self._passaros: + if not passaro.foi_lancado(): + passaro.lancar(angulo, tempo) + break def calcular_pontos(self, tempo): @@ -98,6 +107,11 @@ def calcular_pontos(self, tempo): :param tempo: tempo para o qual devem ser calculados os pontos :return: objeto do tipo Ponto """ + for passaro in self._passaros: + passaro.calcular_posicao(tempo) + for alvo in self._obstaculos + self._porcos: + passaro.colidir(alvo, self.intervalo_de_colisao) + passaro.colidir_com_chao() pontos=[self._transformar_em_ponto(a) for a in self._passaros+self._obstaculos+self._porcos] return pontos @@ -105,3 +119,16 @@ def calcular_pontos(self, tempo): def _transformar_em_ponto(self, ator): return Ponto(ator.x, ator.y, ator.caracter()) + def _possui_porco_ativo(self): + for porco in self._porcos: + if porco.status == ATIVO: + return True + return False + + def _possui_passaros_ativos(self): + for passaro in self._passaros: + if passaro.status == ATIVO: + return True + return False + + diff --git a/testes/testes_atores.py b/testes/testes_atores.py index f4254f29e..7adbccb42 100644 --- a/testes/testes_atores.py +++ b/testes/testes_atores.py @@ -38,7 +38,7 @@ def teste_ator_posicao(self): self.assertEqual(0, y) ator = Ator(0.3, 0.5) - x, y = ator.calcular_posicao(10) + x, y = ator.calcular_posicao(10) #ator generico não se move na tela self.assertEqual(0.3, x) self.assertEqual(0.5, y) diff --git a/testes/integracao.py b/testes/testes_integracao.py similarity index 100% rename from testes/integracao.py rename to testes/testes_integracao.py From 0b5293e4da6da3c0759399c86d1d828df0444810 Mon Sep 17 00:00:00 2001 From: Matheus Date: Wed, 30 Jun 2021 21:35:55 -0300 Subject: [PATCH 11/11] =?UTF-8?q?Implementa=C3=A7=C3=A3o=20Final=20do=20py?= =?UTF-8?q?thon=20Birds?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- atores.py | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/atores.py b/atores.py index 65d6cc381..e33ec964c 100644 --- a/atores.py +++ b/atores.py @@ -109,7 +109,8 @@ 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 def calcular_posicao(self, tempo): """ @@ -125,7 +126,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.foi_lancado() and self.status == ATIVO: + delta_t= tempo-self._tempo_de_lancamento + self._calcular_posicao_vertical(delta_t) + self._calcular_posicao_horizontal(delta_t) + + return super().calcular_posicao(tempo) def lancar(self, angulo, tempo_de_lancamento): @@ -137,12 +143,26 @@ def lancar(self, angulo, tempo_de_lancamento): :param tempo_de_lancamento: :return: """ - self._angulo_de_lancamento = angulo + self._angulo_de_lancamento = math.radians(angulo) self._tempo_de_lancamento = tempo_de_lancamento + def _calcular_posicao_vertical(self, delta_t): + y_atual = self._y_inicial + angulo_radianos = self._angulo_de_lancamento + y_atual +=self.velocidade_escalar*math.sin(angulo_radianos)*delta_t + y_atual -= (GRAVIDADE*delta_t**2)/2 + self.y = y_atual + + def _calcular_posicao_horizontal(self, delta_t): + x_atual = self._x_inicial + angulo_radianos = self._angulo_de_lancamento + x_atual += self.velocidade_escalar*math.cos(angulo_radianos)*delta_t + self.x = x_atual class PassaroAmarelo(Passaro): - pass + _caracter_ativo = 'A' + _caracter_destruido = 'a' + velocidade_escalar = 30 class PassaroVermelho(Passaro):