Skip to content

Commit 84e75e5

Browse files
author
renzon
committed
Consertando documentação
1 parent a9b490a commit 84e75e5

File tree

2 files changed

+126
-65
lines changed

2 files changed

+126
-65
lines changed

README.md

Lines changed: 26 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -55,12 +55,12 @@ Contém lógica para rodar jogo e exibir no console.
5555

5656
## script placa_grafica_tkinter.py
5757

58-
Contém lógica para rodar jogo e em uma janela.
58+
Contém lógica para rodar jogo em uma janela.
5959

6060
# Simplificação do Jogo
6161

6262
1. Atores são pontos no plano cartesiano.
63-
2. A velocidade dos pontos e pequena, de tal forma que a cada passo os atores se movam apenas para pontos vizinhos.
63+
2. A velocidade dos pontos é pequena, de tal forma que a cada passo os atores se movam apenas para pontos vizinhos.
6464
3. A colisão entre pontos ocorre quando eles estão em ponto vizinho, de acordo com valor de intervalo.
6565

6666
A seguir é apresentada a especificação detalhada do jogo.
@@ -77,12 +77,12 @@ primeiro elemento e posição vertical (y) como segundo.
7777
### Método colidir
7878

7979
O método colidir executa a lógica de colisão. A colisão só ocorre com atores ativos e que estejam
80-
em pontos vizinhos.
80+
em pontos vizinhos. Ao colidir, os atores envolvidos devem ter seus status alterado para DESTRUIDO
8181

8282
## Classe Obstaculo
8383

84-
Classe que representa obstáculos na fase e que podem ser destruidos por pássaros. Herda de ator. Seu caracter de
85-
representação é a letra "O" quando Ativo.
84+
Classe que representa obstáculos na fase e que podem ser destruídos por pássaros. Herda de ator. Seu caracter de
85+
representação é a letra "O", quando ATIVO.
8686

8787
### Status
8888

@@ -91,9 +91,14 @@ Assim ele vai "sumir" da tela.
9191

9292
## Classe Porco
9393

94-
Classe que representa porcos na fase e que podem ser destruidos por pássaros. Herda de ator. Seu caracter de
94+
Classe que representa porcos na fase e que podem ser destruídos por pássaros. Herda de ator. Seu caracter de
9595
representação é a o caracter "@".
9696

97+
### Status
98+
99+
Um obstáculo ao ter seu status alterado para DESTRUIDO deve ter seu caracter de apresentação alterado para "+" (sinal de mais).
100+
Assim sua imagem é alterada para a de porco morto.
101+
97102
## Passaro
98103

99104
Classe base de todos os passáros. Cada tipo possui uma velocidade de lançamento (v). No lançamento o jogador escolhe o
@@ -102,8 +107,9 @@ gravidade (GRAVIDADE) constante e igual a 10 m/s^2.
102107

103108
### Método lancar
104109

105-
O método lançar recebe o ângulo, em graus, que será feito o lançamento. Cada pássaro deve armazenar esse valor e o tempo
106-
de lançamento para cálculo de sua posíção. Lembrar que o tempo das fórmulas é delta_t = T_final - T_inicial
110+
O método lançar recebe o ângulo, em graus, que será feito o lançamento. Ele deve ser convertido para radianos.
111+
Cada pássaro deve armazenar esse valor e o tempo
112+
de lançamento para cálculo de sua posíção. Lembrar que o tempo das fórmulas é delta_t = T_final - T_inicial.
107113

108114

109115
### Método de colidir_com_chao
@@ -113,13 +119,13 @@ Todo pássaro que colidir com o chão (y<=0) deve ser destruído.
113119
### Método foi_lançado
114120

115121
Esse método deve retornar verdadadeiro se o pássaro foi lançado (tempo de lançamento é None).
116-
Caso contrário deve retornar falso
122+
Caso contrário deve retornar falso.
117123

118124
### Lançamento
119125

120126
Se o pássaro ainda não foi lançado, o pássaro deve permanecer na posição inicial.
121127

122-
Caso tenha sido lançado e seu status esteja ativo, sua posição deve ser calculada de acordo com o lançamento oblíquo.
128+
Caso tenha sido lançado e seu status esteja ATIVO, sua posição deve ser calculada de acordo com o lançamento oblíquo.
123129
Nesse caso, delta_t vai ser igual ao tempo do jogo menos o tempo do lançamento.
124130

