From b512402d6ae85079e403787b0ecdc22ac4e76383 Mon Sep 17 00:00:00 2001 From: undersfx Date: Sun, 26 May 2019 12:29:22 -0300 Subject: [PATCH 01/30] Add Class 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 c62c4a79015457b4ba4d7d411bc05ce40f95ecb7 Mon Sep 17 00:00:00 2001 From: undersfx Date: Tue, 28 May 2019 21:10:28 -0300 Subject: [PATCH 02/30] =?UTF-8?q?atributos=20de=20inst=C3=A2ncia=20nome=20?= =?UTF-8?q?e=20idade?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- oo/pessoa.py | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/oo/pessoa.py b/oo/pessoa.py index e1da50e22..ad53dda28 100644 --- a/oo/pessoa.py +++ b/oo/pessoa.py @@ -1,2 +1,17 @@ class Pessoa: - pass \ No newline at end of file + def __init__(self, nome=None, idade=None): + self.nome = nome + self.idade = idade + + def cumprimentar(self): + return f'Olá {id(self)}' + +if __name__ == "__main__": + p = Pessoa('Thiago', 27) + + print(Pessoa.cumprimentar(p)) + print(p.cumprimentar()) + print(id(p)) + + print(p.nome) + print(p.idade) \ No newline at end of file From 93c7545ebded581389b2457a7da662b9eff03840 Mon Sep 17 00:00:00 2001 From: undersfx Date: Tue, 28 May 2019 21:22:00 -0300 Subject: [PATCH 03/30] criado atributo complexo filhos --- oo/pessoa.py | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/oo/pessoa.py b/oo/pessoa.py index ad53dda28..83f207cdf 100644 --- a/oo/pessoa.py +++ b/oo/pessoa.py @@ -1,17 +1,22 @@ class Pessoa: - def __init__(self, nome=None, idade=None): + def __init__(self, *filhos, nome=None, idade=None): self.nome = nome self.idade = idade + self.filhos = list(filhos) def cumprimentar(self): return f'Olá {id(self)}' if __name__ == "__main__": - p = Pessoa('Thiago', 27) + fulano = Pessoa(nome='Fulano') + ciclano = Pessoa(nome='Ciclano') + thiago = Pessoa(fulano, ciclano, nome='Thiago', idade=27) - print(Pessoa.cumprimentar(p)) - print(p.cumprimentar()) - print(id(p)) + print(Pessoa.cumprimentar(thiago)) + print(thiago.cumprimentar()) + print(id(thiago)) - print(p.nome) - print(p.idade) \ No newline at end of file + print(thiago.nome) + print(thiago.idade) + for filho in thiago.filhos: + print(filho.nome) \ No newline at end of file From 8d60d45cf581424290ec37c88ef56c5c7093bc61 Mon Sep 17 00:00:00 2001 From: undersfx Date: Tue, 28 May 2019 21:31:12 -0300 Subject: [PATCH 04/30] =?UTF-8?q?teste=20com=20atributo=20din=C3=A2mico=20?= =?UTF-8?q?sobrenome?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- oo/pessoa.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/oo/pessoa.py b/oo/pessoa.py index 83f207cdf..f5c129fec 100644 --- a/oo/pessoa.py +++ b/oo/pessoa.py @@ -12,11 +12,23 @@ def cumprimentar(self): ciclano = Pessoa(nome='Ciclano') thiago = Pessoa(fulano, ciclano, nome='Thiago', idade=27) + # Chamada de Métodos print(Pessoa.cumprimentar(thiago)) print(thiago.cumprimentar()) print(id(thiago)) + # Atributos de Instância print(thiago.nome) print(thiago.idade) + + # Atributo Complexo for filho in thiago.filhos: - print(filho.nome) \ No newline at end of file + print(filho.nome) + + # Atributo Dinâmico (Adicionado em Tempo de Execução) + thiago.sobrenome = 'Rodrigues' + print(thiago.sobrenome) + print(thiago.__dict__, end='\n\n') + print(fulano.__dict__, end='\n\n') + del thiago.sobrenome + print(thiago.__dict__, end='\n\n') \ No newline at end of file From 60e4ea6918e9aa58061ace91a3a29689a44431da Mon Sep 17 00:00:00 2001 From: undersfx Date: Fri, 31 May 2019 09:40:28 -0300 Subject: [PATCH 05/30] criado 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 f5c129fec..4d2634e98 100644 --- a/oo/pessoa.py +++ b/oo/pessoa.py @@ -1,4 +1,7 @@ class Pessoa: + #Atributo de Classe + olhos = 2 + def __init__(self, *filhos, nome=None, idade=None): self.nome = nome self.idade = idade @@ -28,7 +31,16 @@ def cumprimentar(self): # Atributo Dinâmico (Adicionado em Tempo de Execução) thiago.sobrenome = 'Rodrigues' print(thiago.sobrenome) - print(thiago.__dict__, end='\n\n') - print(fulano.__dict__, end='\n\n') + print(thiago.__dict__) + print(fulano.__dict__) del thiago.sobrenome - print(thiago.__dict__, end='\n\n') \ No newline at end of file + print(thiago.__dict__) + + #Atributo de Classe + print(Pessoa.olhos) + print(thiago.olhos) + print(thiago.__dict__) + thiago.olhos = 1 + print(thiago.__dict__) + del thiago.olhos + print(thiago.olhos) \ No newline at end of file From 81928a3a37cd6bc3813c323db25ecdadab490e61 Mon Sep 17 00:00:00 2001 From: undersfx Date: Fri, 31 May 2019 14:21:54 -0300 Subject: [PATCH 06/30] =?UTF-8?q?adiciona=20m=C3=A9todos=20est=C3=A1ticos?= =?UTF-8?q?=20e=20de=20classe?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- oo/pessoa.py | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/oo/pessoa.py b/oo/pessoa.py index 4d2634e98..7d5062a20 100644 --- a/oo/pessoa.py +++ b/oo/pessoa.py @@ -1,21 +1,34 @@ class Pessoa: - #Atributo de Classe + # Atributo de Classe olhos = 2 + # Método Inicializador def __init__(self, *filhos, nome=None, idade=None): + # Atributos de Instância self.nome = nome self.idade = idade self.filhos = list(filhos) + # Método def cumprimentar(self): return f'Olá {id(self)}' + # Método Estático + @staticmethod + def metodo_estatico(): + return 42 + + # Método de Classe + @classmethod + def metodo_de_classe(cls): + return f'Classe: {cls}, olhos: {cls.olhos}' + if __name__ == "__main__": fulano = Pessoa(nome='Fulano') ciclano = Pessoa(nome='Ciclano') thiago = Pessoa(fulano, ciclano, nome='Thiago', idade=27) - # Chamada de Métodos + # Métodos print(Pessoa.cumprimentar(thiago)) print(thiago.cumprimentar()) print(id(thiago)) @@ -43,4 +56,12 @@ def cumprimentar(self): thiago.olhos = 1 print(thiago.__dict__) del thiago.olhos - print(thiago.olhos) \ No newline at end of file + print(thiago.olhos) + + # Métodos Estáticos + print(Pessoa.metodo_estatico()) + print(thiago.metodo_estatico()) + + # Métodos de Classe + print(Pessoa.metodo_de_classe()) + print(thiago.metodo_de_classe()) \ No newline at end of file From 3a2dea3519b9204be35a18ce6fe1eab09a1f9a8d Mon Sep 17 00:00:00 2001 From: undersfx Date: Wed, 18 Sep 2019 23:48:18 -0300 Subject: [PATCH 07/30] =?UTF-8?q?Adiciona=20formata=C3=A7=C3=A3o?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- oo/pessoa.py | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/oo/pessoa.py b/oo/pessoa.py index 7d5062a20..7024fb64a 100644 --- a/oo/pessoa.py +++ b/oo/pessoa.py @@ -1,10 +1,10 @@ class Pessoa: - # Atributo de Classe + # Atributo de Dado (Classe) olhos = 2 # Método Inicializador def __init__(self, *filhos, nome=None, idade=None): - # Atributos de Instância + # Atributos de Dado (Instância) self.nome = nome self.idade = idade self.filhos = list(filhos) @@ -15,7 +15,7 @@ def cumprimentar(self): # Método Estático @staticmethod - def metodo_estatico(): + def metodo_estatico(): # Independe de self (Instância) return 42 # Método de Classe @@ -24,6 +24,7 @@ def metodo_de_classe(cls): return f'Classe: {cls}, olhos: {cls.olhos}' if __name__ == "__main__": + #Testes fulano = Pessoa(nome='Fulano') ciclano = Pessoa(nome='Ciclano') thiago = Pessoa(fulano, ciclano, nome='Thiago', idade=27) @@ -31,23 +32,23 @@ def metodo_de_classe(cls): # Métodos print(Pessoa.cumprimentar(thiago)) print(thiago.cumprimentar()) - print(id(thiago)) + print(id(thiago), '\n') # Atributos de Instância print(thiago.nome) - print(thiago.idade) + print(thiago.idade, '\n') # Atributo Complexo for filho in thiago.filhos: print(filho.nome) - + # Atributo Dinâmico (Adicionado em Tempo de Execução) thiago.sobrenome = 'Rodrigues' - print(thiago.sobrenome) + print('\n', thiago.sobrenome) print(thiago.__dict__) print(fulano.__dict__) del thiago.sobrenome - print(thiago.__dict__) + print(thiago.__dict__, '\n') #Atributo de Classe print(Pessoa.olhos) @@ -56,12 +57,13 @@ def metodo_de_classe(cls): thiago.olhos = 1 print(thiago.__dict__) del thiago.olhos - print(thiago.olhos) + print(thiago.__dict__) + print(thiago.olhos, '\n') # Métodos Estáticos print(Pessoa.metodo_estatico()) - print(thiago.metodo_estatico()) + print(thiago.metodo_estatico(), '\n') - # Métodos de Classe + # Métodos de Classe print(Pessoa.metodo_de_classe()) - print(thiago.metodo_de_classe()) \ No newline at end of file + print(thiago.metodo_de_classe(), '\n') \ No newline at end of file From 49aa25f2da0c3d1ca77d975289b08748045225f3 Mon Sep 17 00:00:00 2001 From: undersfx Date: Thu, 19 Sep 2019 00:11:34 -0300 Subject: [PATCH 08/30] =?UTF-8?q?Adiciona=20documenta=C3=A7=C3=A3o=20e=20d?= =?UTF-8?q?octest=20da=20classe=20Carro?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- oo/carro.py | 97 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 oo/carro.py diff --git a/oo/carro.py b/oo/carro.py new file mode 100644 index 000000000..0574c2f08 --- /dev/null +++ b/oo/carro.py @@ -0,0 +1,97 @@ +""" +Criar uma casse carro que possua dois atributos compostos por outras duas classes: + +1 Motor +2 Direção + +Motor: Controla a velocidade do carro. +Atributos de dado: Velocidade +Métodos: Acelerar (+1 velocidade), Frear (-2 velocidade) + +Direção: Controlar a direção do carro. +Atributos de dado: Direção + +4 pontos: + N +O L + S + +Métodos: Virar a Direita, Virar a Esquerda + +Exemplos: + +# Doctest 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 + +# Doctest Direção +>>> direcao = Direcao() +>>> direcao.valor +"Norte" +>>> direcao.virar_a_direita() +>>> direcao.valor +"Leste" +>>> direcao.virar_a_direita() +>>> direcao.valor +"Sul" +>>> direcao.virar_a_direita() +>>> direcao.valor +"Oeste" +>>> direcao.virar_a_direita() +>>> direcao.valor +"Norte" +>>> direcao.virar_a_esquerda() +>>> direcao.valor +"Oeste" +>>> direcao.virar_a_esquerda() +>>> direcao.valor +"Sul" +>>> direcao.virar_a_esquerda() +>>> direcao.valor +"Leste" +>>> direcao.virar_a_esquerda() +>>> direcao.valor +"Norte" + +# Dcotest 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_direção() +"Norte" +>>> carro.virar_a_direita() +>>> carro.calcular_direção() +"Leste" +>>> carro.virar_a_esquerda() +>>> carro.calcular_direção() +"Norte" +>>> carro.virar_a_esquerda() +>>> carro.calcular_direção() +"Oeste" + +""" \ No newline at end of file From 06cfdc6acec64516bf31d93ee03463d37f3c5da5 Mon Sep 17 00:00:00 2001 From: undersfx Date: Fri, 20 Sep 2019 00:50:48 -0300 Subject: [PATCH 09/30] Implementa classe Motor --- oo/carro.py | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/oo/carro.py b/oo/carro.py index 0574c2f08..954e63329 100644 --- a/oo/carro.py +++ b/oo/carro.py @@ -9,13 +9,9 @@ Métodos: Acelerar (+1 velocidade), Frear (-2 velocidade) Direção: Controlar a direção do carro. -Atributos de dado: Direção - -4 pontos: - N -O L - S - +Atributos de dado: Direção 4 pontos: N + O L + S Métodos: Virar a Direita, Virar a Esquerda Exemplos: @@ -94,4 +90,16 @@ >>> carro.calcular_direção() "Oeste" -""" \ No newline at end of file +""" + +class Motor: + velocidade = 0 + + def acelerar(self, incremento=1): + self.velocidade += incremento + + def frear(self, decremento=2): + if self.velocidade >= 2: + self.velocidade -= decremento + else: + self.velocidade = 0 \ No newline at end of file From 380c69bc1e415da511f728386f52b714b08747ee Mon Sep 17 00:00:00 2001 From: undersfx Date: Fri, 20 Sep 2019 01:12:32 -0300 Subject: [PATCH 10/30] Implementa a classe Direcao --- oo/carro.py | 41 +++++++++++++++++++++++++++-------------- 1 file changed, 27 insertions(+), 14 deletions(-) diff --git a/oo/carro.py b/oo/carro.py index 954e63329..a7f91227b 100644 --- a/oo/carro.py +++ b/oo/carro.py @@ -39,31 +39,31 @@ # Doctest Direção >>> direcao = Direcao() >>> direcao.valor -"Norte" +'Norte' >>> direcao.virar_a_direita() >>> direcao.valor -"Leste" +'Leste' >>> direcao.virar_a_direita() >>> direcao.valor -"Sul" +'Sul' >>> direcao.virar_a_direita() >>> direcao.valor -"Oeste" +'Oeste' >>> direcao.virar_a_direita() >>> direcao.valor -"Norte" +'Norte' >>> direcao.virar_a_esquerda() >>> direcao.valor -"Oeste" +'Oeste' >>> direcao.virar_a_esquerda() >>> direcao.valor -"Sul" +'Sul' >>> direcao.virar_a_esquerda() >>> direcao.valor -"Leste" +'Leste' >>> direcao.virar_a_esquerda() >>> direcao.valor -"Norte" +'Norte' # Dcotest Carro >>> carro = Carro(direcao, motor) @@ -79,16 +79,16 @@ >>> carro.calcular_velocidade() 0 >>> carro.calcular_direção() -"Norte" +'Norte' >>> carro.virar_a_direita() >>> carro.calcular_direção() -"Leste" +'Leste' >>> carro.virar_a_esquerda() >>> carro.calcular_direção() -"Norte" +'Norte' >>> carro.virar_a_esquerda() >>> carro.calcular_direção() -"Oeste" +'Oeste' """ @@ -102,4 +102,17 @@ def frear(self, decremento=2): if self.velocidade >= 2: self.velocidade -= decremento else: - self.velocidade = 0 \ No newline at end of file + self.velocidade = 0 + +class Direcao: + valor = "Norte" + direcoes = ("Norte", "Leste", "Sul", "Oeste") + + def virar_a_direita(self): + i = (self.direcoes.index(self.valor) + 1) % 4 + self.valor = self.direcoes[i] + + def virar_a_esquerda(self): + i = self.direcoes.index(self.valor) - 1 + if i < 0: i + 4 + self.valor = self.direcoes[i] \ No newline at end of file From 5cde264fd18c0741c7d06989916810f459ad5761 Mon Sep 17 00:00:00 2001 From: undersfx Date: Fri, 20 Sep 2019 02:33:09 -0300 Subject: [PATCH 11/30] Implementa a classe Carro --- oo/carro.py | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/oo/carro.py b/oo/carro.py index a7f91227b..e45240431 100644 --- a/oo/carro.py +++ b/oo/carro.py @@ -115,4 +115,33 @@ def virar_a_direita(self): def virar_a_esquerda(self): i = self.direcoes.index(self.valor) - 1 if i < 0: i + 4 - self.valor = self.direcoes[i] \ No newline at end of file + self.valor = self.direcoes[i] + +class Carro: + def __init__(self, direcao, motor): + self.direcao = direcao + self.motor = motor + + def calcular_velocidade(self): + return self.motor.velocidade + + def acelerar(self, incremento=None): + if incremento: + self.motor.acelerar(incremento) + else: + self.motor.acelerar() + + def frear(self, decremento=None): + if decremento: + self.motor.frear(decremento) + else: + self.motor.frear() + + def calcular_direção(self): + return self.direcao.valor + + def virar_a_direita(self): + self.direcao.virar_a_direita() + + def virar_a_esquerda(self): + self.direcao.virar_a_esquerda() \ No newline at end of file From 6b39e61b6ee84fe378f31d3e4887a9a703d4e812 Mon Sep 17 00:00:00 2001 From: undersfx Date: Fri, 20 Sep 2019 03:07:43 -0300 Subject: [PATCH 12/30] Melhorias nas classes Direcao e Motor --- oo/carro.py | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/oo/carro.py b/oo/carro.py index e45240431..84fb43d37 100644 --- a/oo/carro.py +++ b/oo/carro.py @@ -93,29 +93,28 @@ """ class Motor: - velocidade = 0 + def __init__(self): + self.velocidade = 0 def acelerar(self, incremento=1): self.velocidade += incremento def frear(self, decremento=2): - if self.velocidade >= 2: - self.velocidade -= decremento - else: - self.velocidade = 0 + self.velocidade = max(0, self.velocidade - decremento) class Direcao: - valor = "Norte" - direcoes = ("Norte", "Leste", "Sul", "Oeste") + DIRECOES = ("Norte", "Leste", "Sul", "Oeste") + + def __init__(self): + self.valor = self.DIRECOES[0] def virar_a_direita(self): - i = (self.direcoes.index(self.valor) + 1) % 4 - self.valor = self.direcoes[i] + i = (self.DIRECOES.index(self.valor) + 1) % len(self.DIRECOES) + self.valor = self.DIRECOES[i] def virar_a_esquerda(self): - i = self.direcoes.index(self.valor) - 1 - if i < 0: i + 4 - self.valor = self.direcoes[i] + i = (self.DIRECOES.index(self.valor) - 1) % len(self.DIRECOES) + self.valor = self.DIRECOES[i] class Carro: def __init__(self, direcao, motor): From 5f1b22c4d8037522625426f9f0b1e6674a6bf04e Mon Sep 17 00:00:00 2001 From: Thiago Under Date: Fri, 20 Sep 2019 11:49:58 -0300 Subject: [PATCH 13/30] =?UTF-8?q?Implementa=20m=C3=A9todos=20de=20adi?= =?UTF-8?q?=C3=A7=C3=A3o=20de=20atores?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- fase.py | 6 +++--- 1 file changed, 3 insertions(+), 3 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): """ From 04ca3497a99ab15ce3e700404d652e566c41595c Mon Sep 17 00:00:00 2001 From: Thiago Under Date: Fri, 20 Sep 2019 13:47:03 -0300 Subject: [PATCH 14/30] Implementa classe Homem --- oo/pessoa.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/oo/pessoa.py b/oo/pessoa.py index 7024fb64a..e808cbd0e 100644 --- a/oo/pessoa.py +++ b/oo/pessoa.py @@ -23,6 +23,9 @@ def metodo_estatico(): # Independe de self (Instância) def metodo_de_classe(cls): return f'Classe: {cls}, olhos: {cls.olhos}' +class Homem(Pessoa): + pass + if __name__ == "__main__": #Testes fulano = Pessoa(nome='Fulano') @@ -66,4 +69,12 @@ def metodo_de_classe(cls): # Métodos de Classe print(Pessoa.metodo_de_classe()) - print(thiago.metodo_de_classe(), '\n') \ No newline at end of file + print(thiago.metodo_de_classe(), '\n') + + #Classe Herdeira de Pessoa + renzo = Homem(nome='Renzo') + luciano = Pessoa(nome='Luciano') + print(isinstance(renzo, Pessoa)) + print(isinstance(renzo, Homem)) + print(isinstance(luciano, Pessoa)) + print(isinstance(luciano, Homem)) \ No newline at end of file From b8aa551f27be22b6c1c7281bfa780d4d90d57aaa Mon Sep 17 00:00:00 2001 From: Thiago Under Date: Fri, 20 Sep 2019 14:42:24 -0300 Subject: [PATCH 15/30] Implementa Testes ao Modulo Carro --- oo/test_carro.py | 55 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 oo/test_carro.py diff --git a/oo/test_carro.py b/oo/test_carro.py new file mode 100644 index 000000000..ecea21fb7 --- /dev/null +++ b/oo/test_carro.py @@ -0,0 +1,55 @@ +from unittest import TestCase +from unittest import main as unittest_main + +try: + from oo.carro import Motor, Direcao, Carro +except ModuleNotFoundError: + from carro import Motor, Direcao, Carro + +class MotorTesteCase(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) + + def test_frear(self): + motor = Motor() + motor.acelerar() + motor.frear() + self.assertEqual(0, motor.velocidade) + +class DirecaoTesteCase(TestCase): + def test_direcao_inicial(self): + direcao = Direcao() + self.assertEqual('Norte', direcao.valor) + + def test_virar_a_direita(self): + direcao = Direcao() + self.assertEqual('Norte', direcao.valor) + direcao.virar_a_direita() + self.assertEqual('Leste', direcao.valor) + direcao.virar_a_direita() + self.assertEqual('Sul', direcao.valor) + direcao.virar_a_direita() + self.assertEqual('Oeste', direcao.valor) + direcao.virar_a_direita() + self.assertEqual('Norte', direcao.valor) + + def test_virar_a_esquerda(self): + direcao = Direcao() + self.assertEqual('Norte', direcao.valor) + direcao.virar_a_esquerda() + self.assertEqual('Oeste', direcao.valor) + direcao.virar_a_esquerda() + self.assertEqual('Sul', direcao.valor) + direcao.virar_a_esquerda() + self.assertEqual('Leste', direcao.valor) + direcao.virar_a_esquerda() + self.assertEqual('Norte', direcao.valor) + +if __name__ == "__main__": + unittest_main() From cb9a05be4a282e913503d6510af94c649bb114e8 Mon Sep 17 00:00:00 2001 From: Thiago Under Date: Fri, 20 Sep 2019 18:55:36 -0300 Subject: [PATCH 16/30] Implementa sobrescrita de atributo de Atores --- atores.py | 6 +++--- oo/pessoa.py | 12 ++++++++++-- 2 files changed, 13 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 e808cbd0e..091d05836 100644 --- a/oo/pessoa.py +++ b/oo/pessoa.py @@ -26,6 +26,9 @@ def metodo_de_classe(cls): class Homem(Pessoa): pass +class Mutante(Pessoa): + olhos = 3 + if __name__ == "__main__": #Testes fulano = Pessoa(nome='Fulano') @@ -71,10 +74,15 @@ class Homem(Pessoa): print(Pessoa.metodo_de_classe()) print(thiago.metodo_de_classe(), '\n') - #Classe Herdeira de Pessoa + # Classe Herdeira de Pessoa renzo = Homem(nome='Renzo') luciano = Pessoa(nome='Luciano') print(isinstance(renzo, Pessoa)) print(isinstance(renzo, Homem)) print(isinstance(luciano, Pessoa)) - print(isinstance(luciano, Homem)) \ No newline at end of file + print(isinstance(luciano, Homem), '\n') + + # Sobrescrita de Atributo + print(renzo.olhos) + mutante = Mutante(nome='Mutante') + print(mutante.olhos, '\n') \ No newline at end of file From f8d7c67793587506b9f486eb8d89d0fb825271a3 Mon Sep 17 00:00:00 2001 From: Thiago Under Date: Fri, 20 Sep 2019 19:08:51 -0300 Subject: [PATCH 17/30] =?UTF-8?q?Implementa=20sobrescrita=20de=20m=C3=A9to?= =?UTF-8?q?dos?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- oo/pessoa.py | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/oo/pessoa.py b/oo/pessoa.py index 091d05836..a8337d0bc 100644 --- a/oo/pessoa.py +++ b/oo/pessoa.py @@ -1,3 +1,8 @@ +""" + Sandbox para brincar com conceitos de classes em Python +""" + + class Pessoa: # Atributo de Dado (Classe) olhos = 2 @@ -11,7 +16,7 @@ def __init__(self, *filhos, nome=None, idade=None): # Método def cumprimentar(self): - return f'Olá {id(self)}' + return f'Olá meu nome é {self.nome}' # Método Estático @staticmethod @@ -23,12 +28,17 @@ def metodo_estatico(): # Independe de self (Instância) def metodo_de_classe(cls): return f'Classe: {cls}, olhos: {cls.olhos}' -class Homem(Pessoa): - pass -class Mutante(Pessoa): +class Mutante(Pessoa): # Herança + # Sobrescrita de Atributo de dado olhos = 3 +class Homem(Pessoa): + # Sobrescrita de método + def cumprimentar(self): + cumprimento_de_classe = super().cumprimentar() # Executar método da classe Pai + return f'{cumprimento_de_classe}. Aperto de mão.' + if __name__ == "__main__": #Testes fulano = Pessoa(nome='Fulano') @@ -85,4 +95,8 @@ class Mutante(Pessoa): # Sobrescrita de Atributo print(renzo.olhos) mutante = Mutante(nome='Mutante') - print(mutante.olhos, '\n') \ No newline at end of file + print(mutante.olhos, '\n') + + # Sobrescrita de Método + print(renzo.cumprimentar()) + print(mutante.cumprimentar()) \ No newline at end of file From 84120e4b9f7e6ff6b05f9e5f98f333d842cef526 Mon Sep 17 00:00:00 2001 From: Thiago Under Date: Fri, 20 Sep 2019 19:35:49 -0300 Subject: [PATCH 18/30] =?UTF-8?q?Implementa=20padr=C3=A3o=20aos=20testes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- testes/{atores_testes.py => testes_atores.py} | 0 testes/{fase_testes.py => testes_fase.py} | 0 testes/{integracao.py => testes_integracao.py} | 0 3 files changed, 0 insertions(+), 0 deletions(-) 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/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 539d30d481774f39d595e0118dd97beca92fea5d Mon Sep 17 00:00:00 2001 From: undersfx Date: Sat, 21 Sep 2019 22:11:13 -0300 Subject: [PATCH 19/30] Adiciona Ambiente Virtual de Dev --- .gitignore | 3 ++ Pipfile | 13 ++++++ Pipfile.lock | 124 +++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 140 insertions(+) create mode 100644 Pipfile create mode 100644 Pipfile.lock diff --git a/.gitignore b/.gitignore index 6220a9500..0ea36352d 100644 --- a/.gitignore +++ b/.gitignore @@ -8,6 +8,7 @@ __pycache__/ # Distribution / packaging .Python env/ +.venv/ bin/ build/ develop-eggs/ @@ -53,3 +54,5 @@ coverage.xml # Sphinx documentation docs/_build/ +# Editor +.vscode/ \ No newline at end of file diff --git a/Pipfile b/Pipfile new file mode 100644 index 000000000..da5891dfd --- /dev/null +++ b/Pipfile @@ -0,0 +1,13 @@ +[[source]] +name = "pypi" +url = "https://pypi.org/simple" +verify_ssl = true + +[dev-packages] +pep8 = "*" +pylint = "*" + +[packages] + +[requires] +python_version = "3.7" diff --git a/Pipfile.lock b/Pipfile.lock new file mode 100644 index 000000000..023a49ee2 --- /dev/null +++ b/Pipfile.lock @@ -0,0 +1,124 @@ +{ + "_meta": { + "hash": { + "sha256": "c611c4a2bf2a0b904c4b3924cc72e02dbcef93494528712c526054ef9e3f2d37" + }, + "pipfile-spec": 6, + "requires": { + "python_version": "3.7" + }, + "sources": [ + { + "name": "pypi", + "url": "https://pypi.org/simple", + "verify_ssl": true + } + ] + }, + "default": {}, + "develop": { + "astroid": { + "hashes": [ + "sha256:6560e1e1749f68c64a4b5dee4e091fce798d2f0d84ebe638cf0e0585a343acf4", + "sha256:b65db1bbaac9f9f4d190199bb8680af6f6f84fd3769a5ea883df8a91fe68b4c4" + ], + "version": "==2.2.5" + }, + "colorama": { + "hashes": [ + "sha256:05eed71e2e327246ad6b38c540c4a3117230b19679b875190486ddd2d721422d", + "sha256:f8ac84de7840f5b9c4e3347b3c1eaa50f7e49c2b07596221daec5edaabbd7c48" + ], + "markers": "sys_platform == 'win32'", + "version": "==0.4.1" + }, + "isort": { + "hashes": [ + "sha256:54da7e92468955c4fceacd0c86bd0ec997b0e1ee80d97f67c35a78b719dccab1", + "sha256:6e811fcb295968434526407adb8796944f1988c5b65e8139058f2014cbe100fd" + ], + "version": "==4.3.21" + }, + "lazy-object-proxy": { + "hashes": [ + "sha256:02b260c8deb80db09325b99edf62ae344ce9bc64d68b7a634410b8e9a568edbf", + "sha256:18f9c401083a4ba6e162355873f906315332ea7035803d0fd8166051e3d402e3", + "sha256:1f2c6209a8917c525c1e2b55a716135ca4658a3042b5122d4e3413a4030c26ce", + "sha256:2f06d97f0ca0f414f6b707c974aaf8829c2292c1c497642f63824119d770226f", + "sha256:616c94f8176808f4018b39f9638080ed86f96b55370b5a9463b2ee5c926f6c5f", + "sha256:63b91e30ef47ef68a30f0c3c278fbfe9822319c15f34b7538a829515b84ca2a0", + "sha256:77b454f03860b844f758c5d5c6e5f18d27de899a3db367f4af06bec2e6013a8e", + "sha256:83fe27ba321e4cfac466178606147d3c0aa18e8087507caec78ed5a966a64905", + "sha256:84742532d39f72df959d237912344d8a1764c2d03fe58beba96a87bfa11a76d8", + "sha256:874ebf3caaf55a020aeb08acead813baf5a305927a71ce88c9377970fe7ad3c2", + "sha256:9f5caf2c7436d44f3cec97c2fa7791f8a675170badbfa86e1992ca1b84c37009", + "sha256:a0c8758d01fcdfe7ae8e4b4017b13552efa7f1197dd7358dc9da0576f9d0328a", + "sha256:a4def978d9d28cda2d960c279318d46b327632686d82b4917516c36d4c274512", + "sha256:ad4f4be843dace866af5fc142509e9b9817ca0c59342fdb176ab6ad552c927f5", + "sha256:ae33dd198f772f714420c5ab698ff05ff900150486c648d29951e9c70694338e", + "sha256:b4a2b782b8a8c5522ad35c93e04d60e2ba7f7dcb9271ec8e8c3e08239be6c7b4", + "sha256:c462eb33f6abca3b34cdedbe84d761f31a60b814e173b98ede3c81bb48967c4f", + "sha256:fd135b8d35dfdcdb984828c84d695937e58cc5f49e1c854eb311c4d6aa03f4f1" + ], + "version": "==1.4.2" + }, + "mccabe": { + "hashes": [ + "sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42", + "sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f" + ], + "version": "==0.6.1" + }, + "pep8": { + "hashes": [ + "sha256:b22cfae5db09833bb9bd7c8463b53e1a9c9b39f12e304a8d0bba729c501827ee", + "sha256:fe249b52e20498e59e0b5c5256aa52ee99fc295b26ec9eaa85776ffdb9fe6374" + ], + "index": "pypi", + "version": "==1.7.1" + }, + "pylint": { + "hashes": [ + "sha256:5d77031694a5fb97ea95e828c8d10fc770a1df6eb3906067aaed42201a8a6a09", + "sha256:723e3db49555abaf9bf79dc474c6b9e2935ad82230b10c1138a71ea41ac0fff1" + ], + "index": "pypi", + "version": "==2.3.1" + }, + "six": { + "hashes": [ + "sha256:3350809f0555b11f552448330d0b52d5f24c91a322ea4a15ef22629740f3761c", + "sha256:d16a0141ec1a18405cd4ce8b4613101da75da0e9a7aec5bdd4fa804d0e0eba73" + ], + "version": "==1.12.0" + }, + "typed-ast": { + "hashes": [ + "sha256:18511a0b3e7922276346bcb47e2ef9f38fb90fd31cb9223eed42c85d1312344e", + "sha256:262c247a82d005e43b5b7f69aff746370538e176131c32dda9cb0f324d27141e", + "sha256:2b907eb046d049bcd9892e3076c7a6456c93a25bebfe554e931620c90e6a25b0", + "sha256:354c16e5babd09f5cb0ee000d54cfa38401d8b8891eefa878ac772f827181a3c", + "sha256:4e0b70c6fc4d010f8107726af5fd37921b666f5b31d9331f0bd24ad9a088e631", + "sha256:630968c5cdee51a11c05a30453f8cd65e0cc1d2ad0d9192819df9978984529f4", + "sha256:66480f95b8167c9c5c5c87f32cf437d585937970f3fc24386f313a4c97b44e34", + "sha256:71211d26ffd12d63a83e079ff258ac9d56a1376a25bc80b1cdcdf601b855b90b", + "sha256:95bd11af7eafc16e829af2d3df510cecfd4387f6453355188342c3e79a2ec87a", + "sha256:bc6c7d3fa1325a0c6613512a093bc2a2a15aeec350451cbdf9e1d4bffe3e3233", + "sha256:cc34a6f5b426748a507dd5d1de4c1978f2eb5626d51326e43280941206c209e1", + "sha256:d755f03c1e4a51e9b24d899561fec4ccaf51f210d52abdf8c07ee2849b212a36", + "sha256:d7c45933b1bdfaf9f36c579671fec15d25b06c8398f113dab64c18ed1adda01d", + "sha256:d896919306dd0aa22d0132f62a1b78d11aaf4c9fc5b3410d3c666b818191630a", + "sha256:ffde2fbfad571af120fcbfbbc61c72469e72f550d676c3342492a9dfdefb8f12" + ], + "markers": "implementation_name == 'cpython'", + "version": "==1.4.0" + }, + "wrapt": { + "hashes": [ + "sha256:3d02935c7056698864de866b791c9f5cf189ae7cbe812fceaa52aa9860d839db", + "sha256:565a021fd19419476b9362b05eeaa094178de64f8361e44468f9e9d7843901e1" + ], + "version": "==1.11.2" + } + } +} From 2caef37edd61c2f655087c911a4ba766fd63bada Mon Sep 17 00:00:00 2001 From: Thiago Under Date: Sun, 22 Sep 2019 20:32:37 -0300 Subject: [PATCH 20/30] =?UTF-8?q?Implementa=20m=C3=A9todo=20status=20de=20?= =?UTF-8?q?Fase?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Pipfile.lock | 9 --------- fase.py | 19 +++++++++++++++++-- 2 files changed, 17 insertions(+), 11 deletions(-) diff --git a/Pipfile.lock b/Pipfile.lock index 023a49ee2..ba8a00d80 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -24,14 +24,6 @@ ], "version": "==2.2.5" }, - "colorama": { - "hashes": [ - "sha256:05eed71e2e327246ad6b38c540c4a3117230b19679b875190486ddd2d721422d", - "sha256:f8ac84de7840f5b9c4e3347b3c1eaa50f7e49c2b07596221daec5edaabbd7c48" - ], - "markers": "sys_platform == 'win32'", - "version": "==0.4.1" - }, "isort": { "hashes": [ "sha256:54da7e92468955c4fceacd0c86bd0ec997b0e1ee80d97f67c35a78b719dccab1", @@ -115,7 +107,6 @@ }, "wrapt": { "hashes": [ - "sha256:3d02935c7056698864de866b791c9f5cf189ae7cbe812fceaa52aa9860d839db", "sha256:565a021fd19419476b9362b05eeaa094178de64f8361e44468f9e9d7843901e1" ], "version": "==1.11.2" diff --git a/fase.py b/fase.py index 1c8fd161f..7dd9170bb 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_passaro_ativo(): + return EM_ANDAMENTO + else: + return DERROTA def lancar(self, angulo, tempo): """ @@ -88,7 +93,6 @@ def lancar(self, angulo, tempo): """ pass - def calcular_pontos(self, tempo): """ Lógica que retorna os pontos a serem exibidos na tela. @@ -105,3 +109,14 @@ 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_passaro_ativo(self): + for passaro in self._passaros: + if passaro.status == ATIVO: + return True + return False \ No newline at end of file From 5937c453107ac7e5504bad95252a31857add6000 Mon Sep 17 00:00:00 2001 From: Thiago Under Date: Mon, 23 Sep 2019 02:31:04 -0300 Subject: [PATCH 21/30] =?UTF-8?q?Implementa=20m=C3=A9todo=20lancar=20em=20?= =?UTF-8?q?Fase?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- fase.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/fase.py b/fase.py index 7dd9170bb..9c67ac375 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 7ea4471d8b5a86648b863867bf1560ec29f805b7 Mon Sep 17 00:00:00 2001 From: Thiago Under Date: Mon, 23 Sep 2019 02:52:01 -0300 Subject: [PATCH 22/30] =?UTF-8?q?Implementa=20m=C3=A9todo=20calcular=5Fpon?= =?UTF-8?q?tos?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- fase.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/fase.py b/fase.py index 9c67ac375..799192fc5 100644 --- a/fase.py +++ b/fase.py @@ -105,6 +105,13 @@ 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 d3f1e678b03c8d504c4e85c9cf3a6d79a8ba4af6 Mon Sep 17 00:00:00 2001 From: undersfx Date: Tue, 24 Sep 2019 02:18:33 -0300 Subject: [PATCH 23/30] =?UTF-8?q?Implementa=20m=C3=A9todo=20colidir=20em?= =?UTF-8?q?=20Ator?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- atores.py | 9 ++++++--- testes/testes_atores.py | 4 ++-- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/atores.py b/atores.py index ce983a50b..c0d51dd6f 100644 --- a/atores.py +++ b/atores.py @@ -38,7 +38,7 @@ def calcular_posicao(self, tempo): :param tempo: o tempo do jogo :return: posição x, y do ator """ - return 1, 1 + return self.x, self.y def colidir(self, outro_ator, intervalo=1): """ @@ -52,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..4c91311f7 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 @@ -127,7 +127,7 @@ def assert_colisao_atores_ativos(self, ator, ator2, intervalo=1): def assert_nao_colisao(self, ator, ator2): """ Se certifica que não colisão entre dois atores - 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 apenas encapsula a lógica de não colisão entre dois atores. So seja, eles deve manter seus respectivos status mesmo depois da chamada do metodo colidir """ From 0d41a9b475b6bf3025d5f905871e111fcf0e5286 Mon Sep 17 00:00:00 2001 From: undersfx Date: Tue, 24 Sep 2019 02:23:15 -0300 Subject: [PATCH 24/30] Implementa Ator Porco --- atores.py | 1 + 1 file changed, 1 insertion(+) diff --git a/atores.py b/atores.py index c0d51dd6f..7cbe2ee1f 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 055c252ca207db9cb7eca4516dd4db386d546c3b Mon Sep 17 00:00:00 2001 From: undersfx Date: Tue, 24 Sep 2019 02:30:02 -0300 Subject: [PATCH 25/30] Implementa Ator PassaroVermelho --- atores.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/atores.py b/atores.py index 7cbe2ee1f..c08dc7427 100644 --- a/atores.py +++ b/atores.py @@ -141,4 +141,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 From cf40202a87d1b8d0fc6a650d9329bd7b6435ca16 Mon Sep 17 00:00:00 2001 From: undersfx Date: Tue, 24 Sep 2019 02:37:15 -0300 Subject: [PATCH 26/30] Implementa metodos lancar e foi_lancado em Passaro --- atores.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/atores.py b/atores.py index c08dc7427..4dcf1c295 100644 --- a/atores.py +++ b/atores.py @@ -97,7 +97,7 @@ def foi_lancado(self): :return: booleano """ - return True + return self._tempo_de_lancamento is not None def colidir_com_chao(self): """ @@ -123,7 +123,6 @@ def calcular_posicao(self, tempo): """ return 1, 1 - 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. @@ -133,7 +132,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 07f147d44d388987f8cf1a2e328628b619024ba5 Mon Sep 17 00:00:00 2001 From: undersfx Date: Tue, 24 Sep 2019 03:03:01 -0300 Subject: [PATCH 27/30] Implementa calculo de posicao y em Passaro --- atores.py | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/atores.py b/atores.py index 4dcf1c295..e7ccb44be 100644 --- a/atores.py +++ b/atores.py @@ -121,7 +121,18 @@ 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 _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 def lancar(self, angulo, tempo_de_lancamento): """ @@ -137,7 +148,9 @@ def lancar(self, angulo, tempo_de_lancamento): class PassaroAmarelo(Passaro): - pass + _caracter_ativo = 'A' + _caracter_destruido = 'a' + velocidade_escalar = 30 class PassaroVermelho(Passaro): From 9eb44af6ae56a0278ff51dd97ceabdf7f36a2189 Mon Sep 17 00:00:00 2001 From: undersfx Date: Tue, 24 Sep 2019 03:08:03 -0300 Subject: [PATCH 28/30] Implementa calculo de posicao x em Passaro --- atores.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/atores.py b/atores.py index e7ccb44be..013078bf0 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) @@ -134,6 +135,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 + 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. From 0d0cb982f69b0ed6e641c5455aeb7c259e4e0563 Mon Sep 17 00:00:00 2001 From: undersfx Date: Tue, 24 Sep 2019 03:11:28 -0300 Subject: [PATCH 29/30] Implementa metodo colidir_com_chao em Passaro --- atores.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/atores.py b/atores.py index 013078bf0..4443826f2 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,23 +122,26 @@ 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 _esta_voando(self): + return self.foi_lancado() and self.status == ATIVO + 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 @@ -150,7 +154,7 @@ 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 From 72fae24c218603681b9ec22c12be6ffba6643dae Mon Sep 17 00:00:00 2001 From: undersfx Date: Thu, 10 Sep 2020 23:35:32 -0300 Subject: [PATCH 30/30] =?UTF-8?q?update:=20clarificando=20coment=C3=A1rios?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- oo/pessoa.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/oo/pessoa.py b/oo/pessoa.py index a8337d0bc..4cdbc5a18 100644 --- a/oo/pessoa.py +++ b/oo/pessoa.py @@ -20,12 +20,12 @@ def cumprimentar(self): # Método Estático @staticmethod - def metodo_estatico(): # Independe de self (Instância) + def metodo_estatico(): # Independe de Instância (self) return 42 # Método de Classe @classmethod - def metodo_de_classe(cls): + def metodo_de_classe(cls): # Tem acesso a classe da Instância (cls) return f'Classe: {cls}, olhos: {cls.olhos}'