From a0a0f86f50840a6b458e90951839cc88b6eec6ba Mon Sep 17 00:00:00 2001 From: Carlos Roberto Poletto Date: Tue, 17 Mar 2020 19:57:16 -0300 Subject: [PATCH 01/17] Criada a classe Pessoa --- oo/__init__.py | 0 oo/pessoa.py | 42 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 42 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..e3d36ea1f --- /dev/null +++ b/oo/pessoa.py @@ -0,0 +1,42 @@ +class Pessoa: + olhos = 2 + + def __init__(self, *filhos, nome = None, idade=35): + self.idade = idade + self.nome = nome + self.filhos = list(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__': + 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) + for filho in luciano.filhos: + 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)) + print(Pessoa.metodo_estatico(), luciano.metodo_estatico()) + print(Pessoa.nome_e_atributos_de_classe(), luciano.nome_e_atributos_de_classe()) From 410d070fe5eeee8850da9670d76576dde2276b37 Mon Sep 17 00:00:00 2001 From: Carlos Roberto Poletto Date: Tue, 17 Mar 2020 20:15:30 -0300 Subject: [PATCH 02/17] =?UTF-8?q?Implementa=C3=A7=C3=A3o=20das=20classes?= =?UTF-8?q?=20obstaculo,=20passaro=20e=20porco?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- fase.py | 6 +-- oo/carro.py | 153 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 156 insertions(+), 3 deletions(-) create mode 100644 oo/carro.py 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 new file mode 100644 index 000000000..2d9d7ceb6 --- /dev/null +++ b/oo/carro.py @@ -0,0 +1,153 @@ +""" +Você deve criar uma classe carro que vai possuir +dois atributos compostos por outras duas classe: + +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á incrementar a velocidade de uma unidade +3) Método frear que deverá decrementar a velocidade em duas unidades. + +A direção terá a responsabilidade de ocntrolar a direção. Ela oferece +os seguintes 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: + # Testando o 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 Direção + >>> 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 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() + + +NORTE='Norte' +SUL='Sul' +LESTE='Leste' +OESTE='Oeste' + +class Direcao: + rotacao_a_direita_dct = { + NORTE: LESTE, LESTE: SUL, SUL: OESTE, OESTE: NORTE + } + rotacao_a_esquerda_dct = { + NORTE: OESTE, LESTE: NORTE, SUL: LESTE, OESTE: SUL + } + 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) + From ab625ae24efdf8ae695a566d64c94d4885da1a1e Mon Sep 17 00:00:00 2001 From: carlos Date: Fri, 20 Mar 2020 10:31:42 -0300 Subject: [PATCH 03/17] =?UTF-8?q?Atualizado=20m=C3=B3dulo=20testes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- oo/teste_carro.py | 13 +++++++++++++ testes/{atores_testes.py => testes_atores.py} | 0 testes/{fase_testes.py => testes_fase.py} | 0 testes/{integracao.py => testes_integracao.py} | 0 4 files changed, 13 insertions(+) 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%) rename testes/{integracao.py => testes_integracao.py} (100%) diff --git a/oo/teste_carro.py b/oo/teste_carro.py new file mode 100644 index 000000000..0f6617a04 --- /dev/null +++ b/oo/teste_carro.py @@ -0,0 +1,13 @@ +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 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 7ad70c445da694c9c53182af5dc89fc1b7276718 Mon Sep 17 00:00:00 2001 From: carlos Date: Mon, 23 Mar 2020 20:48:20 -0300 Subject: [PATCH 04/17] Sobrescrita de Atributo --- atores.py | 6 +++--- oo/pessoa.py | 12 +++++++++--- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/atores.py b/atores.py index cfc2ef5ea..366032a63 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): @@ -137,4 +137,4 @@ class PassaroAmarelo(Passaro): class PassaroVermelho(Passaro): - pass \ No newline at end of file + _caracter_ativo = 'V' diff --git a/oo/pessoa.py b/oo/pessoa.py index e3d36ea1f..7bf85f5bc 100644 --- a/oo/pessoa.py +++ b/oo/pessoa.py @@ -17,9 +17,15 @@ def metodo_estatico(): def nome_e_atributos_de_classe(cls): return f'{cls} - olhos {cls.olhos}' +class Homem(Pessoa): + pass + +class Mutante(Pessoa): + olhos = 3 + if __name__ == '__main__': - renzo = Pessoa(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()) @@ -33,10 +39,10 @@ def nome_e_atributos_de_classe(cls): 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)) print(Pessoa.metodo_estatico(), luciano.metodo_estatico()) print(Pessoa.nome_e_atributos_de_classe(), luciano.nome_e_atributos_de_classe()) + print(renzo.olhos) \ No newline at end of file From e149da8f177c5fb9171e4b59a017881d0eb05830 Mon Sep 17 00:00:00 2001 From: carlos Date: Mon, 23 Mar 2020 20:56:52 -0300 Subject: [PATCH 05/17] =?UTF-8?q?Sobrescrita=20de=20M=C3=A9todo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- oo/pessoa.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/oo/pessoa.py b/oo/pessoa.py index 7bf85f5bc..ebccc2145 100644 --- a/oo/pessoa.py +++ b/oo/pessoa.py @@ -7,7 +7,7 @@ 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(): @@ -18,7 +18,9 @@ def nome_e_atributos_de_classe(cls): return f'{cls} - olhos {cls.olhos}' class Homem(Pessoa): - pass + def cumprimentar(self): + cumprimentar_da_classe = super().cumprimentar() + return f'{cumprimentar_da_classe}. Aperto de mão' class Mutante(Pessoa): olhos = 3 @@ -45,4 +47,6 @@ class Mutante(Pessoa): 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()) - print(renzo.olhos) \ No newline at end of file + print(renzo.olhos) + print(renzo.cumprimentar()) + print(luciano.cumprimentar()) From e1441bb0130c7f310308be91889df191bfa1dd4c Mon Sep 17 00:00:00 2001 From: carlos Date: Tue, 24 Mar 2020 17:12:31 -0300 Subject: [PATCH 06/17] Tipos de Teste --- fase.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fase.py b/fase.py index 1c8fd161f..e2d17101e 100644 --- a/fase.py +++ b/fase.py @@ -73,7 +73,7 @@ def status(self): :return: """ - return EM_ANDAMENTO + return VITORIA def lancar(self, angulo, tempo): """ From 0804bd92b66a02bc2d62b339fcc7f4cc5cb631c6 Mon Sep 17 00:00:00 2001 From: carlos Date: Tue, 24 Mar 2020 17:31:21 -0300 Subject: [PATCH 07/17] =?UTF-8?q?M=C3=A9todo=20Protegido?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- fase.py | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/fase.py b/fase.py index e2d17101e..79afb5ce2 100644 --- a/fase.py +++ b/fase.py @@ -73,7 +73,12 @@ def status(self): :return: """ - return VITORIA + if not self._possui_porco_ativo(): + return VITORIA + elif self._possui_passaros_ativos(): + return EM_ANDAMENTO + else: + return DERROTA def lancar(self, angulo, tempo): """ @@ -105,3 +110,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 + + From 516a3af6a93489e34f90eb6f3aa1fee90476168d Mon Sep 17 00:00:00 2001 From: carlos Date: Tue, 24 Mar 2020 17:45:37 -0300 Subject: [PATCH 08/17] Ciclo de Vida de Objetos --- fase.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/fase.py b/fase.py index 79afb5ce2..8becb0834 100644 --- a/fase.py +++ b/fase.py @@ -91,8 +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): """ From 979c788e7d4ed1d93ddc9799cbae01f373aa6765 Mon Sep 17 00:00:00 2001 From: carlos Date: Tue, 24 Mar 2020 18:14:45 -0300 Subject: [PATCH 09/17] Fase Completa --- fase.py | 5 +++++ testes/testes_fase.py | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/fase.py b/fase.py index 8becb0834..8f48c7843 100644 --- a/fase.py +++ b/fase.py @@ -105,6 +105,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 diff --git a/testes/testes_fase.py b/testes/testes_fase.py index 8158a43f5..dc0dcfbd3 100644 --- a/testes/testes_fase.py +++ b/testes/testes_fase.py @@ -179,7 +179,7 @@ def teste_lancar_passaro_sem_erro_quando_nao_existe_passaro(self): self.assertTrue(passaros[0].foi_lancado()) self.assertTrue(passaros[1].foi_lancado()) - def teste_intervalo_de_colisao_padrão(self): + def teste_intervalo_de_colisao_padrao(self): ''' Método que testa se o intervalo de colisão da Fase é repassado aos atores. Padrão de intervalo é 1 From 070a027a53f00db07fa3b7a63ac2cbdf77083aed Mon Sep 17 00:00:00 2001 From: carlos Date: Tue, 24 Mar 2020 18:20:15 -0300 Subject: [PATCH 10/17] =?UTF-8?q?Posi=C3=A7=C3=A3o=20de=20Ator?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- atores.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/atores.py b/atores.py index 366032a63..193b83172 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): """ From 867dd52ce4203be1399dd6fd8cd50778b3c2222e Mon Sep 17 00:00:00 2001 From: carlos Date: Tue, 24 Mar 2020 18:36:08 -0300 Subject: [PATCH 11/17] =?UTF-8?q?Colis=C3=A3o=20entre=20Atores?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- atores.py | 7 +++++-- testes/testes_atores.py | 2 +- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/atores.py b/atores.py index 193b83172..96268f8bd 100644 --- a/atores.py +++ b/atores.py @@ -52,8 +52,11 @@ 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): diff --git a/testes/testes_atores.py b/testes/testes_atores.py index f4254f29e..e833eb43a 100644 --- a/testes/testes_atores.py +++ b/testes/testes_atores.py @@ -113,7 +113,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 From 41d2a433bbf90b6d8740569c16536da4c506bb1f Mon Sep 17 00:00:00 2001 From: carlos Date: Tue, 24 Mar 2020 19:14:00 -0300 Subject: [PATCH 12/17] =?UTF-8?q?Porco=20e=20Obst=C3=A1culo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- atores.py | 1 + 1 file changed, 1 insertion(+) diff --git a/atores.py b/atores.py index 96268f8bd..8b640067b 100644 --- a/atores.py +++ b/atores.py @@ -65,6 +65,7 @@ class Obstaculo(Ator): class Porco(Ator): _caracter_ativo = '@' + _caracter_destruido = '+' class DuploLancamentoExcecao(Exception): From 18bf35267dbd898afd2f36a0ef41202d0af694a0 Mon Sep 17 00:00:00 2001 From: carlos Date: Tue, 24 Mar 2020 19:19:50 -0300 Subject: [PATCH 13/17] =?UTF-8?q?Classe=20P=C3=A1ssaro?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- atores.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/atores.py b/atores.py index 8b640067b..21a8331f3 100644 --- a/atores.py +++ b/atores.py @@ -142,3 +142,5 @@ class PassaroAmarelo(Passaro): class PassaroVermelho(Passaro): _caracter_ativo = 'V' + _caracter_destruido = 'v' + velocidade_escalar = 20 From 1f7bbc66b4387448c431a6f58b02e6524eb72fd1 Mon Sep 17 00:00:00 2001 From: carlos Date: Tue, 24 Mar 2020 19:24:49 -0300 Subject: [PATCH 14/17] =?UTF-8?q?Controle=20de=20Lan=C3=A7amento?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- atores.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/atores.py b/atores.py index 21a8331f3..95d034212 100644 --- a/atores.py +++ b/atores.py @@ -97,7 +97,7 @@ def foi_lancado(self): :return: booleano """ - return True + return not self._tempo_de_lancamento is None def colidir_com_chao(self): """ @@ -133,7 +133,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): From fe11a9beb7ee457fa5f85d2c4a015596c8cf84d2 Mon Sep 17 00:00:00 2001 From: carlos Date: Tue, 24 Mar 2020 19:54:54 -0300 Subject: [PATCH 15/17] =?UTF-8?q?Lan=C3=A7amento=20Vertical?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- atores.py | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/atores.py b/atores.py index 95d034212..1b9889f22 100644 --- a/atores.py +++ b/atores.py @@ -121,8 +121,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): """ @@ -136,9 +138,17 @@ def lancar(self, angulo, tempo_de_lancamento): self._angulo_de_lancamento = angulo self._tempo_de_lancamento = tempo_de_lancamento + def _calcular_posicao_vertical(self, delta_t): + y_atual = self._y_inicial + angulo_radianos = math.radians((self._angulo_de_lancamento)) + y_atual += 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): From 8a0a07f56b6d6dee0e4819f7c60e0562b72da6c3 Mon Sep 17 00:00:00 2001 From: carlos Date: Tue, 24 Mar 2020 20:30:20 -0300 Subject: [PATCH 16/17] =?UTF-8?q?Lan=C3=A7amento=20Horizontal?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- atores.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/atores.py b/atores.py index 1b9889f22..510aaf159 100644 --- a/atores.py +++ b/atores.py @@ -124,6 +124,7 @@ def calcular_posicao(self, tempo): if self.foi_lancado(): 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): @@ -145,6 +146,12 @@ def _calcular_posicao_vertical(self, 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 = math.radians((self._angulo_de_lancamento)) + x_atual += self.velocidade_escalar * delta_t * math.cos(angulo_radianos) + self.x = x_atual + class PassaroAmarelo(Passaro): _caracter_ativo = 'A' _caracter_destruido = 'a' From f0a598a960180e3a58d84840568d9c243e743b40 Mon Sep 17 00:00:00 2001 From: carlos Date: Tue, 24 Mar 2020 20:58:11 -0300 Subject: [PATCH 17/17] Gran Finale --- atores.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/atores.py b/atores.py index 510aaf159..525f15dd6 100644 --- a/atores.py +++ b/atores.py @@ -105,7 +105,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): """ @@ -121,7 +122,7 @@ 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) @@ -136,22 +137,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): y_atual = self._y_inicial - angulo_radianos = math.radians((self._angulo_de_lancamento)) + angulo_radianos = self._angulo_de_lancamento y_atual += 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): x_atual = self._x_inicial - angulo_radianos = math.radians((self._angulo_de_lancamento)) + angulo_radianos = self._angulo_de_lancamento 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'