Skip to content

Commit aeaa01f

Browse files
author
fabianomcs
committed
criado classes
1 parent 18532a8 commit aeaa01f

7 files changed

Lines changed: 96 additions & 36 deletions

File tree

atores.py

Lines changed: 32 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ def calcular_posicao(self, tempo):
3838
:param tempo: o tempo do jogo
3939
:return: posição x, y do ator
4040
"""
41-
return 1, 1
41+
return self.x, self.y
4242

4343
def colidir(self, outro_ator, intervalo=1):
4444
"""
@@ -52,22 +52,22 @@ def colidir(self, outro_ator, intervalo=1):
5252
:param intervalo: Intervalo a ser considerado
5353
:return:
5454
"""
55-
pass
56-
57-
55+
if self.status==ATIVO and outro_ator.status==ATIVO:
56+
delta_x = abs(self.x - outro_ator.x)
57+
delta_y = abs(self.y - outro_ator.y)
58+
if delta_x <= intervalo and delta_y <= intervalo:
59+
self.status = outro_ator.status = DESTRUIDO
5860

5961
class Obstaculo(Ator):
60-
pass
61-
62+
_caracter_ativo = 'O'
6263

6364
class Porco(Ator):
64-
pass
65-
65+
_caracter_ativo = '@'
66+
_caracter_destruido = '+'
6667

6768
class DuploLancamentoExcecao(Exception):
6869
pass
6970

70-
7171
class Passaro(Ator):
7272
velocidade_escalar = 10
7373

@@ -93,7 +93,12 @@ def foi_lancado(self):
9393
9494
:return: booleano
9595
"""
96-
return True
96+
# if self._tempo_de_lancamento is None: # O código abaixo substitui este if else
97+
# return False
98+
# else:
99+
# return True
100+
101+
return not self._tempo_de_lancamento is None
97102

98103
def colidir_com_chao(self):
99104
"""
@@ -117,7 +122,10 @@ def calcular_posicao(self, tempo):
117122
:param tempo: tempo de jogo a ser calculada a posição
118123
:return: posição x, y
119124
"""
120-
return 1, 1
125+
if self.foi_lancado():
126+
delta_t = tempo - self._tempo_de_lancamento
127+
self._calcular_posicao_vertical(delta_t)
128+
return super().calcular_posicao(tempo)
121129

122130

123131
def lancar(self, angulo, tempo_de_lancamento):
@@ -129,12 +137,21 @@ def lancar(self, angulo, tempo_de_lancamento):
129137
:param tempo_de_lancamento:
130138
:return:
131139
"""
132-
pass
140+
self._angulo_de_lancamento = angulo
141+
self._tempo_de_lancamento = tempo_de_lancamento
133142

143+
def _calcular_posicao_vertical(self, delta_t):
144+
angulo_radianos = math.radians(self._angulo_de_lancamento)
145+
y_atual = self._y_inicial + self.velocidade_escalar * delta_t * math.sin(angulo_radianos)
146+
y_atual -= (GRAVIDADE * (delta_t ** 2)) / 2
147+
self.y = y_atual
134148

135149
class PassaroAmarelo(Passaro):
136-
pass
137-
150+
_caracter_ativo = 'A'
151+
_caracter_destruido = 'a'
152+
velocidade_escalar = 30
138153

139154
class PassaroVermelho(Passaro):
140-
pass
155+
_caracter_ativo = 'V'
156+
_caracter_destruido = 'v'
157+
velocidade_escalar = 20

fase.py

Lines changed: 30 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -43,23 +43,23 @@ def adicionar_obstaculo(self, *obstaculos):
4343
4444
:param obstaculos:
4545
"""
46-
pass
46+
self._obstaculos.extend(obstaculos)
4747

4848
def adicionar_porco(self, *porcos):
4949
"""
5050
Adiciona porcos em uma fase
5151
5252
:param porcos:
5353
"""
54-
pass
54+
self._porcos.extend(porcos)
5555

5656
def adicionar_passaro(self, *passaros):
5757
"""
5858
Adiciona pássaros em uma fase
5959
6060
:param passaros:
6161
"""
62-
pass
62+
self._passaros.extend(passaros)
6363

6464
def status(self):
6565
"""
@@ -73,7 +73,12 @@ def status(self):
7373
7474
:return:
7575
"""
76-
return EM_ANDAMENTO
76+
if not self._possui_porco_ativo():
77+
return VITORIA
78+
elif self._possui_passaros_ativos():
79+
return EM_ANDAMENTO
80+
else:
81+
return DERROTA
7782

7883
def lancar(self, angulo, tempo):
7984
"""
@@ -86,7 +91,10 @@ def lancar(self, angulo, tempo):
8691
:param angulo: ângulo de lançamento
8792
:param tempo: Tempo de lançamento
8893
"""
89-
pass
94+
for passaro in self._passaros:
95+
if not passaro.foi_lancado():
96+
passaro.lancar(angulo, tempo)
97+
break
9098

9199

