From 38905159d26d93c3400a7c05d33a447cab5ed12a Mon Sep 17 00:00:00 2001 From: Phernando Date: Sun, 17 Apr 2022 15:01:44 +0100 Subject: [PATCH 01/22] 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 e1505b8f48663abbbecbbf4ed78a92dabc608916 Mon Sep 17 00:00:00 2001 From: Phernando Date: Sun, 17 Apr 2022 16:26:04 +0100 Subject: [PATCH 02/22] =?UTF-8?q?Criado=20o=20m=C3=A9todo=20cumprimentar?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- oo/pessoa.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/oo/pessoa.py b/oo/pessoa.py index eb7c0a9c1..036106c42 100644 --- a/oo/pessoa.py +++ b/oo/pessoa.py @@ -1,2 +1,9 @@ class Pessoa: - pass + def cumprimentar(self): + return f'Hola! {id(self)}' + +if __name__ == '__main__': + p = Pessoa() + print(p.cumprimentar()) + print(id(p)) + From 7e41dac3261ea0abe5c63942af907d8d0c0b69a0 Mon Sep 17 00:00:00 2001 From: Phernando Date: Sun, 17 Apr 2022 16:26:04 +0100 Subject: [PATCH 03/22] =?UTF-8?q?Criado=20o=20m=C3=A9todo=20cumprimentar?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- oo/pessoa.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/oo/pessoa.py b/oo/pessoa.py index eb7c0a9c1..036106c42 100644 --- a/oo/pessoa.py +++ b/oo/pessoa.py @@ -1,2 +1,9 @@ class Pessoa: - pass + def cumprimentar(self): + return f'Hola! {id(self)}' + +if __name__ == '__main__': + p = Pessoa() + print(p.cumprimentar()) + print(id(p)) + From cacdb0de3b1ea3a5f3ff9518ced5456f967d69b9 Mon Sep 17 00:00:00 2001 From: Phernando Date: Sun, 17 Apr 2022 17:32:57 +0100 Subject: [PATCH 04/22] =?UTF-8?q?Criado=20e=20removido=20atributo=20din?= =?UTF-8?q?=C3=A2mico=20de=20objeto?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- oo/pessoa.py | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/oo/pessoa.py b/oo/pessoa.py index c4334175d..95d8136c0 100644 --- a/oo/pessoa.py +++ b/oo/pessoa.py @@ -15,7 +15,13 @@ def cumprimentar(self): print(rubens.cumprimentar()) print(id(rubens)) print(rubens.nome) - rubens.nome = 'Fernando' - print(rubens.nome) print(rubens.idade) - print(rubens.filhos) + for filho in rubens.filhos: + print(filho.nome) + rubens.sobrenome = 'Ramalho' + print(rubens.__dict__) + print(fernando.__dict__) + del rubens.sobrenome + print(rubens.__dict__) + + From f3279a5b1e374d07d8eff05157fe151cf0ea9134 Mon Sep 17 00:00:00 2001 From: Phernando Date: Sun, 17 Apr 2022 17:32:57 +0100 Subject: [PATCH 05/22] =?UTF-8?q?Criado=20e=20removido=20atributo=20din?= =?UTF-8?q?=C3=A2mico=20de=20objeto?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- oo/pessoa.py | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/oo/pessoa.py b/oo/pessoa.py index c4334175d..97068a21e 100644 --- a/oo/pessoa.py +++ b/oo/pessoa.py @@ -1,4 +1,5 @@ class Pessoa: + olhos = 2 def __init__(self, *filhos, nome=None, idade=35): self.idade = idade self.nome = nome @@ -15,7 +16,18 @@ def cumprimentar(self): print(rubens.cumprimentar()) print(id(rubens)) print(rubens.nome) - rubens.nome = 'Fernando' - print(rubens.nome) print(rubens.idade) - print(rubens.filhos) + for filho in rubens.filhos: + print(filho.nome) + rubens.sobrenome = 'Ramalho' + print(rubens.__dict__) + print(fernando.__dict__) + del rubens.sobrenome + rubens.olhos = 1 + print(rubens.__dict__) + print(Pessoa.olhos) + print(rubens.olhos) + print(fernando.olhos) + print(id(Pessoa.olhos), id(rubens.olhos), id(fernando.olhos)) + + From 369dce3556e92ba1c5f0ec94d48ee30660fa120f Mon Sep 17 00:00:00 2001 From: Phernando Date: Tue, 19 Apr 2022 21:47:27 +0100 Subject: [PATCH 06/22] Criado o atributo de classe olhos --- oo/pessoa.py | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/oo/pessoa.py b/oo/pessoa.py index c4334175d..530e425f3 100644 --- a/oo/pessoa.py +++ b/oo/pessoa.py @@ -1,4 +1,5 @@ class Pessoa: + olhos = 2 def __init__(self, *filhos, nome=None, idade=35): self.idade = idade self.nome = nome @@ -12,10 +13,21 @@ def cumprimentar(self): fernando = Pessoa(nome='Fernando') rubens = Pessoa(fernando, nome='Rubens') print(Pessoa.cumprimentar(rubens)) - print(rubens.cumprimentar()) print(id(rubens)) - print(rubens.nome) - rubens.nome = 'Fernando' + print(rubens.cumprimentar()) print(rubens.nome) print(rubens.idade) + for filho in rubens.filhos: + print(filho.nome) + rubens.sobrenome = 'Ramalho' print(rubens.filhos) + del rubens.filhos + rubens.olhos = 1 + del rubens.olhos + print(fernando.__init__) + print(rubens.__init__) + print(Pessoa.olhos) + print(rubens.olhos) + print(fernando.olhos) + print(id(Pessoa.olhos), id(rubens.olhos), id(fernando.olhos)) + From 20c4ea67e4c1aef745dd08936acd4018ccfb094e Mon Sep 17 00:00:00 2001 From: Phernando Date: Wed, 20 Apr 2022 22:10:44 +0100 Subject: [PATCH 07/22] Criado o atributo de classe olhos --- oo/carro.py | 77 ++++++++++++++++++++++++++++++++++++++++++++++++++++ oo/pessoa.py | 10 +++++++ 2 files changed, 87 insertions(+) create mode 100644 oo/carro.py diff --git a/oo/carro.py b/oo/carro.py new file mode 100644 index 000000000..846be4f5f --- /dev/null +++ b/oo/carro.py @@ -0,0 +1,77 @@ +""" +Você deve criar uma classe carro que vai possuir +dois atributos compostos por outras duas classes + +1) motor - controla a velocidade, com os seguintes atributos: velocidade(dado), +método acelerar que incrementa a velocidade, método frear que decrementa em 2 unidades a velocidade + +2) direção - controla a direção, com os seguintes atributos: valor de direção (norte, sul, leste e oeste) +método_girar_a_direita, 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.acelerar() + >>> motor.velocidade() + 0 + >>> # Testando a Direção + >>> direcao = Direcao() + >>> direcao.valor + 'Norte' + >>> direcao.girar_a_direita() + >>> direcao.valor + 'Leste' + >>> direcao.girar_a_direita() + >>> 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: + direcao = 'Norte' + velocidade = 0 diff --git a/oo/pessoa.py b/oo/pessoa.py index 530e425f3..ad009c5db 100644 --- a/oo/pessoa.py +++ b/oo/pessoa.py @@ -8,6 +8,14 @@ def __init__(self, *filhos, nome=None, idade=35): def cumprimentar(self): return f'Hola! {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__': fernando = Pessoa(nome='Fernando') @@ -30,4 +38,6 @@ def cumprimentar(self): print(rubens.olhos) print(fernando.olhos) print(id(Pessoa.olhos), id(rubens.olhos), id(fernando.olhos)) + print(Pessoa.metodo_estatico(), rubens.metodo_estatico()) + print(Pessoa.nome_e_atributos_de_classe(), rubens.nome_e_atributos_de_classe()) From 0ddd5a68d5cb67c1fdf54b82a38325602dc0e021 Mon Sep 17 00:00:00 2001 From: Phernando Date: Fri, 22 Apr 2022 13:48:01 +0100 Subject: [PATCH 08/22] Criado o atributo de classe olhos --- oo/carro.py | 71 ++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 62 insertions(+), 9 deletions(-) diff --git a/oo/carro.py b/oo/carro.py index 846be4f5f..b4bd55b2f 100644 --- a/oo/carro.py +++ b/oo/carro.py @@ -1,3 +1,6 @@ + + + """ Você deve criar uma classe carro que vai possuir dois atributos compostos por outras duas classes @@ -17,19 +20,19 @@ >>> motor.velocidade 0 >>> motor.acelerar() - >>> motor.velocidade() + >>> motor.velocidade 1 >>> motor.acelerar() - >>> motor.velocidade() + >>> motor.velocidade 2 >>> motor.acelerar() - >>> motor.velocidade() + >>> motor.velocidade 3 >>> motor.frear() - >>> motor.velocidade() + >>> motor.velocidade 1 - >>> motor.acelerar() - >>> motor.velocidade() + >>> motor.frear() + >>> motor.velocidade 0 >>> # Testando a Direção >>> direcao = Direcao() @@ -71,7 +74,57 @@ >>> carro.calcular_direcao() 'Oeste' """ +NORTE = 'Norte' +SUL = 'Sul' +LESTE = 'Leste' +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): +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) + + + + + -Class Carro: - direcao = 'Norte' - velocidade = 0 From 30b584af6d4fc78380c6bcb4a9ee2c2d8523f41b Mon Sep 17 00:00:00 2001 From: Phernando Date: Fri, 22 Apr 2022 14:03:59 +0100 Subject: [PATCH 09/22] Criado o atributo de classe olhos --- oo/carro.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/oo/carro.py b/oo/carro.py index b4bd55b2f..8bef9ec98 100644 --- a/oo/carro.py +++ b/oo/carro.py @@ -94,6 +94,16 @@ 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 = { From e50d1c6c750c7ae324de26cd14ee02a73309ae19 Mon Sep 17 00:00:00 2001 From: Phernando82 Date: Fri, 22 Apr 2022 16:32:15 +0100 Subject: [PATCH 10/22] =?UTF-8?q?Heran=C3=A7a?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- fase.py | 6 +++--- oo/pessoa.py | 12 ++++++++++-- 2 files changed, 13 insertions(+), 5 deletions(-) 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/pessoa.py b/oo/pessoa.py index ad009c5db..373f50987 100644 --- a/oo/pessoa.py +++ b/oo/pessoa.py @@ -16,10 +16,13 @@ def metodo_estatico(): def nome_e_atributos_de_classe(cls): return f'{cls} - olhos {cls.olhos}' +class Homem(Pessoa): + pass + if __name__ == '__main__': - fernando = Pessoa(nome='Fernando') - rubens = Pessoa(fernando, nome='Rubens') + fernando = Homem(nome='Fernando') + rubens = Homem(fernando, nome='Rubens') print(Pessoa.cumprimentar(rubens)) print(id(rubens)) print(rubens.cumprimentar()) @@ -40,4 +43,9 @@ def nome_e_atributos_de_classe(cls): print(id(Pessoa.olhos), id(rubens.olhos), id(fernando.olhos)) print(Pessoa.metodo_estatico(), rubens.metodo_estatico()) print(Pessoa.nome_e_atributos_de_classe(), rubens.nome_e_atributos_de_classe()) + pessoa = Pessoa('Anonimo') + print(isinstance(pessoa, Pessoa)) + print(isinstance(pessoa, Homem)) + print(isinstance(fernando, Pessoa)) + print(isinstance(fernando, Homem)) From ca0310ca739fe10470e94e139269358832546224 Mon Sep 17 00:00:00 2001 From: Phernando Date: Fri, 22 Apr 2022 16:52:38 +0100 Subject: [PATCH 11/22] Criado o atributo de classe olhos --- oo/test_carro.py | 14 ++++++++++++++ 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, 14 insertions(+) create mode 100644 oo/test_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/test_carro.py b/oo/test_carro.py new file mode 100644 index 000000000..d4cd7f99c --- /dev/null +++ b/oo/test_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) + 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 916508565d14a8888f2bb787e59ed02f1abba189 Mon Sep 17 00:00:00 2001 From: Phernando Date: Sat, 23 Apr 2022 00:28:21 +0100 Subject: [PATCH 12/22] Trabalhando com os testes --- atores.py | 8 ++++---- fase.py | 5 ++++- oo/pessoa.py | 14 ++++++++++---- 3 files changed, 18 insertions(+), 9 deletions(-) diff --git a/atores.py b/atores.py index cfc2ef5ea..3b53f40cf 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): @@ -133,8 +133,8 @@ def lancar(self, angulo, tempo_de_lancamento): class PassaroAmarelo(Passaro): - pass + _caracter_ativo = 'A' class PassaroVermelho(Passaro): - pass \ No newline at end of file + _caracter_ativo = 'V' \ No newline at end of file diff --git a/fase.py b/fase.py index 1c8fd161f..ed308ee7f 100644 --- a/fase.py +++ b/fase.py @@ -62,6 +62,9 @@ def adicionar_passaro(self, *passaros): self._passaros.extend(passaros) def status(self): + # if Porco._caracter_ativo == '@' and Passaro._caracter_ativo == 'A': + # return EM_ANDAMENTO + # elif """ Método que indica com mensagem o status do jogo @@ -73,7 +76,7 @@ def status(self): :return: """ - return EM_ANDAMENTO + return VITORIA def lancar(self, angulo, tempo): """ diff --git a/oo/pessoa.py b/oo/pessoa.py index 373f50987..2cd9aab44 100644 --- a/oo/pessoa.py +++ b/oo/pessoa.py @@ -6,7 +6,7 @@ def __init__(self, *filhos, nome=None, idade=35): self.filhos = list(filhos) def cumprimentar(self): - return f'Hola! {id(self)}' + return f'Hola! Meu nome é {self.nome}' @staticmethod def metodo_estatico(): @@ -17,15 +17,19 @@ 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 if __name__ == '__main__': - fernando = Homem(nome='Fernando') + fernando = Mutante(nome='Fernando') rubens = Homem(fernando, nome='Rubens') print(Pessoa.cumprimentar(rubens)) print(id(rubens)) - print(rubens.cumprimentar()) + print(fernando.cumprimentar()) print(rubens.nome) print(rubens.idade) for filho in rubens.filhos: @@ -48,4 +52,6 @@ class Homem(Pessoa): print(isinstance(pessoa, Homem)) print(isinstance(fernando, Pessoa)) print(isinstance(fernando, Homem)) + print(fernando.cumprimentar()) + print(rubens.cumprimentar()) From dfce214f0eca5c2ab80ed09f1c0141a123373cd9 Mon Sep 17 00:00:00 2001 From: Phernando Date: Sat, 23 Apr 2022 10:31:17 +0100 Subject: [PATCH 13/22] Ciclo de vida de Objetos --- fase.py | 31 ++++++++++++++++++++++++++----- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/fase.py b/fase.py index ed308ee7f..e7b542607 100644 --- a/fase.py +++ b/fase.py @@ -62,9 +62,15 @@ def adicionar_passaro(self, *passaros): self._passaros.extend(passaros) def status(self): - # if Porco._caracter_ativo == '@' and Passaro._caracter_ativo == 'A': - # return EM_ANDAMENTO - # elif + if not self._possui_porco_ativo(): + return VITORIA + + elif self._possui_passaros_ativos(): + return EM_ANDAMENTO + + else: + return DERROTA + """ Método que indica com mensagem o status do jogo @@ -76,7 +82,7 @@ def status(self): :return: """ - return VITORIA + def lancar(self, angulo, tempo): """ @@ -89,7 +95,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): @@ -108,3 +117,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 + From 1d9c4563207497defa444ab2a37671194b10cd5e Mon Sep 17 00:00:00 2001 From: Phernando Date: Sat, 23 Apr 2022 11:39:21 +0100 Subject: [PATCH 14/22] =?UTF-8?q?Implementa=C3=A7=C3=A3o=20da=20fase?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- fase.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/fase.py b/fase.py index e7b542607..59c0c677f 100644 --- a/fase.py +++ b/fase.py @@ -110,6 +110,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 From f89011a40e16948e2f0d566b77a3a8b38ebebe29 Mon Sep 17 00:00:00 2001 From: Phernando Date: Sat, 23 Apr 2022 13:55:39 +0100 Subject: [PATCH 15/22] =?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 3b53f40cf..eef09aceb 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 4138d501bd613f50508cd1a1906a7ee6c24dbeeb Mon Sep 17 00:00:00 2001 From: Phernando Date: Sat, 23 Apr 2022 14:13:28 +0100 Subject: [PATCH 16/22] =?UTF-8?q?Finalizando=20implementa=C3=A7=C3=A3o=20d?= =?UTF-8?q?o=20m=C3=A9todo=20de=20colis=C3=A3o?= 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, 7 insertions(+), 2 deletions(-) diff --git a/atores.py b/atores.py index eef09aceb..ae6b7f9d7 100644 --- a/atores.py +++ b/atores.py @@ -52,7 +52,12 @@ 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 + 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 aa287f5e7030eda3579dce8ae7cdedb7687d986d Mon Sep 17 00:00:00 2001 From: Phernando Date: Sat, 23 Apr 2022 14:28:39 +0100 Subject: [PATCH 17/22] =?UTF-8?q?Reutiliza=C3=A7=C3=A3o=20de=20c=C3=B3digo?= =?UTF-8?q?=20por=20heran=C3=A7a=20para=20implementa=C3=A7=C3=A3o=20de=20P?= =?UTF-8?q?orco=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 ae6b7f9d7..4c77c3840 100644 --- a/atores.py +++ b/atores.py @@ -67,6 +67,7 @@ class Obstaculo(Ator): class Porco(Ator): _caracter_ativo = '@' + _caracter_destruido = '+' class DuploLancamentoExcecao(Exception): From 06caf75e555379534c5a6ed1a8b5fd53cf2beb24 Mon Sep 17 00:00:00 2001 From: Phernando Date: Sat, 23 Apr 2022 14:48:25 +0100 Subject: [PATCH 18/22] =?UTF-8?q?Reutiliza=C3=A7=C3=A3o=20de=20c=C3=B3digo?= =?UTF-8?q?=20por=20heran=C3=A7a=20para=20implementa=C3=A7=C3=A3o=20dos=20?= =?UTF-8?q?dois=20tipos=20de=20p=C3=A1ssaros:=20Amarelo=20e=20Vermelho?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- atores.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/atores.py b/atores.py index 4c77c3840..e0b840500 100644 --- a/atores.py +++ b/atores.py @@ -139,8 +139,11 @@ def lancar(self, angulo, tempo_de_lancamento): class PassaroAmarelo(Passaro): - _caracter_ativo = 'A' + # _caracter_ativo = 'A' + pass class PassaroVermelho(Passaro): - _caracter_ativo = 'V' \ No newline at end of file + _caracter_ativo = 'V' + _caracter_destruido = 'v' + velocidade_escalar = 20 \ No newline at end of file From 7366b4365c071e980c3c2854d091811dcbaa3fbd Mon Sep 17 00:00:00 2001 From: Phernando Date: Sat, 23 Apr 2022 14:57:48 +0100 Subject: [PATCH 19/22] =?UTF-8?q?Implementando=20o=20controle=20de=20lan?= =?UTF-8?q?=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 e0b840500..6abfa72e7 100644 --- a/atores.py +++ b/atores.py @@ -99,7 +99,7 @@ def foi_lancado(self): :return: booleano """ - return True + return not self._tempo_de_lancamento is None def colidir_com_chao(self): """ @@ -135,7 +135,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 eb710d69905bb1c994a99cddc6ad9839a832bb21 Mon Sep 17 00:00:00 2001 From: Phernando Date: Sat, 23 Apr 2022 15:22:47 +0100 Subject: [PATCH 20/22] =?UTF-8?q?Implementando=20o=20c=C3=A1lculo=20do=20l?= =?UTF-8?q?an=C3=A7amento=20obl=C3=ADquo=20vertical?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- atores.py | 18 +++++++++++++++--- testes/testes_atores.py | 1 - 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/atores.py b/atores.py index 6abfa72e7..d8d09d9c4 100644 --- a/atores.py +++ b/atores.py @@ -123,7 +123,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): @@ -138,10 +141,19 @@ 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 /2 * (delta_t ** 2)) / 2 + self.y = y_atual + class PassaroAmarelo(Passaro): - # _caracter_ativo = 'A' - pass + _caracter_ativo = 'A' + _caracter_destruido = 'a' + velocidade_escalar = 30 + class PassaroVermelho(Passaro): diff --git a/testes/testes_atores.py b/testes/testes_atores.py index e833eb43a..a23ff42bf 100644 --- a/testes/testes_atores.py +++ b/testes/testes_atores.py @@ -266,7 +266,6 @@ def teste_lacamento_vertical(self): passaro_amarelo.lancar(90, 2) # passaro lancado a 90 graus no tempo 2 segundos - # subindo self.assert_posicao_vertical(1, 2.0, passaro_amarelo) From 8da31d62f5910a5d1cab062f96f5eab932d18102 Mon Sep 17 00:00:00 2001 From: Phernando Date: Sat, 23 Apr 2022 15:29:25 +0100 Subject: [PATCH 21/22] =?UTF-8?q?Implementando=20o=20c=C3=A1lculo=20do=20l?= =?UTF-8?q?an=C3=A7amento=20obl=C3=ADquo=20horizontal?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- atores.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/atores.py b/atores.py index d8d09d9c4..0e067da68 100644 --- a/atores.py +++ b/atores.py @@ -126,6 +126,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) @@ -148,6 +149,14 @@ def _calcular_posicao_vertical(self, delta_t): y_atual -= (GRAVIDADE /2 * (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' From 951d3866db782b547078bd08717796591d3c1dad Mon Sep 17 00:00:00 2001 From: Phernando Date: Sat, 23 Apr 2022 16:23:30 +0100 Subject: [PATCH 22/22] =?UTF-8?q?Implementa=C3=A7=C3=A3o=20finalizada?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- atores.py | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/atores.py b/atores.py index 0e067da68..7bb5ffd25 100644 --- a/atores.py +++ b/atores.py @@ -59,8 +59,6 @@ def colidir(self, outro_ator, intervalo=1): self.status = outro_ator.status = DESTRUIDO - - class Obstaculo(Ator): _caracter_ativo = 'O' @@ -107,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): """ @@ -123,13 +122,12 @@ 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) - def lancar(self, angulo, tempo_de_lancamento): """ Lógica que lança o pássaro. Deve armazenar o ângulo e o tempo de lançamento para posteriores cálculo. @@ -139,23 +137,24 @@ 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 /2 * (delta_t ** 2)) / 2 + 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): @@ -164,8 +163,7 @@ class PassaroAmarelo(Passaro): velocidade_escalar = 30 - class PassaroVermelho(Passaro): _caracter_ativo = 'V' _caracter_destruido = 'v' - velocidade_escalar = 20 \ No newline at end of file + velocidade_escalar = 20