Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 3f0d4f9

Browse files
author
renzon
committed
Documentação da classe fase
1 parent f67b4c4 commit 3f0d4f9

File tree

3 files changed

+34
-44
lines changed

3 files changed

+34
-44
lines changed

README.md

+15-34
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
Python Birds
22
===========
33

4+
Essa versão é a mais simples. Ela não contém replay nem reset, de forma que o jogo não pode retroceder.
5+
6+
Para versão mais complexa, acesse a branch [master](https://github.com/pythonprobr/pythonbirds/tree/master)
7+
48
Projeto para Ensino de Programação Orientadas a Objetos em Python.
59

610
A versão utilizada para desenvolvimento foi Python 3.4
@@ -11,20 +15,20 @@ Um vídeo fala mais que 1000 palavras: [Python Birds](https://www.youtube.com/wa
1115

1216
Instalar [Python 3](https://www.python.org/download/).
1317

14-
Baixar a versão contendo apenas a [estrutura do projeto](https://github.com/pythonprobr/pythonbirds/archive/diversao.zip)
18+
Baixar o zip do projeto (botão Download Zip)
1519

1620
Os testes se encontram dentro do pacote "testes" e servem para definir a dinâmica das classes. Para rodar todos testes, execute
1721

1822
python executor_de_testes.py
1923

20-
Explicação detalhada sobre classes e métodos se encontram em [Simplificação do Jogo](#simplifica%C3%A7%C3%A3o-do-jogo)
24+
Explicação detalhada sobre classes e métodos se encontram nos scripts atores.py e fase.py
2125

2226
## Ordem de desenvolvimento
2327

2428
A ordem preferida é começar pelos atores, seguindo a ordem dos testes presentes no script atores_testes.py.
2529
Depois passar para a fase_teste.py, onde é implementada uma fase.
2630

27-
Após o desenvolvimento é possível emular um jogo que termina em vitória rodando:
31+
É possível emular um jogo que termina em vitória rodando:
2832

2933
python fase_testes.py
3034

@@ -70,27 +74,10 @@ Classe base para todos atores do jogo.
7074
Método que recebe o tempo (float) como parâmetro e retorna uma tupla com 2 elementos, posição horizontal (x) como
7175
primeiro elemento e posição vertical (y) como segundo.
7276

73-
### Método resetar
74-
75-
Método que ao ser executado, seta o valor de _tempo_de_colisão para None
76-
77-
### Método status
78-
79-
O ator possui os status Ativo ou Destruido. Além disso o status deve ser dependente do tempo. Ou seja, se o ator foi
80-
destruido no tempo 1, ele deve possuir status Ativo antes desse tempo, como 0.9, e Destruido após esse tempo, como em tempo 1.1.
81-
8277
### Método colidir
8378

8479
O método colidir executa a lógica de colisão. A colisão só ocorre com atores ativos e que estejam
8580
em pontos vizinhos.
86-
O ator deve guardar o tempo de colisão para calcular corretamente seu status.
87-
Além disso, um intervalo é recebido como parâmetro indicando qual a tolerância para considerar um ponto vizinho.
88-
Por padrão, seu valor é 1.
89-
90-
## Método caracter
91-
92-
O método caracter retorna 'A' quando o ator tem status Ativo e '+' caso contrário. Também é depende do tempo.
93-
9481

9582
## Classe Obstaculo
9683

@@ -111,38 +98,31 @@ representação é a o caracter "@".
11198

11299
Classe base de todos os passáros. Cada tipo possui uma velocidade de lançamento (v). No lançamento o jogador escolhe o
113100
ângulo (teta), em graus, no qual o passáro deve ser lançado. O lançamento respeita as regras de lançamento oblíquo com
114-
gravidade (G) constante e igual a 10 m/s^2.
101+
gravidade (GRAVIDADE) constante e igual a 10 m/s^2.
115102

116103
### Método lancar
117104

118105
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
119106
de lançamento para cálculo de sua posíção. Lembrar que o tempo das fórmulas é delta_t = T_final - T_inicial
120107

121-
### Método de resetar
122-
123-
O método resetar deve chamar o método resetar de Ator.
124-
Além disso, deve setar como Nome os parầmetros de tempo de lançamento e ângulo de lançamento
125-
126108

127109
### Método de colidir_com_chao
128110

129111
Todo pássaro que colidir com o chão (y<=0) deve ser destruído.
130112

131-
### Método foi lançado
113+
### Método foi_lançado
132114

133115
Esse método deve retornar verdadadeiro se o pássaro foi lançado (tempo de lançamento é None).
134116
Caso contrário deve retornar falso
135117

136-
### Lançamentomento
118+
### Lançamento
137119

138-
Se o pássaro ainda não foi lançado, ou se o tempo de jogo é menor que o tempo de lançamento,
139-
O pássaro deve permanecer na posição inicial.
120+
Se o pássaro ainda não foi lançado, o pássaro deve permanecer na posição inicial.
140121

141-
Calso tenha sido lançado e seu status esteja ativo, sua posição deve ser calculada de acordo com o lançamento oblíquo.
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.
142123
Nesse caso, delta_t vai ser igual ao tempo do jogo menos o tempo do lançamento.
143124

144-
Caso contrário, ele deve retornar a posição onde colidiu. Para isso, pasta
145-
calcular o ponto em que o pássaro estava no tempo da colisão.
125+
Caso contrário, ele deve retornar a posição onde colidiu.
146126

147127
#### Método posicao_horizontal
148128

@@ -195,7 +175,8 @@ Recebe o tempo como parâmetro e retorna mensagem com status do jogo.
195175

196176
### Método lancar
197177

198-
Recebe o ângulo e o tempo do lançamento. Deve delegar o lançamento ao primeiro pássaro ativo da lista de pássaros.
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
179+
ainda não foi lançado.
199180

200181
### Método calcular_pontos
201182

placa_grafica_tkinter.py

+3-1
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ def _animar():
7373

7474
camada_de_atores.create_line(52, 493, 52 + tamanho_seta * math.cos(angulo_rad),
7575
493 + tamanho_seta * math.sin(angulo_rad), width=1.5)
76-
camada_de_atores.create_text(35, 493, text=u"%d°" % angulo)
76+
camada_de_atores.create_text(35, 493, text="%d°" % angulo)
7777
for ponto in fase.calcular_pontos(tempo):
7878
plotar(camada_de_atores, ponto)
7979
tela.after(passo, _animar)
@@ -88,6 +88,7 @@ def _ouvir_comandos_lancamento(evento):
8888
fase.lancar(angulo, tempo)
8989

9090
def _replay(event):
91+
return
9192
nonlocal tempo
9293
nonlocal delta_t
9394
if fase.acabou(tempo):
@@ -96,6 +97,7 @@ def _replay(event):
9697

9798

9899
def _jogar_novamente(event):
100+
return
99101
nonlocal tempo
100102
nonlocal delta_t
101103
if fase.acabou(tempo):

testes/fase_testes.py

+16-9
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,22 @@
22
from itertools import chain
33

44
import os
5+
from os import path
56
from unittest.case import TestCase
67
import math
78
import sys
89

10+
project_dir = path.dirname(__file__)
11+
project_dir = path.join('..')
12+
sys.path.append(project_dir)
13+
from placa_grafica_tkinter import rodar_fase
14+
915
project_dir = os.path.join(os.path.dirname(__file__), '..')
1016
project_dir = os.path.normpath(project_dir)
1117
sys.path.append(project_dir)
1218

1319
from atores import Obstaculo, Porco, PassaroVermelho, PassaroAmarelo, DESTRUIDO, ATIVO
1420
from fase import Fase, Ponto
15-
import placa_grafica
1621

1722

1823
class FaseTestes(TestCase):
@@ -192,19 +197,21 @@ def teste_calcular_pontos(self):
192197
fase_exemplo.calcular_pontos(i / 100)
193198
print(fase_exemplo.calcular_pontos(8.5))
194199

195-
196-
expected = [Ponto(32,11,'v'), Ponto(77,0,'a'), Ponto(70,2,'a'), Ponto(31,10,' '), Ponto(78,1,'+'), Ponto(70,1,'+')]
200+
expected = [Ponto(32, 11, 'v'), Ponto(77, 0, 'a'), Ponto(70, 2, 'a'), Ponto(31, 10, ' '), Ponto(78, 1, '+'),
201+
Ponto(70, 1, '+')]
197202

198203
self.assertListEqual(expected, fase_exemplo.calcular_pontos(8.5))
199204

200205
self.assertTrue(fase_exemplo.acabou())
201206

202207

203-
def criar_fase_exemplo():
204-
fase_exemplo = Fase()
205-
passaros = [PassaroVermelho(3, 3), PassaroAmarelo(3, 3), PassaroAmarelo(3, 3)]
206-
porcos = [Porco(78, 1), Porco(70, 1)]
207-
obstaculos = [Obstaculo(31, 10)]
208+
def criar_fase_exemplo(multiplicador=1):
209+
fase_exemplo = Fase(1 if multiplicador == 1 else 32)
210+
passaros = [PassaroVermelho(3 * multiplicador, 3 * multiplicador),
211+
PassaroAmarelo(3 * multiplicador, 3 * multiplicador),
212+
PassaroAmarelo(3 * multiplicador, 3 * multiplicador)]
213+
porcos = [Porco(78 * multiplicador, multiplicador), Porco(70 * multiplicador, multiplicador)]
214+
obstaculos = [Obstaculo(31 * multiplicador, 10 * multiplicador)]
208215

209216
fase_exemplo.adicionar_passaro(*passaros)
210217
fase_exemplo.adicionar_porco(*porcos)
@@ -214,4 +221,4 @@ def criar_fase_exemplo():
214221

215222

216223
if __name__ == '__main__':
217-
placa_grafica.animar(criar_fase_exemplo())
224+
rodar_fase(criar_fase_exemplo(10))

0 commit comments

Comments
 (0)