From d26979a57cba2a2240698e450054ed70ca35bb15 Mon Sep 17 00:00:00 2001 From: fps58 Date: Tue, 31 Aug 2021 19:23:50 -0300 Subject: [PATCH 1/7] =?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 | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 OO/pessoa.py diff --git a/OO/pessoa.py b/OO/pessoa.py new file mode 100644 index 000000000..19f9101e2 --- /dev/null +++ b/OO/pessoa.py @@ -0,0 +1,15 @@ +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('Luciano') + print(Pessoa.cumprimentar(p)) + print(id(p)) + print(p.cumprimentar()) + print(p.nome) + p.nome = 'Renzo' + print(p.nome) + print(p.idade) From a7f81a5703f28d14f8c8cf5bde2b9e2cc7350b8d Mon Sep 17 00:00:00 2001 From: fps58 Date: Tue, 31 Aug 2021 19:43:57 -0300 Subject: [PATCH 2/7] Criado atributo complexo filhos --- OO/pessoa.py | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/OO/pessoa.py b/OO/pessoa.py index 19f9101e2..ab24e240c 100644 --- a/OO/pessoa.py +++ b/OO/pessoa.py @@ -1,15 +1,17 @@ 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('Luciano') - print(Pessoa.cumprimentar(p)) - print(id(p)) - print(p.cumprimentar()) - print(p.nome) - p.nome = 'Renzo' - print(p.nome) - print(p.idade) + renzo = Pessoa(nome='Renzo') + luciano = Pessoa(renzo, nome='Luciano') + print(Pessoa.cumprimentar(luciano)) + print(id(luciano)) + print(luciano.cumprimentar()) + print(luciano.nome) + print(luciano.idade) + for filho in luciano.filhos: + print(filho.nome) From 59addbf0d940ababf666eae3b10c7d8d195ae709 Mon Sep 17 00:00:00 2001 From: fps58 Date: Tue, 31 Aug 2021 20:20:03 -0300 Subject: [PATCH 3/7] =?UTF-8?q?Criadoe=20removido=20atributo=20din=C3=A2mi?= =?UTF-8?q?co=20de=20objeto=20do=20tipo=20Pessoa?= 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 ab24e240c..ec1e01ace 100644 --- a/OO/pessoa.py +++ b/OO/pessoa.py @@ -15,3 +15,7 @@ def cumprimentar(self): print(luciano.idade) for filho in luciano.filhos: print(filho.nome) + luciano.sobrenome = 'Ramalho' + del luciano.filhos + print(luciano.__dict__) + print(renzo.__dict__) From f520d7bda8a5cff143227c7766dc6af36d767388 Mon Sep 17 00:00:00 2001 From: fps58 Date: Tue, 31 Aug 2021 20:53:34 -0300 Subject: [PATCH 4/7] Criado atributo de classe olhos --- OO/pessoa.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/OO/pessoa.py b/OO/pessoa.py index ec1e01ace..3231c4403 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 @@ -17,5 +18,14 @@ def cumprimentar(self): print(filho.nome) luciano.sobrenome = 'Ramalho' del luciano.filhos + luciano.olhos = 1 + del luciano.olhos print(luciano.__dict__) print(renzo.__dict__) + Pessoa.olhos = 3 + print(Pessoa.olhos) + print(luciano.olhos) + print(renzo.olhos) + print(id(Pessoa.olhos), id(luciano.olhos), id(renzo.olhos)) + + From 05ef2ae547bc08660bdb484036c208c4c9608e94 Mon Sep 17 00:00:00 2001 From: fps58 Date: Thu, 2 Sep 2021 18:37:31 -0300 Subject: [PATCH 5/7] Implementado direcao --- OO/carro.py | 133 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 133 insertions(+) create mode 100644 OO/carro.py diff --git a/OO/carro.py b/OO/carro.py new file mode 100644 index 000000000..20d0e89d9 --- /dev/null +++ b/OO/carro.py @@ -0,0 +1,133 @@ + + + +""" +Você deve criar uma classe carro que vai possuir +dois atributos compostos por outras duas classes:? + +1) Motor +2) Direção + +O motor terá a responsabilidade de controlar a velocidade. +Ele oferece os seguintes atributos: +1) Atributo de dado velocidade +2) Método acelerar, que deverá 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.acelerar() + >>> motor.velocidade + 3 + >>> motor.frear() + >>> motor.velocidade + 1 + >>> motor.frear() + >>> 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_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' +SUL = 'Sul' +LESTE = 'Leste' +OESTE = 'Oeste' + +class Direcao: + rotacao_a_direcao_dct = { + NORTE: LESTE, LESTE: SUL, SUL: OESTE, OESTE: NORTE + } # dct = dicionário + rotacao_a_esquerda_dct = { + NORTE: OESTE, LESTE: NORTE, SUL: LESTE, OESTE: SUL + } # dct = dicionário + + def __init__(self): + self.valor = NORTE + + def girar_a_direita(self): + self.valor = self.rotacao_a_direcao_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 d11891314563cf910ea72ba270c8915ce1087492 Mon Sep 17 00:00:00 2001 From: fps58 Date: Fri, 3 Sep 2021 22:38:32 -0300 Subject: [PATCH 6/7] Implementado direcao --- OO/carro.py | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/OO/carro.py b/OO/carro.py index 20d0e89d9..f18c85cfd 100644 --- a/OO/carro.py +++ b/OO/carro.py @@ -1,6 +1,3 @@ - - - """ Você deve criar uma classe carro que vai possuir dois atributos compostos por outras duas classes:? @@ -96,6 +93,28 @@ >>> 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' From fd5eaab0eec534f403a719ba01fba69bd3b994e9 Mon Sep 17 00:00:00 2001 From: fps58 Date: Thu, 28 Oct 2021 00:57:50 -0300 Subject: [PATCH 7/7] Implementado porcos e objetos --- atores.py | 12 +++++++++--- fase.py | 35 ++++++++++++++++++++++++++++++----- 2 files changed, 39 insertions(+), 8 deletions(-) diff --git a/atores.py b/atores.py index cfc2ef5ea..62b110515 100644 --- a/atores.py +++ b/atores.py @@ -52,16 +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): diff --git a/fase.py b/fase.py index 3385175c6..9e04b4252 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_ativo(): + 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_ativo(self): + for passaro in self._passaros: + if passaro.status == ATIVO: + return True + return False +