125131
Caso contrário, ele deve retornar a posição onde colidiu.
@@ -143,39 +149,32 @@ Tipo de Pássaro que representa o pássaro amarelo. Possui velocidade de lançam
143149

144150
## Classe Fase
145151

146-
Classe responsável por organizar atores e transformarem os dados em pontos a serem representados na tela.
152+
Classe responsável por organizar atores e transformar os dados em pontos a serem representados na tela.
147153

148154
### Método adicionar_obstaculo
149155

150-
Método que adiciona um ou mais obstáculos na fase
156+
Método que adiciona um ou mais obstáculos na fase.
151157

152158
### Método adicionar_porco
153159

154-
Método que adiciona um ou mais porcos na fase
160+
Método que adiciona um ou mais porcos na fase.
155161

156162
### Método adicionar_passaro
157163

158-
Método que adiciona um ou mais pássaros na fase
159-
160-
### Método acabou
161-
162-
Método que recebe o tempo do jogo e retorna verdadeiro (True) se o jogo acabou e (False) caso contrário.
163-
O jogo pode acabar por duas razôes:
164+
Método que adiciona um ou mais pássaros na fase.
164165

165-
1. Todos porcos foram destruídos
166-
2. Não há mais pássaros a serem lançados
167166

168167
### Método status
169168

170-
Recebe o tempo como parâmetro e retorna mensagem com status do jogo.
169+
Recebe o tempo como parâmetro e retorna status do jogo.
171170

172-
1. Se o jogo está em andamento, retorna mensagem "Jogo em andamento."
173-
2. Se o jogo acabou e não existem porcos ativos, retorna a mensagem "Jogo em encerrado. Você ganhou!"
174-
3. Se o jogo acabou e existem porcos ativos, retorna a mensagem "Jogo em encerrado. Você perdeu!"
171+
1. Se o jogo está em andamento, retorna status "EM_ANDAMENTO";
172+
2. Se o jogo acabou e não existem porcos ativos, retorna STATUS "VITORIA";
173+
3. Se o jogo acabou e existem porcos ativos, retorna status "DERROTA".
175174

176175
### Método lancar
177176

178-
Recebe o ângulo e o tempo do lançamento. Deve delegar o lançamento ao primeiro pássaro ativo da lista de pássaros que
177+
Recebe o ângulo e o tempo do lançamento. Deve delegar o lançamento ao primeiro pássaro ATIVO da lista de pássaros que
179178
ainda não foi lançado.
180179

181180
### Método calcular_pontos
@@ -185,7 +184,7 @@ Método que executa a lógica do jogo a cada passo (tempo), retornando pontos a
185184
Ele deve:
186185

187186
1. Calcular a posição de cada pássaro, verificando se ele colidiu com algum obstáculo, porco ou chão.
188-
2. Retornar instâncias da classe Ponto, informando x,y e caracter respectivo a cada ator.
187+
2. Retornar instâncias da classe Ponto, informando x, y e caracter respectivo a cada ator.
189188

190189
### Divirta-se!!!!
191190

testes/atores_testes.py

Lines changed: 100 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,15 @@
77

88
class AtorTestes(TestCase):
99
def teste_valores_padrao(self):
10+
'Testa valores iniciais padrão de um Ator'
1011
ator = Ator()
1112
self.assertEqual(0, ator.x)
1213
self.assertEqual(0, ator.y)
1314
self.assertEqual(ATIVO, ator.status)
1415
self.assertEqual('A', ator.caracter())
1516

1617
def teste_valores_passados_por_parametro(self):
18+
'Testa se valores passados no inicializador são armazenados no objeto'
1719
ator = Ator(1, 2)
1820
self.assertEqual(1, ator.x)
1921
self.assertEqual(2, ator.y)
@@ -34,6 +36,12 @@ def teste_ator_posicao(self):
3436

3537

