From 08eea48b269a426451b96e217cd3b6100e2d99dd Mon Sep 17 00:00:00 2001 From: abimael Date: Wed, 19 Aug 2020 13:26:58 -0600 Subject: [PATCH 1/8] Criacao de metodo self --- oo/__init__.py | 0 oo/pessoa.py | 14 ++++++++++++++ 2 files changed, 14 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..fec9bd972 --- /dev/null +++ b/oo/pessoa.py @@ -0,0 +1,14 @@ +class Pessoa: + def __init__(self): + self.nome = None + def cumprimentar(self): + return f'Olá {id(self)}' + + +if __name__ == '__main__': + p = Pessoa() + print(id(p)) + print(Pessoa.cumprimentar(p)) + print(p.nome) + p.nome = 'Abimael' + print(p.nome) \ No newline at end of file From 006dac2d0e3eed2e82dfa2f21999df66eace766d Mon Sep 17 00:00:00 2001 From: abimaelst Date: Wed, 19 Aug 2020 22:57:17 -0300 Subject: [PATCH 2/8] metodos complexos --- oo/pessoa.py | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/oo/pessoa.py b/oo/pessoa.py index fec9bd972..33ea4291c 100644 --- a/oo/pessoa.py +++ b/oo/pessoa.py @@ -1,14 +1,19 @@ class Pessoa: - def __init__(self): - self.nome = None + 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() - print(id(p)) - print(Pessoa.cumprimentar(p)) - print(p.nome) - p.nome = 'Abimael' - print(p.nome) \ No newline at end of file + 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 8f1e8378eb9389076346055419da38fcef749308 Mon Sep 17 00:00:00 2001 From: abimaelst Date: Wed, 19 Aug 2020 23:03:39 -0300 Subject: [PATCH 3/8] criando e removido atributo dinamico do tipo pessoa --- oo/pessoa.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/oo/pessoa.py b/oo/pessoa.py index 33ea4291c..9f55efbb3 100644 --- a/oo/pessoa.py +++ b/oo/pessoa.py @@ -17,3 +17,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 752cb04ecf72fdaaa3fc46ce90e85ab2b85f0440 Mon Sep 17 00:00:00 2001 From: abimaelst Date: Wed, 19 Aug 2020 23:14:25 -0300 Subject: [PATCH 4/8] Criado atributo de class olhos --- oo/pessoa.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/oo/pessoa.py b/oo/pessoa.py index 9f55efbb3..052299719 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 @@ -19,5 +20,12 @@ 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)) \ No newline at end of file From 295b2c33bdbfc939e150616e4d45f2260a4ffc2c Mon Sep 17 00:00:00 2001 From: abimaelst Date: Sat, 22 Aug 2020 21:43:55 -0300 Subject: [PATCH 5/8] =?UTF-8?q?implementada=20a=20dire=C3=A7=C3=A3o?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- oo/carro.py | 112 +++++++++++++++++++++++++++++++++++++++++++++++++++ oo/pessoa.py | 12 +++++- 2 files changed, 123 insertions(+), 1 deletion(-) create mode 100644 oo/carro.py diff --git a/oo/carro.py b/oo/carro.py new file mode 100644 index 000000000..dc46c7a41 --- /dev/null +++ b/oo/carro.py @@ -0,0 +1,112 @@ + + +""" + 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 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' + >>> 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 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) + +NORTE = 'Norte' +SUL = 'Sul' +LESTE = 'leste' +OESTE = 'Oeste' + +class Direcao(): + rotacao_a_direita_dct = {NORTE: LESTE, LESTE: SUL, SUL: OESTE, OESTE: NORTE} + rotacao_a_direita_dct = {NORTE: OESTE, OESTE: SUL, SUL: OESTE, OESTE: NORTE} + + + rotacao_a_direita_dct + + 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_direita_dct[self.valor] + + + + + diff --git a/oo/pessoa.py b/oo/pessoa.py index 052299719..6275a2c6c 100644 --- a/oo/pessoa.py +++ b/oo/pessoa.py @@ -7,6 +7,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_classe(cls): + return f'{cls} - olhos {cls.olhos}' + if __name__ == '__main__': renzo = Pessoa(nome='Renzo') @@ -28,4 +36,6 @@ def cumprimentar(self): print(Pessoa.olhos) print(luciano.olhos) print(renzo.olhos) - print(id(Pessoa.olhos), id(luciano.olhos), id(renzo.olhos)) \ No newline at end of file + print(id(Pessoa.olhos), id(luciano.olhos), id(renzo.olhos)) + print(Pessoa.metodo_estatico(), luciano.metodo_estatico()) + print(Pessoa.nome_e_atributos_de_classe(), luciano.nome_e_atributos_de_classe()) From 4925ba677e778ca2b3f235c692bd38d733c07683 Mon Sep 17 00:00:00 2001 From: abimaelst Date: Sat, 22 Aug 2020 21:56:52 -0300 Subject: [PATCH 6/8] =?UTF-8?q?finalizado=20a=20implementa=C3=A7=C3=A3o=20?= =?UTF-8?q?do=20carro?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- oo/carro.py | 32 ++++++++++++++++++++++++++------ 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/oo/carro.py b/oo/carro.py index dc46c7a41..aac8d5909 100644 --- a/oo/carro.py +++ b/oo/carro.py @@ -74,6 +74,29 @@ '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): + return self.motor.acelerar() + + def frear(self): + return self.motor.frear() + + def calcular_direcao(self): + return self.direcao.valor + + def girar_a_direita(self): + return self.direcao.girar_a_direita() + + def girar_a_esquerda(self): + return self.direcao.girar_a_esquerda() + class Motor: def __init__(self): self.velocidade = 0 @@ -87,15 +110,12 @@ def frear(self): NORTE = 'Norte' SUL = 'Sul' -LESTE = 'leste' +LESTE = 'Leste' OESTE = 'Oeste' class Direcao(): rotacao_a_direita_dct = {NORTE: LESTE, LESTE: SUL, SUL: OESTE, OESTE: NORTE} - rotacao_a_direita_dct = {NORTE: OESTE, OESTE: SUL, SUL: OESTE, OESTE: NORTE} - - - rotacao_a_direita_dct + rotacao_a_esquerda_dct = {NORTE: OESTE, OESTE: SUL, SUL: LESTE, LESTE: NORTE} def __init__(self): self.valor = NORTE @@ -104,7 +124,7 @@ def girar_a_direita(self): self.valor = self.rotacao_a_direita_dct[self.valor] def girar_a_esquerda(self): - self.valor = self.rotacao_a_direita_dct[self.valor] + self.valor = self.rotacao_a_esquerda_dct[self.valor] From e15b5d18e72ae8a2d7fb44a11ea3da5144093957 Mon Sep 17 00:00:00 2001 From: abimaelst Date: Sun, 23 Aug 2020 23:17:55 -0300 Subject: [PATCH 7/8] implementado test quantidade de atores. --- atores.py | 7 ++-- fase.py | 35 +++++++++++++++---- oo/pessoa.py | 16 +++++++-- oo/test_carro.py | 14 ++++++++ testes/{atores_testes.py => testes_atores.py} | 0 testes/{fase_testes.py => testes_fase.py} | 0 .../{integracao.py => testes_integracao.py} | 0 7 files changed, 59 insertions(+), 13 deletions(-) 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/atores.py b/atores.py index cfc2ef5ea..ec01e5338 100644 --- a/atores.py +++ b/atores.py @@ -57,11 +57,10 @@ 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 +136,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/fase.py b/fase.py index 3385175c6..8553890ff 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,9 +59,9 @@ def adicionar_passaro(self, *passaros): :param passaros: """ - pass + self._passaros.extend(passaros) - def status(self): + def status(self, passaro=None, porco=None): """ Método que indica com mensagem o status do jogo @@ -73,7 +73,14 @@ 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 +93,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): @@ -105,3 +115,16 @@ def calcular_pontos(self, tempo): def _transformar_em_ponto(self, ator): return Ponto(ator.x, ator.y, ator.caracter()) + def _possui_porco_ativo(self): + for porco in self._porcos: + if porco.status == ATIVO: + return True + return False + + def _possui_passaros_ativo(self): + for passaro in self._passaros: + if passaro.status == ATIVO: + return True + return False + + diff --git a/oo/pessoa.py b/oo/pessoa.py index 6275a2c6c..fdddffe51 100644 --- a/oo/pessoa.py +++ b/oo/pessoa.py @@ -15,10 +15,15 @@ def metodo_estatico(): def nome_e_atributos_de_classe(cls): return f'{cls} - olhos {cls.olhos}' +class Homem(Pessoa): + pass + +class Mutante(Pessoa): + olhos = 3 if __name__ == '__main__': - renzo = Pessoa(nome='Renzo') - luciano = Pessoa(renzo, nome='Luciano') + renzo = Mutante(nome='Renzo') + luciano = Homem(renzo, nome='Luciano') print(Pessoa.cumprimentar(luciano)) print(id(luciano)) print(luciano.cumprimentar()) @@ -32,10 +37,15 @@ def nome_e_atributos_de_classe(cls): del luciano.olhos print(luciano.__dict__) print(renzo.__dict__) - Pessoa.olhos = 3 print(Pessoa.olhos) print(luciano.olhos) print(renzo.olhos) print(id(Pessoa.olhos), id(luciano.olhos), id(renzo.olhos)) print(Pessoa.metodo_estatico(), luciano.metodo_estatico()) print(Pessoa.nome_e_atributos_de_classe(), luciano.nome_e_atributos_de_classe()) + pessoa = Pessoa('Anonimo') + print(isinstance(pessoa, Pessoa)) + print(isinstance(pessoa, Homem)) + print(isinstance(renzo, Pessoa)) + print(isinstance(renzo, Homem)) + print(renzo.olhos) \ No newline at end of file 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 bdcb8389be85fc17725948e7c0f7db4f3960f77b Mon Sep 17 00:00:00 2001 From: abimaelst Date: Tue, 25 Aug 2020 22:16:10 -0300 Subject: [PATCH 8/8] =?UTF-8?q?finalizado=20a=20implementa=C3=A7=C3=A3o=20?= =?UTF-8?q?do=20jogo.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- atores.py | 48 +++++++++++++++++++++++++++++++++-------- fase.py | 6 ++++++ testes/testes_atores.py | 2 +- 3 files changed, 46 insertions(+), 10 deletions(-) diff --git a/atores.py b/atores.py index ec01e5338..65a265069 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): @@ -61,6 +64,7 @@ class Obstaculo(Ator): class Porco(Ator): _caracter_ativo = '@' + _caracter_destruido = '+' class DuploLancamentoExcecao(Exception): @@ -92,7 +96,7 @@ def foi_lancado(self): :return: booleano """ - return True + return not self._tempo_de_lancamento is None def colidir_com_chao(self): """ @@ -100,7 +104,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): """ @@ -116,7 +121,11 @@ 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._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): @@ -128,12 +137,33 @@ def lancar(self, angulo, tempo_de_lancamento): :param tempo_de_lancamento: :return: """ - pass + 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= 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 = 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): - pass + _caracter_ativo = 'A' + _caracter_destruido = 'a' + velocidade_escalar = 30 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/fase.py b/fase.py index 8553890ff..221a01040 100644 --- a/fase.py +++ b/fase.py @@ -108,6 +108,12 @@ def calcular_pontos(self, tempo): :param tempo: tempo para o qual devem ser calculados os pontos :return: objeto do tipo Ponto """ + + for passaro in self._passaros: + passaro.calcular_posicao(tempo) + for alvo in self._obstaculos + self._porcos: + passaro.colidir(alvo, self.intervalo_de_colisao) + passaro.colidir_com_chao() pontos=[self._transformar_em_ponto(a) for a in self._passaros+self._obstaculos+self._porcos] return pontos diff --git a/testes/testes_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