From 3201ed687f165ea651f0de15136e102363ae8f1d Mon Sep 17 00:00:00 2001 From: renzon Date: Tue, 12 Aug 2014 18:45:26 -0300 Subject: [PATCH 1/3] Removendo Atores --- atores.py | 120 ------------------------------------------------------ 1 file changed, 120 deletions(-) diff --git a/atores.py b/atores.py index aaac19dc8..6a863f33a 100644 --- a/atores.py +++ b/atores.py @@ -1,127 +1,7 @@ # -*- coding: utf-8 -*- -from __future__ import unicode_literals -import math DESTRUIDO = 'Destruido' ATIVO = 'Ativo' -class Ator(): - _caracter_ativo = 'A' - _caracter_destruido = ' ' - - def caracter(self, tempo): - if self.status(tempo) == ATIVO: - return self._caracter_ativo - else: - return self._caracter_destruido - - def __init__(self, x=0, y=0): - self.y = y - self.x = x - self._tempo_de_colisao = None - - def resetar(self): - self._tempo_de_colisao = None - - def status(self, tempo): - if self._tempo_de_colisao is None or self._tempo_de_colisao > tempo: - return ATIVO - return DESTRUIDO - - def calcular_posicao(self, tempo): - return self.arredondar_posicao() - - def arredondar_posicao(self): - self.x, self.y = round(self.x), round(self.y) - return self.x, self.y - - def colidir(self, outro_ator, tempo, intervalo=1): - if self.status(tempo) == DESTRUIDO or outro_ator.status(tempo) == DESTRUIDO: - return - x1, y1 = self.arredondar_posicao() - x2, y2 = outro_ator.arredondar_posicao() - - def esta_no_intervalo(coordenada1, coordenada2): - coordenadas = sorted([coordenada1, coordenada2]) - return coordenadas[1] - intervalo <= coordenadas[0] - - if esta_no_intervalo(x1, x2) and esta_no_intervalo(y1, y2): - self._tempo_de_colisao = tempo - outro_ator._tempo_de_colisao = tempo - - -class Obstaculo(Ator): - _caracter_ativo = 'O' - - -class Porco(Ator): - _caracter_ativo = '@' - _caracter_destruido = '+' - - -GRAVIDADE = 10 # m/s^2 - - -class Passaro(Ator): - velocidade_escalar = None - - def __init__(self, x=0, y=0): - super().__init__(x, y) - self._x_inicial = x - self._y_inicial = y - self._tempo_de_lancamento = None - self._angulo_de_lancamento = None # radianos - - def resetar(self): - super().resetar() - self._tempo_de_lancamento = None - self._angulo_de_lancamento = None - - - def foi_lancado(self): - return self._tempo_de_lancamento is not None - - def colidir_com_chao(self, tempo): - if self.y <= 0: - self._tempo_de_colisao = tempo - - def _calcular_posicao_horizontal(self, delta_t): - self.x = self._x_inicial + self.velocidade_escalar * delta_t * math.cos(self._angulo_de_lancamento) - - def _calcular_posicao_vertical(self, delta_t): - self.y = (self._y_inicial + - self.velocidade_escalar * delta_t * math.sin(self._angulo_de_lancamento) - - (GRAVIDADE / 2) * delta_t ** 2) - - def _calcular_posicao(self, tempo): - delta_t = tempo - self._tempo_de_lancamento - self._calcular_posicao_vertical(delta_t) - self._calcular_posicao_horizontal(delta_t) - - def calcular_posicao(self, tempo): - if self._tempo_de_lancamento is None or tempo < self._tempo_de_lancamento: - self.x = self._x_inicial - self.y = self._y_inicial - elif self._tempo_de_colisao is not None and tempo >= self._tempo_de_colisao: - self._calcular_posicao(self._tempo_de_colisao) - else: - self._calcular_posicao(tempo) - return self.arredondar_posicao() - - def lancar(self, angulo, tempo): - self._tempo_de_lancamento = tempo - self._angulo_de_lancamento = math.radians(angulo) - - -class PassaroAmarelo(Passaro): - velocidade_escalar = 30 # m/s - _caracter_ativo = 'A' - _caracter_destruido = 'a' - - -class PassaroVermelho(Passaro): - velocidade_escalar = 20 # m/s - _caracter_ativo = 'V' - _caracter_destruido = 'v' From 4e31f6b57fcc17e3ae2b609056835bfa8ca096d2 Mon Sep 17 00:00:00 2001 From: renzon Date: Tue, 12 Aug 2014 18:47:02 -0300 Subject: [PATCH 2/3] Removendo Fase --- fase.py | 71 --------------------------------------------------------- 1 file changed, 71 deletions(-) diff --git a/fase.py b/fase.py index 31eec296b..db6e05c9d 100644 --- a/fase.py +++ b/fase.py @@ -1,5 +1,4 @@ # -*- coding: utf-8 -*- -from itertools import chain from atores import ATIVO @@ -15,73 +14,3 @@ def __eq__(self, other): def __repr__(self, *args, **kwargs): return "Ponto(%s,%s,'%s')" % (self.x, self.y, self.caracter) - -class Fase(): - def __init__(self, intervalo_de_colisao=1): - self.intervalo_de_colisao = intervalo_de_colisao - self._passaros = [] - self._porcos = [] - self._obstaculos = [] - - def _adicionar_ator(self, lista, *atores): - lista.extend(atores) - - def adicionar_obstaculo(self, *obstaculos): - self._adicionar_ator(self._obstaculos, *obstaculos) - - def adicionar_porco(self, *porcos): - self._adicionar_ator(self._porcos, *porcos) - - def adicionar_passaro(self, *passaros): - self._adicionar_ator(self._passaros, *passaros) - - def acabou(self, tempo): - return not self._existe_porco_ativo(tempo) or not self._existe_passaro_ativo(tempo) - - def status(self, tempo): - if not self._existe_porco_ativo(tempo): - return 'Jogo em encerrado. Você ganhou!' - if self._existe_passaro_ativo(tempo): - return 'Jogo em andamento.' - return 'Jogo em encerrado. Você perdeu!' - - def lancar(self, angulo, tempo): - for passaro in self._passaros: - if not passaro.foi_lancado(): - passaro.lancar(angulo, tempo) - return - - def resetar(self): - for ator in chain(self._passaros,self._obstaculos,self._porcos): - ator.resetar() - - def calcular_pontos(self, tempo): - pontos = [self._calcular_ponto_de_passaro(p, tempo) for p in self._passaros] - obstaculos_e_porcos = chain(self._obstaculos, self._porcos) - pontos.extend([self._transformar_em_ponto(ator, tempo) for ator in obstaculos_e_porcos]) - return pontos - - def _transformar_em_ponto(self, ator, tempo): - return Ponto(ator.x, ator.y, ator.caracter(tempo)) - - def _calcular_ponto_de_passaro(self, passaro, tempo, ): - passaro.calcular_posicao(tempo) - for ator in chain(self._obstaculos, self._porcos): - if ATIVO == passaro.status(tempo): - passaro.colidir(ator, tempo, self.intervalo_de_colisao) - passaro.colidir_com_chao(tempo) - else: - break - return self._transformar_em_ponto(passaro, tempo) - - def _existe_porco_ativo(self, tempo): - return self._verificar_se_existe_ator_ativo(self._porcos, tempo) - - def _verificar_se_existe_ator_ativo(self, atores, tempo): - for a in atores: - if a.status(tempo) == ATIVO: - return True - return False - - def _existe_passaro_ativo(self, tempo): - return self._verificar_se_existe_ator_ativo(self._passaros, tempo) From b71a5ce859912318c6dfda011c5a5c1c531b1fd2 Mon Sep 17 00:00:00 2001 From: renzon Date: Thu, 28 Aug 2014 11:24:23 -0300 Subject: [PATCH 3/3] Update README.md --- README.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 6aeb8e375..7a2fd88cd 100644 --- a/README.md +++ b/README.md @@ -61,7 +61,9 @@ Contém lógica para rodar jogo e em uma janela. A seguir é apresentada a especificação detalhada do jogo. -## Classe Ator +## Classe Ator + +Confira o [Diagrama de Classes](https://github.com/pythonprobr/pythonbirds/blob/master/diagramas/atore-classes.jpg) Classe base para todos atores do jogo. @@ -180,4 +182,4 @@ Ele deve: ### Divirta-se!!!! -Powered by [Python Pro](http://adm.python.pro.br) \ No newline at end of file +Powered by [Python Pro](http://adm.python.pro.br)