From 61101ef2bfefc985be7f4323ca9618c6233e7019 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9cil=20Malone=20Souza=20Cardozo?= Date: Thu, 27 Sep 2018 11:23:06 -0300 Subject: [PATCH 01/21] 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..e1da50e22 --- /dev/null +++ b/oo/pessoa.py @@ -0,0 +1,2 @@ +class Pessoa: + pass \ No newline at end of file From d4e7aa5ff9054589d9ded8fd6df6bb9cc839cf90 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9cil=20Malone=20Souza=20Cardozo?= Date: Thu, 27 Sep 2018 11:34:10 -0300 Subject: [PATCH 02/21] =?UTF-8?q?Criada=20a=20fun=C3=A7=C3=A3o=20cumprimen?= =?UTF-8?q?tar.?= 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 e1da50e22..923520597 100644 --- a/oo/pessoa.py +++ b/oo/pessoa.py @@ -1,2 +1,9 @@ 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()) \ No newline at end of file From 9a3c54f624c0f6c780f766366f6f7f0c09f33d75 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9cil=20Malone=20Souza=20Cardozo?= Date: Thu, 27 Sep 2018 11:43:42 -0300 Subject: [PATCH 03/21] =?UTF-8?q?Criados=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 923520597..3f5779c9e 100644 --- a/oo/pessoa.py +++ b/oo/pessoa.py @@ -1,9 +1,17 @@ class Pessoa: + def __init__(self, nome=None, idade=35): + self.idade = idade + self.nome = nome + def cumprimentar(self): return f'Olá {id(self)}' if __name__ == '__main__': - p = Pessoa() + p = Pessoa('Malone') print(Pessoa.cumprimentar(p)) print(id(p)) - print(p.cumprimentar()) \ No newline at end of file + print(p.cumprimentar()) + print(p.nome) + p.nome = 'Cécil' + print(p.nome) + print(p.idade) \ No newline at end of file From 93873476b2ea20ec6c28f98632bbc1a90053e7b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9cil=20Malone=20Souza=20Cardozo?= Date: Thu, 27 Sep 2018 11:59:32 -0300 Subject: [PATCH 04/21] =?UTF-8?q?Inserido=20atributo=20complexo=20na=20ins?= =?UTF-8?q?t=C3=A2ncia=20da=20classe.?= 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 3f5779c9e..8098fb425 100644 --- a/oo/pessoa.py +++ b/oo/pessoa.py @@ -1,17 +1,20 @@ class Pessoa: - def __init__(self, nome=None, idade=35): + 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)}' + if __name__ == '__main__': - p = Pessoa('Malone') - print(Pessoa.cumprimentar(p)) - print(id(p)) - print(p.cumprimentar()) - print(p.nome) - p.nome = 'Cécil' - print(p.nome) - print(p.idade) \ No newline at end of file + cecil = Pessoa(nome='Cécil') + malone = Pessoa(cecil, nome='Malone') + print(Pessoa.cumprimentar(malone)) + print(id(malone)) + print(malone.cumprimentar()) + print(malone.nome) + print(malone.idade) + for filho in malone.filhos: + print(filho.nome) From 4d6fc42ac692b71b9b38a98c2342b8907834a008 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9cil=20Malone=20Souza=20Cardozo?= Date: Thu, 27 Sep 2018 12:05:39 -0300 Subject: [PATCH 05/21] =?UTF-8?q?Cria=C3=A7=C3=A3o=20e=20dele=C3=A7=C3=A3o?= =?UTF-8?q?=20de=20atributos=20din=C3=A2micos=20de=20objetos=20do=20tipo?= =?UTF-8?q?=20pessoa.=20=5F=5Fdict=5F=5F=20para=20listar=20todos=20os=20at?= =?UTF-8?q?ributos=20de=20um=20objeto.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- oo/pessoa.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/oo/pessoa.py b/oo/pessoa.py index 8098fb425..08e59d62d 100644 --- a/oo/pessoa.py +++ b/oo/pessoa.py @@ -18,3 +18,7 @@ def cumprimentar(self): print(malone.idade) for filho in malone.filhos: print(filho.nome) + malone.sobrenome='Souza' + del malone.filhos + print(malone.__dict__) + print(cecil.__dict__) From 6cf8eec8c683e1a6bbe05fdd362841875828f2a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9cil=20Malone=20Souza=20Cardozo?= Date: Thu, 27 Sep 2018 12:19:06 -0300 Subject: [PATCH 06/21] =?UTF-8?q?Cria=C3=A7=C3=A3o=20do=20atributo=20"olho?= =?UTF-8?q?s"=20para=20a=20classe.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- oo/pessoa.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/oo/pessoa.py b/oo/pessoa.py index 08e59d62d..9a6d53bda 100644 --- a/oo/pessoa.py +++ b/oo/pessoa.py @@ -1,4 +1,6 @@ class Pessoa: + olhos = 2 + def __init__(self, *filhos, nome=None, idade=35): self.idade = idade self.nome = nome @@ -20,5 +22,12 @@ def cumprimentar(self): print(filho.nome) malone.sobrenome='Souza' del malone.filhos + malone.olhos = 1 + del malone.olhos print(malone.__dict__) print(cecil.__dict__) + Pessoa.olhos = 3 + print(Pessoa.olhos) + print(malone.olhos) + print(cecil.olhos) + print(id(Pessoa.olhos), id(malone.olhos), id(cecil.olhos)) From 11b879fba631204a1c23962585bbc5335c28bfe9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9cil=20Malone=20Souza=20Cardozo?= Date: Thu, 27 Sep 2018 12:35:07 -0300 Subject: [PATCH 07/21] =?UTF-8?q?Cria=C3=A7=C3=A3o=20de=20m=C3=A9todos=20d?= =?UTF-8?q?e=20classe.?= 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 9a6d53bda..9f0def98f 100644 --- a/oo/pessoa.py +++ b/oo/pessoa.py @@ -9,6 +9,14 @@ 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_class(cls): + return f'{cls} - olhos {cls.olhos}' + if __name__ == '__main__': cecil = Pessoa(nome='Cécil') @@ -31,3 +39,5 @@ def cumprimentar(self): print(malone.olhos) print(cecil.olhos) print(id(Pessoa.olhos), id(malone.olhos), id(cecil.olhos)) + print(Pessoa.metodo_estatico(), malone.metodo_estatico()) + print(Pessoa.nome_e_atributos_de_class(), malone.nome_e_atributos_de_class()) From 668c74f77ac41acf454c658011ddd19212bd9af1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9cil=20Malone=20Souza=20Cardozo?= Date: Thu, 27 Sep 2018 16:09:51 -0300 Subject: [PATCH 08/21] =?UTF-8?q?Cria=C3=A7=C3=A3o=20do=20m=C3=B3dulo=20ca?= =?UTF-8?q?rro=20com=20exemplos=20de=20Composi=C3=A7=C3=A3o.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- oo/carro.py | 147 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 147 insertions(+) create mode 100644 oo/carro.py diff --git a/oo/carro.py b/oo/carro.py new file mode 100644 index 000000000..04a11d873 --- /dev/null +++ b/oo/carro.py @@ -0,0 +1,147 @@ +""" +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 controlar 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 Motor + >>> motor = Motor() + >>> motor.velocidade + 0 + >>> motor.acelerar() + >>> motor.velocidade + 1 + >>> motor.acelerar() + >>> motor.velocidade + 2 + >>> 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' + >>> # Testando Carro + >>> 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.direcao = direcao + self.motor = motor + + 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' +LESTE = 'Leste' +SUL = 'Sul' +OESTE = 'Oeste' + + +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) From 991510d6e9d05f595982b662df90e4ca95c4702b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9cil=20Malone=20Souza=20Cardozo?= Date: Thu, 27 Sep 2018 16:27:49 -0300 Subject: [PATCH 09/21] =?UTF-8?q?Criando=20class=20Homem=20para=20demonstr?= =?UTF-8?q?ar=20Heran=C3=A7a.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- fase.py | 6 +++--- oo/pessoa.py | 11 ++++++++++- 2 files changed, 13 insertions(+), 4 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 9f0def98f..f3bfc217d 100644 --- a/oo/pessoa.py +++ b/oo/pessoa.py @@ -18,8 +18,12 @@ def nome_e_atributos_de_class(cls): return f'{cls} - olhos {cls.olhos}' +class Homem(Pessoa): + pass + + if __name__ == '__main__': - cecil = Pessoa(nome='Cécil') + cecil = Homem(nome='Cécil') malone = Pessoa(cecil, nome='Malone') print(Pessoa.cumprimentar(malone)) print(id(malone)) @@ -41,3 +45,8 @@ def nome_e_atributos_de_class(cls): print(id(Pessoa.olhos), id(malone.olhos), id(cecil.olhos)) print(Pessoa.metodo_estatico(), malone.metodo_estatico()) print(Pessoa.nome_e_atributos_de_class(), malone.nome_e_atributos_de_class()) + pessoa=Pessoa('Anonimo') + print(isinstance(pessoa, Pessoa)) + print(isinstance(pessoa, Homem)) + print(isinstance(cecil, Pessoa)) + print(isinstance(cecil, Homem)) From 32686150a2ca9663b4911617745a18e56db431cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9cil=20Malone=20Souza=20Cardozo?= Date: Thu, 27 Sep 2018 17:01:42 -0300 Subject: [PATCH 10/21] =?UTF-8?q?Criando=20m=C3=B3dulo=20test=5Fcarro=20pa?= =?UTF-8?q?ra=20demonstrar=20o=20unittest.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 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..eaec4e017 --- /dev/null +++ b/oo/test_carro.py @@ -0,0 +1,14 @@ +from unittest import TestCase + +from oo.carro import Motor + + +class CarroTestCase(TestCase): + def test_velocidade_inicial(self): + motor = Motor() + self.assertEqual(0, motor.velocidade) + + def test_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 5d1dfd248f5c66cd6681eb139ac016943d1c7e83 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9cil=20Malone=20Souza=20Cardozo?= Date: Fri, 28 Sep 2018 10:25:44 -0300 Subject: [PATCH 11/21] Sobrescrita de classe. --- atores.py | 6 +++--- oo/pessoa.py | 8 ++++++-- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/atores.py b/atores.py index cfc2ef5ea..ce983a50b 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' \ No newline at end of file diff --git a/oo/pessoa.py b/oo/pessoa.py index f3bfc217d..2b2224943 100644 --- a/oo/pessoa.py +++ b/oo/pessoa.py @@ -22,8 +22,12 @@ class Homem(Pessoa): pass +class Mutante(Pessoa): + olhos = 3 + + if __name__ == '__main__': - cecil = Homem(nome='Cécil') + cecil = Mutante(nome='Cécil') malone = Pessoa(cecil, nome='Malone') print(Pessoa.cumprimentar(malone)) print(id(malone)) @@ -38,7 +42,6 @@ class Homem(Pessoa): del malone.olhos print(malone.__dict__) print(cecil.__dict__) - Pessoa.olhos = 3 print(Pessoa.olhos) print(malone.olhos) print(cecil.olhos) @@ -50,3 +53,4 @@ class Homem(Pessoa): print(isinstance(pessoa, Homem)) print(isinstance(cecil, Pessoa)) print(isinstance(cecil, Homem)) + print(cecil.olhos) From 6e7cc4752c4b3ac46b521f225de0b11a3ee0556b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9cil=20Malone=20Souza=20Cardozo?= Date: Fri, 28 Sep 2018 10:34:49 -0300 Subject: [PATCH 12/21] =?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 2b2224943..00e80a0f7 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(): @@ -19,7 +19,9 @@ def nome_e_atributos_de_class(cls): 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): @@ -28,7 +30,7 @@ class Mutante(Pessoa): if __name__ == '__main__': cecil = Mutante(nome='Cécil') - malone = Pessoa(cecil, nome='Malone') + malone = Homem(cecil, nome='Malone') print(Pessoa.cumprimentar(malone)) print(id(malone)) print(malone.cumprimentar()) @@ -54,3 +56,5 @@ class Mutante(Pessoa): print(isinstance(cecil, Pessoa)) print(isinstance(cecil, Homem)) print(cecil.olhos) + print(malone.cumprimentar()) + print(cecil.cumprimentar()) From 4148b5a0b04edffaf7c32d15c7b7c7374f91f7c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9cil=20Malone=20Souza=20Cardozo?= Date: Fri, 28 Sep 2018 11:13:08 -0300 Subject: [PATCH 13/21] =?UTF-8?q?List=20Comprehension=20e=20M=C3=A9todos?= =?UTF-8?q?=20Protegidos.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- fase.py | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/fase.py b/fase.py index 1c8fd161f..eb131da00 100644 --- a/fase.py +++ b/fase.py @@ -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): """ @@ -105,3 +110,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 49f09cd06d61a5d9cb21aedf90f706e5a16afa3e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9cil=20Malone=20Souza=20Cardozo?= Date: Fri, 28 Sep 2018 11:21:35 -0300 Subject: [PATCH 14/21] Ciclo de vida de um objeto. --- fase.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/fase.py b/fase.py index eb131da00..5d728a432 100644 --- a/fase.py +++ b/fase.py @@ -91,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): From 1fc049d565f0786400b5e45b3ff3b233bf53c3ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9cil=20Malone=20Souza=20Cardozo?= Date: Fri, 28 Sep 2018 15:40:36 -0300 Subject: [PATCH 15/21] =?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 | 4 ++-- fase.py | 5 +++++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/atores.py b/atores.py index ce983a50b..e5b0b64e6 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,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): """ diff --git a/fase.py b/fase.py index 5d728a432..067bddda8 100644 --- a/fase.py +++ b/fase.py @@ -106,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 From 5c7a5efbbbee0ca129c3c8150fdb1010e5d49ece Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9cil=20Malone=20Souza=20Cardozo?= Date: Fri, 28 Sep 2018 15:50:46 -0300 Subject: [PATCH 16/21] =?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, 7 insertions(+), 2 deletions(-) diff --git a/atores.py b/atores.py index e5b0b64e6..2483e98c9 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 cea9596a874cf3fd79415a35f26a68e709aa11a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9cil=20Malone=20Souza=20Cardozo?= Date: Fri, 28 Sep 2018 16:00:37 -0300 Subject: [PATCH 17/21] Classe Passaro. --- atores.py | 5 ++++- testes/testes_atores.py | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/atores.py b/atores.py index 2483e98c9..c1ff28c23 100644 --- a/atores.py +++ b/atores.py @@ -67,6 +67,7 @@ class Obstaculo(Ator): class Porco(Ator): _caracter_ativo = '@' + _caracter_destruido = '+' class DuploLancamentoExcecao(Exception): @@ -142,4 +143,6 @@ class PassaroAmarelo(Passaro): 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 diff --git a/testes/testes_atores.py b/testes/testes_atores.py index e833eb43a..177d523e8 100644 --- a/testes/testes_atores.py +++ b/testes/testes_atores.py @@ -192,7 +192,7 @@ def assert_passaro_posicao(self, x_esperado, y_esperado, status_esperado, passar class PassaroVermelhoTests(PassaroBaseTests): """ - Classe de teste e Passaro Vermelho + Classe de teste de Passaro Vermelho """ def teste_status(self): From 0d211334ffd5513ce046917423c9809ba5f2a0b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9cil=20Malone=20Souza=20Cardozo?= Date: Fri, 28 Sep 2018 16:06:04 -0300 Subject: [PATCH 18/21] =?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 c1ff28c23..212665381 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 6c5f5feffde96eb2e7f577cac2185bb4ba9e360d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9cil=20Malone=20Souza=20Cardozo?= Date: Fri, 28 Sep 2018 16:23:38 -0300 Subject: [PATCH 19/21] =?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 ++++++++++++++-- testes/testes_atores.py | 4 +--- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/atores.py b/atores.py index 212665381..cc741eec9 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,9 +141,18 @@ 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): diff --git a/testes/testes_atores.py b/testes/testes_atores.py index 177d523e8..6e35dacfd 100644 --- a/testes/testes_atores.py +++ b/testes/testes_atores.py @@ -257,7 +257,7 @@ def teste_status(self): def teste_velocidade_escalar(self): self.assertEqual(30, PassaroAmarelo.velocidade_escalar) - def teste_lacamento_vertical(self): + def teste_lancamento_vertical(self): """ Tests de lançamento vertical. Nele, o passaro só se move verticalmente e sua posição y se matém contanstante :return: @@ -265,8 +265,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) From deb36930fe8e1dda74fd703af605ae12624272cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9cil=20Malone=20Souza=20Cardozo?= Date: Fri, 28 Sep 2018 16:31:52 -0300 Subject: [PATCH 20/21] =?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 cc741eec9..681635194 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,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' From bae4add1fccbcddc4835ddd0767754c1584e85cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9cil=20Malone=20Souza=20Cardozo?= Date: Fri, 28 Sep 2018 16:42:28 -0300 Subject: [PATCH 21/21] Final. --- atores.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/atores.py b/atores.py index 681635194..832c5dac7 100644 --- a/atores.py +++ b/atores.py @@ -107,7 +107,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,7 +124,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) @@ -139,22 +140,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'