From f1396b292d026ade0fd249d6c05cb31c50af80c2 Mon Sep 17 00:00:00 2001 From: fabianomcs Date: Sat, 23 Jan 2021 23:21:31 -0300 Subject: [PATCH 1/9] criando 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..e1da50e22 --- /dev/null +++ b/oo/pessoa.py @@ -0,0 +1,2 @@ +class Pessoa: + pass \ No newline at end of file From 8def53b2cd7a81faf542988f2ef7a30ac0465a56 Mon Sep 17 00:00:00 2001 From: fabianomcs Date: Sat, 23 Jan 2021 23:44:55 -0300 Subject: [PATCH 2/9] =?UTF-8?q?criando=20o=20m=C3=A9todo=20cumprimentar.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- oo/pessoa.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/oo/pessoa.py b/oo/pessoa.py index e1da50e22..7df71bc76 100644 --- a/oo/pessoa.py +++ b/oo/pessoa.py @@ -1,2 +1,10 @@ class Pessoa: - pass \ No newline at end of file + def cumprimentar(self): + return f'Olá {id(self)}' + + +if __name__ == '__main__': + p = Pessoa + print(Pessoa.cumprimentar(p)) + print(id(p)) + print(p.cumprimentar(p)) \ No newline at end of file From 59329028cf17a7c067f3a8f1804494411a2e32be Mon Sep 17 00:00:00 2001 From: fabianomcs Date: Sun, 24 Jan 2021 11:13:17 -0300 Subject: [PATCH 3/9] =?UTF-8?q?criando=20atributos=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 | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/oo/pessoa.py b/oo/pessoa.py index 7df71bc76..1aab535ba 100644 --- a/oo/pessoa.py +++ b/oo/pessoa.py @@ -1,10 +1,18 @@ class Pessoa: + def __init__(self, nome=None, idade=34): + self.nome = nome + self.idade = idade + def cumprimentar(self): return f'Olá {id(self)}' if __name__ == '__main__': - p = Pessoa + p = Pessoa('Maia') print(Pessoa.cumprimentar(p)) print(id(p)) - print(p.cumprimentar(p)) \ No newline at end of file + print(p.cumprimentar()) + print(p.nome) + p.nome ='Fabiano' + print(p.nome) + print(p.idade) \ No newline at end of file From 945b91819f7ab746455e78a86d4caf8a00c2bf6e Mon Sep 17 00:00:00 2001 From: fabianomcs Date: Sun, 24 Jan 2021 12:17:37 -0300 Subject: [PATCH 4/9] crido atributo complexo filhos --- oo/pessoa.py | 29 ++++++++++++++++++++--------- 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/oo/pessoa.py b/oo/pessoa.py index 1aab535ba..660551fd1 100644 --- a/oo/pessoa.py +++ b/oo/pessoa.py @@ -1,18 +1,29 @@ class Pessoa: - def __init__(self, nome=None, idade=34): + def __init__(self, nome=None, idade=34, *filhos): self.nome = nome self.idade = idade + self.filhos = list(filhos) def cumprimentar(self): return f'Olá {id(self)}' if __name__ == '__main__': - p = Pessoa('Maia') - print(Pessoa.cumprimentar(p)) - print(id(p)) - print(p.cumprimentar()) - print(p.nome) - p.nome ='Fabiano' - print(p.nome) - print(p.idade) \ No newline at end of file + + jose = Pessoa(nome='Jose', idade=2) + maia = Pessoa('Maia', 30, jose) + fabiano = Pessoa(nome='Fabiano', idade=5) + maia = Pessoa('Maia', 30, fabiano) + + print(Pessoa.cumprimentar(maia)) + print(id(maia.nome)) + print('1', maia.cumprimentar()) + print(maia.nome, maia.idade) + print(maia.idade) + print(str(maia.filhos.count)) + + for filho in maia.filhos: + print(Pessoa.cumprimentar(filho.nome)) + + for filho in maia.filhos: + print(filho.nome) From 58b5dadbe404c486be93f33db7262ce5b0cc4a99 Mon Sep 17 00:00:00 2001 From: fabianomcs Date: Sun, 24 Jan 2021 12:26:30 -0300 Subject: [PATCH 5/9] =?UTF-8?q?ciado=20e=20removido=20atributo=20din=C3=A3?= =?UTF-8?q?mico=20do=20tipo=20Pessoa.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- oo/pessoa.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/oo/pessoa.py b/oo/pessoa.py index 660551fd1..932a73018 100644 --- a/oo/pessoa.py +++ b/oo/pessoa.py @@ -27,3 +27,11 @@ def cumprimentar(self): for filho in maia.filhos: print(filho.nome) + + maia.sobrenome = 'Ramalho' + print('Nome completo', maia.nome, maia.sobrenome) + + del maia.filhos + + print(maia.__dict__) + print(fabiano.__dict__) From 4d4d11655f0d929f48cdd2c98336ae10fe4c43d5 Mon Sep 17 00:00:00 2001 From: fabianomcs Date: Tue, 2 Feb 2021 19:10:40 -0300 Subject: [PATCH 6/9] criado atributo de classe olhos --- oo/pessoa.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/oo/pessoa.py b/oo/pessoa.py index 932a73018..5b5705f6e 100644 --- a/oo/pessoa.py +++ b/oo/pessoa.py @@ -1,4 +1,6 @@ class Pessoa: + olhos = 2 + def __init__(self, nome=None, idade=34, *filhos): self.nome = nome self.idade = idade @@ -32,6 +34,12 @@ def cumprimentar(self): print('Nome completo', maia.nome, maia.sobrenome) del maia.filhos + maia.olhos = 1 print(maia.__dict__) print(fabiano.__dict__) + + print('Uma pessoa tem',Pessoa.olhos) + print(maia.olhos) + print(fabiano.olhos) + print(id(Pessoa.olhos), id(maia.olhos), id(fabiano.olhos)) \ No newline at end of file From 18532a8111500e7a6854554a4f3fbcaf53229f73 Mon Sep 17 00:00:00 2001 From: fabianomcs Date: Sun, 4 Apr 2021 19:45:54 -0300 Subject: [PATCH 7/9] criado classes --- oo/carro.py | 154 +++++++++++++++++++++++++++++++++++++++++++++++++++ oo/pessoa.py | 13 ++++- 2 files changed, 166 insertions(+), 1 deletion(-) create mode 100644 oo/carro.py diff --git a/oo/carro.py b/oo/carro.py new file mode 100644 index 000000000..42d9c2079 --- /dev/null +++ b/oo/carro.py @@ -0,0 +1,154 @@ + +""" +Você deve criar uma classe carro que vai possuir + dois atributos compostos por uutras duas classes: + + 1) Motor + 2) Direção + + O motor terá q responsabilidade de controla a velociadade. + ele oferece os seguintes atributos: + 1) Atributo de dado velocidade + 2) Método acelerar, que deverá incrementar a velocidade em duas unidades + 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 seguinte atributos: + 1) Valor de direçã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: + >>> 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 Direçao + >>> 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' +""" + +NORTE = 'Norte' +LESTE = 'Leste' +SUL = 'Sul' +OESTE = 'Oeste' + +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 calcular_direcao(self): + return self.direcao.valor + + def girar_a_direita(self): + self.direcao.girar_a_direita() + + def girar_a_esquerda(self): + self.direcao.girar_a_esquerda() + + +class Direcao: + + rotacao_a_direita_dct = { + NORTE: LESTE, LESTE: SUL, SUL: OESTE, OESTE: NORTE + } + + rotacao_a_esquerda_dct = { + NORTE: OESTE, OESTE: SUL, SUL: LESTE, LESTE: NORTE + } + + def __init__(self): + self.valor = NORTE + + def girar_a_direita(self): + self.valor = self.rotacao_a_direita_dct[self.valor] + + def girar_a_esquerda(self): + self.valor = self.rotacao_a_esquerda_dct[self.valor] + + +class Motor: + def __init__(self): + self.velocidade = 0 + + def acelerar(self): + self.velocidade += 1 + + def frear(self): + self.velocidade -= 2 + self.velocidade = max(0, self.velocidade) diff --git a/oo/pessoa.py b/oo/pessoa.py index 5b5705f6e..7d8fb90d4 100644 --- a/oo/pessoa.py +++ b/oo/pessoa.py @@ -9,6 +9,14 @@ def __init__(self, nome=None, idade=34, *filhos): 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__': @@ -42,4 +50,7 @@ def cumprimentar(self): print('Uma pessoa tem',Pessoa.olhos) print(maia.olhos) print(fabiano.olhos) - print(id(Pessoa.olhos), id(maia.olhos), id(fabiano.olhos)) \ No newline at end of file + print(id(Pessoa.olhos), id(maia.olhos), id(fabiano.olhos)) + + print(Pessoa.metodo_estatico(), maia.metodo_estatico()) + print(Pessoa.nome_e_atributos_de_classe(), maia.nome_e_atributos_de_classe()) \ No newline at end of file From aeaa01f5cc9ea919427be2a83b60215a7e013f0b Mon Sep 17 00:00:00 2001 From: fabianomcs Date: Tue, 6 Apr 2021 21:52:44 -0300 Subject: [PATCH 8/9] criado classes --- atores.py | 47 +++++++++++++------ fase.py | 35 ++++++++++++-- oo/pessoa.py | 30 +++++++----- oo/teste_carro.py | 14 ++++++ testes/{atores_testes.py => testes_atores.py} | 6 +-- testes/{fase_testes.py => testes_fase.py} | 0 .../{integracao.py => testes_integracao.py} | 0 7 files changed, 96 insertions(+), 36 deletions(-) create mode 100644 oo/teste_carro.py rename testes/{atores_testes.py => testes_atores.py} (99%) rename testes/{fase_testes.py => testes_fase.py} (100%) rename testes/{integracao.py => testes_integracao.py} (100%) diff --git a/atores.py b/atores.py index cfc2ef5ea..c29cc33e8 100644 --- a/atores.py +++ b/atores.py @@ -38,7 +38,7 @@ 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,22 +52,22 @@ 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 class Obstaculo(Ator): - pass - + _caracter_ativo = 'O' class Porco(Ator): - pass - + _caracter_ativo = '@' + _caracter_destruido = '+' class DuploLancamentoExcecao(Exception): pass - class Passaro(Ator): velocidade_escalar = 10 @@ -93,7 +93,12 @@ def foi_lancado(self): :return: booleano """ - return True + # if self._tempo_de_lancamento is None: # O código abaixo substitui este if else + # return False + # else: + # return True + + return not self._tempo_de_lancamento is None def colidir_com_chao(self): """ @@ -117,7 +122,10 @@ 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(): + delta_t = tempo - self._tempo_de_lancamento + self._calcular_posicao_vertical(delta_t) + return super().calcular_posicao(tempo) def lancar(self, angulo, tempo_de_lancamento): @@ -129,12 +137,21 @@ 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 + def _calcular_posicao_vertical(self, delta_t): + angulo_radianos = math.radians(self._angulo_de_lancamento) + y_atual = self._y_inicial + self.velocidade_escalar * delta_t * math.sin(angulo_radianos) + y_atual -= (GRAVIDADE * (delta_t ** 2)) / 2 + self.y = y_atual class PassaroAmarelo(Passaro): - pass - + _caracter_ativo = 'A' + _caracter_destruido = 'a' + velocidade_escalar = 30 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 3385175c6..943ff6c7a 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): """ @@ -73,7 +73,12 @@ 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 +91,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 +106,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 +118,15 @@ 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/oo/pessoa.py b/oo/pessoa.py index 7d8fb90d4..ef1a4cb56 100644 --- a/oo/pessoa.py +++ b/oo/pessoa.py @@ -7,7 +7,7 @@ def __init__(self, nome=None, idade=34, *filhos): self.filhos = list(filhos) def cumprimentar(self): - return f'Olá {id(self)}' + return f'Olá meu nome é {self.nome}' @staticmethod def metodo_estatico(): @@ -17,12 +17,21 @@ def metodo_estatico(): def nome_e_atributos_de_classe(cls): return f'{cls} - olhos {cls.olhos}' +class Homem(Pessoa): + def cumprimentar(self): + #cumprimentar_da_classe=Pessoa.cumprimentar(self) pode gerar problemas se a classe "pai" for alterada. + cumprimentar_da_classe=super().cumprimentar() + return f'{cumprimentar_da_classe}. Aperto de Mão' + +class Mutante(Pessoa): + olhos = 3 + if __name__ == '__main__': - jose = Pessoa(nome='Jose', idade=2) + jose = Mutante(nome='Jose', idade=2) maia = Pessoa('Maia', 30, jose) - fabiano = Pessoa(nome='Fabiano', idade=5) + fabiano = Homem(nome='Fabiano', idade=5) maia = Pessoa('Maia', 30, fabiano) print(Pessoa.cumprimentar(maia)) @@ -30,13 +39,7 @@ def nome_e_atributos_de_classe(cls): print('1', maia.cumprimentar()) print(maia.nome, maia.idade) print(maia.idade) - print(str(maia.filhos.count)) - - for filho in maia.filhos: - print(Pessoa.cumprimentar(filho.nome)) - - for filho in maia.filhos: - print(filho.nome) + print(maia.filhos.count) maia.sobrenome = 'Ramalho' print('Nome completo', maia.nome, maia.sobrenome) @@ -53,4 +56,9 @@ def nome_e_atributos_de_classe(cls): print(id(Pessoa.olhos), id(maia.olhos), id(fabiano.olhos)) print(Pessoa.metodo_estatico(), maia.metodo_estatico()) - print(Pessoa.nome_e_atributos_de_classe(), maia.nome_e_atributos_de_classe()) \ No newline at end of file + print(Pessoa.nome_e_atributos_de_classe(), maia.nome_e_atributos_de_classe()) + + print('Número de olhos do mutante', jose.nome ,'é',jose.olhos) + + print(maia.cumprimentar()) + print(fabiano.cumprimentar()) diff --git a/oo/teste_carro.py b/oo/teste_carro.py new file mode 100644 index 000000000..c0f3b18bd --- /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_velocidadde_inicial(self): + motor = Motor() + self.assertEqual(0, motor.velocidade) + + def teste_acelerar(self): + motor = Motor() + motor.acelerar() + self.assertEqual(1, motor.velocidade) diff --git a/testes/atores_testes.py b/testes/testes_atores.py similarity index 99% rename from testes/atores_testes.py rename to testes/testes_atores.py index f4254f29e..90f6a946c 100644 --- a/testes/atores_testes.py +++ b/testes/testes_atores.py @@ -1,5 +1,4 @@ # -*- coding: utf-8 -*- - from __future__ import unicode_literals from os import path import sys @@ -113,7 +112,7 @@ def test_caracter(self): def assert_colisao_atores_ativos(self, ator, ator2, intervalo=1): """ Se certifica que há colisão entre atores ativos - Atenção: Esse não é método de teste porque nao se inicia com prefixo "text". + Atenção: Esse não é método de teste porque nao se inicia com prefixo "test". Ele serve apenas para encapsular toda lógica de teste de colisão entre dois atores ativos """ # Conferindo status dos dois atores antes da colisão @@ -202,7 +201,6 @@ def teste_status(self): passaro_vermelho.colidir(outro_ator_na_mesma_posicao) self.assertEqual('v', passaro_vermelho.caracter()) - def teste_velocidade_escalar(self): self.assertEqual(20, PassaroVermelho.velocidade_escalar) @@ -265,8 +263,6 @@ def teste_lacamento_vertical(self): passaro_amarelo = PassaroAmarelo(1, 1) passaro_amarelo.lancar(90, 2) # passaro lancado a 90 graus no tempo 2 segundos - - # subindo self.assert_posicao_vertical(1, 2.0, passaro_amarelo) 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 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 abe1590c327aceb8d67f9bb925783dd93fdb0fb5 Mon Sep 17 00:00:00 2001 From: fabianomcs Date: Tue, 6 Apr 2021 22:58:05 -0300 Subject: [PATCH 9/9] Concluido - sem o reiniciar --- atores.py | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/atores.py b/atores.py index c29cc33e8..f9aba9fcb 100644 --- a/atores.py +++ b/atores.py @@ -106,7 +106,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): """ @@ -122,9 +123,10 @@ def calcular_posicao(self, tempo): :param tempo: tempo de jogo a ser calculada a posição :return: posição x, y """ - if self.foi_lancado(): + if self._esta_voando(): delta_t = tempo - self._tempo_de_lancamento self._calcular_posicao_vertical(delta_t) + self._calcular_posicao_horizontal(delta_t) return super().calcular_posicao(tempo) @@ -137,15 +139,25 @@ 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): - angulo_radianos = math.radians(self._angulo_de_lancamento) + angulo_radianos = self._angulo_de_lancamento y_atual = self._y_inicial + self.velocidade_escalar * delta_t * math.sin(angulo_radianos) y_atual -= (GRAVIDADE * (delta_t ** 2)) / 2 self.y = y_atual + def _calcular_posicao_horizontal(self, delta_t): + angulo_radianos = self._angulo_de_lancamento + x_atual = self._x_inicial + x_atual += self.velocidade_escalar * delta_t * math.cos(angulo_radianos) + self.x = x_atual + + def _esta_voando(self): + return self.foi_lancado() and self.status == ATIVO + + class PassaroAmarelo(Passaro): _caracter_ativo = 'A' _caracter_destruido = 'a'