3638
def teste_colisao_entre_atores_ativos(self):
39+
"""
40+
Teste de colisão entre dois atores
41+
Incialmente atores possuem status ATIVO. Ao se chocarem, ele muda para Destruído
42+
A função assert_colisao_atores_ativos testa justamente se dois atore ativos se chocam quando estão em posições
43+
vizinhas.
44+
"""
3745
ator = Ator(2, 2) # Ator recém criado deve ter status ativo
3846
ator2 = Ator(2, 2)
3947
self.assert_colisao_atores_ativos(ator, ator2)
@@ -51,6 +59,7 @@ def teste_colisao_entre_atores_ativos_com_intervalo(self):
5159
self.assert_colisao_atores_ativos(Ator(2, 2), Ator(2, 4), 2)
5260

5361
def teste_nao_colisao_entre_atores_ativos(self):
62+
'Teste de que não há colisão entre atores distantes'
5463
self.assert_nao_colisao(Ator(2, 2), Ator(2, 4))
5564
self.assert_nao_colisao(Ator(2, 2), Ator(3, 4))
5665
self.assert_nao_colisao(Ator(2, 2), Ator(4, 2))
@@ -61,8 +70,9 @@ def teste_nao_colisao_entre_atores_ativos(self):
6170
self.assert_nao_colisao(Ator(2, 2), Ator(0, 4))
6271

6372
def teste_colisao_somente_um_ator_destruido(self):
73+
'Teste de que um ator destruído não pode colidir com nenhum outro, mesmo que estejam próximos'
6474
ator = Ator(2, 2)
65-
ator.colidir(ator, 0) # colidingo ator com ele mesmo para alterar seu status para destruido
75+
ator.colidir(ator, 0) # colidindo ator com ele mesmo para alterar seu status para destruido
6676
ator2 = Ator(2, 2)
6777
self.assert_nao_colisao(ator, ator2)
6878
self.assert_nao_colisao(Ator(2, 3), ator)
@@ -84,6 +94,7 @@ def teste_colisao_somente_um_ator_destruido(self):
8494
self.assert_nao_colisao(Ator(1, 3), ator)
8595

8696
def test_caracter(self):
97+
'Teste de caracter para status ATIVO e DESTRUIDO'
8798
ator = Ator()
8899
self.assertEqual('A', ator.caracter())
89100
outro_ator_na_mesma_posicao = Ator()
@@ -92,7 +103,11 @@ def test_caracter(self):
92103

93104

94105
def assert_colisao_atores_ativos(self, ator, ator2, intervalo=1):
95-
'Se certifica que há colisão entre atores ativos'
106+
"""
107+
Se certifica que há colisão entre atores ativos
108+
Atenção: Esse não é método de teste porque nao se inicia com prefixo "text".
109+
Ele serve apenas para encapsular toda lógica de teste de colisão entre dois atores ativos
110+
"""
96111
# Conferindo status dos dois atores antes da colisão
97112
self.assertEqual(ator.status, ATIVO, 'Status deveria ser ativo antes da colisão')
98113
self.assertEqual(ator2.status, ATIVO, 'Status deveria ser ativo antes da colisão')
@@ -102,7 +117,12 @@ def assert_colisao_atores_ativos(self, ator, ator2, intervalo=1):
102117
self.assertEqual(ator.status, DESTRUIDO, 'Status deveria ser destruido depois da colisão')
103118

104119
def assert_nao_colisao(self, ator, ator2):
105-
'Se certifica que não colisão entre dois atores'
120+
"""
121+
Se certifica que não colisão entre dois atores
122+
Atenção: Esse não é método de teste porque nao se inicia com prefixo "text".
123+
Ele apenas encapsula a lógica de não colisão entre dois atores.
124+
So seja, eles deve manter seus respectivos status mesmo depois da chamada do metodo colidir
125+
"""
106126
# Armazenando status antes da colisão
107127
status_inicial_ator = ator.status
108128
status_inicial_ator_2 = ator2.status
@@ -133,14 +153,34 @@ def teste_status(self):
133153

134154