92100
def calcular_pontos(self, tempo):
@@ -98,10 +106,27 @@ def calcular_pontos(self, tempo):
98106
:param tempo: tempo para o qual devem ser calculados os pontos
99107
:return: objeto do tipo Ponto
100108
"""
109+
for passaro in self._passaros:
110+
passaro.calcular_posicao(tempo)
111+
for alvo in self._obstaculos+self._porcos:
112+
passaro.colidir(alvo, self.intervalo_de_colisao)
113+
passaro.colidir_com_chao()
101114
pontos=[self._transformar_em_ponto(a) for a in self._passaros+self._obstaculos+self._porcos]
102115

103116
return pontos
104117

105118
def _transformar_em_ponto(self, ator):
106119
return Ponto(ator.x, ator.y, ator.caracter())
107120

121+
def _possui_porco_ativo(self):
122+
for porco in self._porcos:
123+
if porco.status == ATIVO:
124+
return True
125+
return False
126+
127+
def _possui_passaros_ativos(self):
128+
for passaro in self._passaros:
129+
if passaro.status == ATIVO:
130+
return True
131+
return False
132+

oo/pessoa.py

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ def __init__(self, nome=None, idade=34, *filhos):
77
self.filhos = list(filhos)
88

99
def cumprimentar(self):
10-
return f'Olá {id(self)}'
10+
return f'Olá meu nome é {self.nome}'
1111

1212
@staticmethod
1313
def metodo_estatico():
@@ -17,26 +17,29 @@ def metodo_estatico():
1717
def nome_e_atributos_de_classe(cls):
1818
return f'{cls} - olhos {cls.olhos}'
1919

20+
class Homem(Pessoa):
21+
def cumprimentar(self):
22+
#cumprimentar_da_classe=Pessoa.cumprimentar(self) pode gerar problemas se a classe "pai" for alterada.
23+
cumprimentar_da_classe=super().cumprimentar()
24+
return f'{cumprimentar_da_classe}. Aperto de Mão'
25+
26+
class Mutante(Pessoa):
27+
olhos = 3
28+
2029

2130
if __name__ == '__main__':
2231

23-
jose = Pessoa(nome='Jose', idade=2)
32+
jose = Mutante(nome='Jose', idade=2)
2433
maia = Pessoa('Maia', 30, jose)
25-
fabiano = Pessoa(nome='Fabiano', idade=5)
34+
fabiano = Homem(nome='Fabiano', idade=5)
2635
maia = Pessoa('Maia', 30, fabiano)
2736

2837
print(Pessoa.cumprimentar(maia))
2938
print(id(maia.nome))
3039
print('1', maia.cumprimentar())
3140
print(maia.nome, maia.idade)
3241
print(maia.idade)
33-
print(str(maia.filhos.count))
34-
35-
for filho in maia.filhos:
36-
print(Pessoa.cumprimentar(filho.nome))
37-
38-
for filho in maia.filhos:
39-
print(filho.nome)
42+
print(maia.filhos.count)
4043

4144
maia.sobrenome = 'Ramalho'
4245
print('Nome completo', maia.nome, maia.sobrenome)
@@ -53,4 +56,9 @@ def nome_e_atributos_de_classe(cls):
5356
print(id(Pessoa.olhos), id(maia.olhos), id(fabiano.olhos))
5457

5558
print(Pessoa.metodo_estatico(), maia.metodo_estatico())
56-
print(Pessoa.nome_e_atributos_de_classe(), maia.nome_e_atributos_de_classe())
59+
print(Pessoa.nome_e_atributos_de_classe(), maia.nome_e_atributos_de_classe())
60+
61+
print('Número de olhos do mutante', jose.nome ,'é',jose.olhos)
62+
63+
print(maia.cumprimentar())
64+
print(fabiano.cumprimentar())

oo/teste_carro.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
from unittest import TestCase
2+
3+
from oo.carro import Motor
4+
5+
6+
class CarroTestCase(TestCase):
7+
def teste_velocidadde_inicial(self):
8+
motor = Motor()
9+
self.assertEqual(0, motor.velocidade)
10+
11+
def teste_acelerar(self):
12+
motor = Motor()
13+
motor.acelerar()
14+
self.assertEqual(1, motor.velocidade)
Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
# -*- coding: utf-8 -*-
2-
32
from __future__ import unicode_literals
43
from os import path
54
import sys
@@ -113,7 +112,7 @@ def test_caracter(self):
113112
def assert_colisao_atores_ativos(self, ator, ator2, intervalo=1):
114113
"""
115114
Se certifica que há colisão entre atores ativos
116-
Atenção: Esse não é método de teste porque nao se inicia com prefixo "text".
115+
Atenção: Esse não é método de teste porque nao se inicia com prefixo "test".
117116
Ele serve apenas para encapsular toda lógica de teste de colisão entre dois atores ativos
118117
"""
119118
# Conferindo status dos dois atores antes da colisão
@@ -202,7 +201,6 @@ def teste_status(self):
202201
passaro_vermelho.colidir(outro_ator_na_mesma_posicao)
203202
self.assertEqual('v', passaro_vermelho.caracter())
204203

205-
206204
def teste_velocidade_escalar(self):
207205
self.assertEqual(20, PassaroVermelho.velocidade_escalar)
208206

@@ -265,8 +263,6 @@ def teste_lacamento_vertical(self):
265263
passaro_amarelo = PassaroAmarelo(1, 1)
266264
passaro_amarelo.lancar(90, 2) # passaro lancado a 90 graus no tempo 2 segundos
267265

268-
269-
270266
# subindo
271267

272268
self.assert_posicao_vertical(1, 2.0, passaro_amarelo)

0 commit comments

Comments
 (0)