Neste segundo post, vamos melhorar nosso jogo.
Embora a nova versão rode em Python, ainda está muito anos 80.
A primeira coisa a corrigir é a animação. Como estamos usando um sistema de coordenadas de 280 por 192 pontos para simular as coordenadas do Apple, multiplicamos cada coordenada por 4 na hora de desenhar. Para deixar parecido com o Apple, eu reduzi o número de frames a 8 frames por segundo. Por isso a animação dá tantos saltos! Para fazer com que rode a 60 frames, temos que multiplicar as velocidades pela razão entre o número de frames antigos e o novo: 8/60. A nova versão define algumas constantes para isso:
FRAMES_ORIGINAL = 8 FRAMES_NOVO = 60 RATIO = FRAMES_ORIGINAL / FRAMES_NOVO
Olhando o código, fica fácil perceber que o tiro, o avião e as bases são objetos. Vamos extrair o código do jogo e dividir as operações em atualiza e desenha. No caso, atualiza calcula a nova posição do objeto e desenha realiza o desenho em si.
class Aviao: def __init__(self, jogo, cor=3): self.cor = cor self.velocidade_aviao = (random.randint(0, 6) + 4) * RATIO self.altura_do_aviao = 159 - (random.randint(0, 135) + 11) self.posicao_do_aviao = self.velocidade_aviao self.ativo = True self.jogo = jogo def desenha(self): y = self.altura_do_aviao x = self.posicao_do_aviao set_color(self.cor) pyglet.graphics.draw(6, pyglet.gl.GL_LINE_LOOP, ('v2f', (x, y, x, y - 8, x + 3, y - 2, x + 12, y - 2, x + 14, y, x, y))) def desativa(self): self.ativo = False self.jogo.desativa(self) def atualiza(self): self.posicao_do_aviao += self.velocidade_aviao if self.posicao_do_aviao > 265: self.desativa()
O código completo pode ser visto aqui:
Tente entender como a forma de desenhar em etapas, separando o desenho da atualização, permite que exibamos a mensagem com a imagem do jogo no fundo, ao invés da tela preta..
Os próximos passos são:
- Limpar as classes
- Vários aviões
- Múltiplos tiros.
- Generalizar os objetos do jogo em uma super classe.
- Exibir um placar
- Atribuir teclas para atirar e jogar de novo ou sair.
Até o próximo!
Nenhum comentário:
Postar um comentário