135155
class PassaroBaseTests(TestCase):
156+
"""
157+
Classe base para teste de passaros.
158+
Essa classe não contèm nenhum teste, serve apenas para encapsular a lógica de asserção de posição de passaros
159+
vermelhos e também dos amarelos.
160+
161+
"""
162+
136163
def assert_passaro_posicao(self, x_esperado, y_esperado, status_esperado, passaro, tempo):
164+
"""
165+
Mètodo que se testa posição do pássaro.
166+
Atenção: Esse não é método de teste porque nao se inicia com prefixo "text".
167+
:param x_esperado: posição x esperada do passaro
168+
:param y_esperado: posição y esperada do passaro
169+
:param status_esperado: status esperado do passaro
170+
:param passaro: passaro alvo do teste
171+
:param tempo: tempo do jogo
172+
"""
137173
x_calculado, y_calculado = passaro.calcular_posicao(tempo)
138174
self.assertEqual(x_esperado, round(x_calculado), 'valor real de x = %s' % x_calculado)
139175
self.assertEqual(y_esperado, round(y_calculado), 'valor real de y = %s' % y_calculado)
140176
self.assertEqual(status_esperado, passaro.status, '(x = %s, y = %s)' % (x_calculado, y_calculado))
141177

142178

143179
class PassaroVermelhoTests(PassaroBaseTests):
180+
"""
181+
Classe de teste e Passaro Vermelho
182+
"""
183+
144184
def teste_status(self):
145185
passaro_amarelo = PassaroVermelho(1, 1)
146186
self.assertEqual('V', passaro_amarelo.caracter())
@@ -154,6 +194,11 @@ def teste_velocidade_escalar(self):
154194

155195

156196
def teste_foi_lancado(self):
197+
"""
198+
Teste de lançamento. Enquanto o método lançar do passaro não for chamado, o méotod foi_lancado deve retornar
199+
Falso
200+
:return:
201+
"""
157202
passaro_vermelho = PassaroVermelho(1, 1)
158203
self.assertFalse(passaro_vermelho.foi_lancado(),
159204
'Se o método lançar ainda não foi executado, deve retornar falso')
@@ -162,6 +207,10 @@ def teste_foi_lancado(self):
162207
'Se o método lançar foi executado, deve retornar verdadeiro')
163208

164209
def teste_colisao_com_chao(self):
210+
"""
211+
Testando que o passáro colido quando sua posição y é menor ou igual a 0
212+
:return:
213+
"""
165214
passaro = PassaroVermelho(0, 0)
166215
passaro.colidir_com_chao()
167216
self.assertEqual(DESTRUIDO, passaro.status, 'Deve colidir com chão sempre que y<=0')
@@ -180,6 +229,10 @@ def teste_colisao_com_chao(self):
180229

181230

182231
class PassaroAmareloTests(PassaroBaseTests):
232+
"""
233+
Classe de Tests para passaros amarelos
234+
"""
235+
183236
def teste_status(self):
184237
passaro_amarelo = PassaroAmarelo(1, 1)
185238
self.assertEqual('A', passaro_amarelo.caracter())
@@ -191,54 +244,56 @@ def teste_velocidade_escalar(self):
191244
self.assertEqual(30, PassaroAmarelo.velocidade_escalar)
192245

193246
def teste_lacamento_vertical(self):
247+
"""
248+
Tests de lançamento vertical. Nele, o passaro só se move verticalmente e sua posição y se matém contanstante
249+
:return:
250+
"""
194251
passaro_amarelo = PassaroAmarelo(1, 1)
195252
passaro_amarelo.lancar(90, 2) # passaro lancado a 90 graus no tempo 2 segundos
196253

197-
# função auxiliar que mantém x fixo com valor 1, status Ativo, variando apenas o tempo e a posição y
198-
def assert_vertical(y, tempo):
199-
self.assert_passaro_posicao(1, y, ATIVO, passaro_amarelo, tempo)
254+
200255

201256
# subindo
202257

203-
assert_vertical(1, 2.0)
204-
assert_vertical(1, 2.01)
205-
assert_vertical(2, 2.02)
206-
assert_vertical(2, 2.03)
207-
assert_vertical(2, 2.04)
208-
assert_vertical(2, 2.05)
258+
self.assert_posicao_vertical(1, 2.0, passaro_amarelo)
259+
self.assert_posicao_vertical(1, 2.01, passaro_amarelo)
260+
self.assert_posicao_vertical(2, 2.02, passaro_amarelo)
261+
self.assert_posicao_vertical(2, 2.03, passaro_amarelo)
262+
self.assert_posicao_vertical(2, 2.04, passaro_amarelo)
263+
self.assert_posicao_vertical(2, 2.05, passaro_amarelo)
209264

210265
# descendo
211266

