8000 close #9 · pythonprobr/pythonbirds@31a68fa · GitHub
[go: up one dir, main page]

Skip to content

Commit 31a68fa

Browse files
author
renzon
committed
close #9
Merge branches 'simples' and 'simples-solucao' of github.com:pythonprobr/pythonbirds into simples Conflicts: atores.py fase.py testes/atores_testes.py testes/fase_testes.py
2 parents c44cc81 + 84e75e5 commit 31a68fa

File tree

6 files changed

+189
-141
lines changed

6 files changed

+189
-141
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

atores.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,11 @@ def __init__(self, x=0, y=0):
2424
"""
2525
self.y = y
2626
self.x = x
27-
self.caracter = self._caracter_ativo
2827
self.status = ATIVO
2928

29+
def caracter(self):
30+
return self._caracter_ativo if self.status == ATIVO else self._caracter_destruido
31+
3032
def calcular_posicao(self, tempo):
3133
"""
3234
Método que calcula a posição do ator em determinado tempo.
@@ -47,10 +49,12 @@ def colidir(self, outro_ator, intervalo=1):
4749
4850
:param outro_ator: Ator a ser considerado na colisão
4951
:param intervalo: Intervalo a ser considerado
52+
:return:
5053
"""
5154
pass
5255

5356

57+
5458
class Obstaculo(Ator):
5559
pass
5660

fase.py

Lines changed: 12 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,11 @@
33
from atores import ATIVO
44

55

6+
VITORIA = 'VITORIA'
7+
DERROTA = 'DERROTA'
8+
EM_ANDAMENTO = 'EM_ANDAMENTO'
9+
10+
611
class Ponto():
712
def __init__(self, x, y, caracter):
813
self.caracter = caracter
@@ -12,6 +17,9 @@ def __init__(self, x, y, caracter):
1217
def __eq__(self, other):
1318
return self.x == other.x and self.y == other.y and self.caracter == other.caracter
1419

20+
def __hash__(self):
21+
return hash(self.x) ^ hash(self.y)
22+
1523
def __repr__(self, *args, **kwargs):
1624
return "Ponto(%s,%s,'%s')" % (self.x, self.y, self.caracter)
1725

@@ -53,19 +61,6 @@ def adicionar_passaro(self, *passaros):
5361
"""
5462
pass
5563

56-
def acabou(self):
57-
"""
58-
Método que retorna verdadeiro se o jogo acabou e falso caso contrário
59-
60-
O jogo pode acabar por dois motivos:
61-
62-
1. Não existem mais porcos ativos no jogo
63-
2. Não existem mais pássaros ativos no jogo
64-
65-
:return: booleano
66-
"""
67-
return True
68-
6964
def status(self):
7065
"""
7166
Método que indica com mensagem o status do jogo
@@ -76,9 +71,9 @@ def status(self):
7671
7772
Se o jogo acabou com vitória (não existe porco ativo), retorna essa mensagem
7873
79-
:return: Mensagem de status
74+
:return:
8075
"""
81-
return 'Jogo em encerrado. Você perdeu!'
76+
return EM_ANDAMENTO
8277

8378
def lancar(self, angulo, tempo):
8479
"""
@@ -93,6 +88,7 @@ def lancar(self, angulo, tempo):
9388
"""
9489
pass
9590

91+
9692
def calcular_pontos(self, tempo):
9793
"""
9894
Lógica que retorna os pontos a serem exibidos na tela.
@@ -107,5 +103,5 @@ def calcular_pontos(self, tempo):
107103
return pontos
108104

109105
def _transformar_em_ponto(self, ator):
110-
return Ponto(ator.x, ator.y, ator.caracter)
106+
return Ponto(ator.x, ator.y, ator.caracter())
111107

placa_grafica_tkinter.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66from os import path
77
import atores
88

9-
from fase import Fase
9+
from fase import Fase, EM_ANDAMENTO, VITORIA
1010
from atores import PassaroVermelho, PassaroAmarelo, Porco, Obstaculo
1111

1212
ALTURA_DA_TELA = 600 # px
@@ -57,10 +57,10 @@ def _animar():
5757
if tempo <= 0:
5858
tempo = 0
5959
delta_t /= -multiplicador_rebobinar
60-
if fase.acabou():
60+
if fase.status() != EM_ANDAMENTO:
6161
camada_de_atores.create_image(162, 55, image=PYTHONBIRDS_LOGO, anchor=NW)
6262
camada_de_atores.create_image(54, 540, image=MENU, anchor=NW)
63-
if 'ganhou' in fase.status():
63+
if fase.status() == VITORIA:
6464
img = VOCE_GANHOU
6565
else:
6666
img = VOCE_PERDEU

0 commit comments

Comments
 (0)
0