212-
assert_vertical(46, 5.26)
213-
assert_vertical(46, 5.27)
214-
assert_vertical(46, 5.279999999999999)
215-
assert_vertical(46, 5.29)
216-
assert_vertical(46, 5.3)
217-
assert_vertical(46, 5.3100000000000005)
218-
assert_vertical(45, 5.32)
219-
assert_vertical(45, 5.33)
220-
assert_vertical(45, 5.34)
221-
assert_vertical(45, 5.35)
222-
assert_vertical(45, 5.359999999999999)
223-
assert_vertical(45, 5.37)
224-
assert_vertical(45, 5.38)
225-
assert_vertical(45, 5.390000000000001)
226-
assert_vertical(45, 5.4)
227-
assert_vertical(45, 5.41)
228-
assert_vertical(45, 5.42)
229-
assert_vertical(45, 5.43)
230-
assert_vertical(45, 5.4399999999999995)
231-
assert_vertical(45, 5.45)
232-
assert_vertical(45, 5.46)
233-
assert_vertical(45, 5.470000000000001)
234-
assert_vertical(45, 5.48)
267+
self.assert_posicao_vertical(46, 5.26, passaro_amarelo)
268+
self.assert_posicao_vertical(46, 5.27, passaro_amarelo)
269+
self.assert_posicao_vertical(46, 5.279999999999999, passaro_amarelo)
270+
self.assert_posicao_vertical(46, 5.29, passaro_amarelo)
271+
self.assert_posicao_vertical(46, 5.3, passaro_amarelo)
272+
self.assert_posicao_vertical(46, 5.3100000000000005, passaro_amarelo)
273+
self.assert_posicao_vertical(45, 5.32, passaro_amarelo)
274+
self.assert_posicao_vertical(45, 5.33, passaro_amarelo)
275+
self.assert_posicao_vertical(45, 5.34, passaro_amarelo)
276+
self.assert_posicao_vertical(45, 5.35, passaro_amarelo)
277+
self.assert_posicao_vertical(45, 5.359999999999999, passaro_amarelo)
278+
self.assert_posicao_vertical(45, 5.37, passaro_amarelo)
279+
self.assert_posicao_vertical(45, 5.38, passaro_amarelo)
280+
self.assert_posicao_vertical(45, 5.390000000000001, passaro_amarelo)
281+
self.assert_posicao_vertical(45, 5.4, passaro_amarelo)
282+
self.assert_posicao_vertical(45, 5.41, passaro_amarelo)
283+
self.assert_posicao_vertical(45, 5.42, passaro_amarelo)
284+
self.assert_posicao_vertical(45, 5.43, passaro_amarelo)
285+
self.assert_posicao_vertical(45, 5.4399999999999995, passaro_amarelo)
286+
self.assert_posicao_vertical(45, 5.45, passaro_amarelo)
287+
self.assert_posicao_vertical(45, 5.46, passaro_amarelo)
288+
self.assert_posicao_vertical(45, 5.470000000000001, passaro_amarelo)
289+
self.assert_posicao_vertical(45, 5.48, passaro_amarelo)
235290

236291
# preparando para impacto no chão
237-
assert_vertical(1, 8.0)
238-
assert_vertical(1, 8.01)
292+
self.assert_posicao_vertical(1, 8.0, passaro_amarelo)
293+
self.assert_posicao_vertical(1, 8.01, passaro_amarelo)
239294

240295
# colisão
241-
assert_vertical(0, 8.04)
296+
self.assert_posicao_vertical(0, 8.04, passaro_amarelo)
242297
passaro_amarelo.colidir_com_chao()
243298
self.assertEqual(DESTRUIDO, passaro_amarelo.status)
244299

@@ -681,3 +736,10 @@ def test_lancamento_45_graus(self):
681736
# t = 2 + (delta_t / 100)
682737
# x, y = passaro_amarelo.calcular_posicao(t)
683738
# print(' self.assert_passaro_posicao(%s, %s, ATIVO, passaro_amarelo, %s)' % (x, y, t))
739+
740+
def assert_posicao_vertical(self, y, tempo, passaro):
741+
"""
742+
Método auxiliar que mantém x fixo com valor 1, status Ativo, variando apenas o tempo e a posição y
743+
Atenção, esse não é um teste porque não começa com prefixo "test"
744+
"""
745+
self.assert_passaro_posicao(1, y, ATIVO, passaro, tempo)

0 commit comments

Comments
 (0)