Classes e mais recursos em Pygame#
Agora que já discutimos a utilidade de usar classes em nossos programas, temos duas atividades:
- Handout de classes: sintaxe básica de classes e alguns exercícios simples. Faça este antes de continuar
- Utilização de classes em Pygame (este handout)
Podemos usar classes para simplificar o código de nossos jogos. Vamos continuar o jogo básico da aula Colisões, modificando o código para usar classes.
Etapa 1: classe Meteoro#
Vamos criar uma classe Meteoro que agrupe todo o código referente aos meteoros que caem do topo da tela. Nossa classe terá os seguintes atributos:
xey: coordenadas do meteoroweh: dimensões do meteorovxevy: velocidade do meteoroimagem: a imagem do meteoro
Todos esses atributos devem ser passados como argumentos na criação do meteoro, que seria feita como abaixo. Os valores de x, y, vx e vy são somente de exemplo.
A classe Meteoro deve ter os seguintes métodos.
atualiza_posicao(dt): deve ser chamado na funçãoatualiza_estadodo jogo e move o meteoro.colide_rect(x, y, w, h): use para checar se o meteoro bateu no jogador. RetornaTruese houve a colisão.
Note que adotar classes muda muito o código do nosso jogo. Uma das vantagens é tirar código das funções principais do jogo e agrupar tudo relativo a um tipo de elemento do jogo na classe. Por exemplo, ao invés de termos vários itens representando meteoros no dicionário state agora podemos ter somente uma chave "meteoros" contendo uma lista de objetos do tipo Meteoro.
Etapa 2: classe Jogador#
Podemos fazer o mesmo com toda a lógica e dados referentes ao jogador. Crie uma classe Jogador com os seguintes atributos:
xey: coordenadas do jogadorweh: dimensões do jogadorvxevy: velocidade do jogadorimagem: a imagem do jogador
E os seguintes métodos:
move_para_a_direita/esquerda: move a nave
Novamente, adapte o código da estrutura básica fornecida para usar os recursos da sua classe jogador. O passo final deste handout é modificar a função Meteoro.collide_rect para Meteoro.collide(obj). Essa variávei obj será um Meteoro ou Jogador e contém os campos x, y, w e h. Assim temos um código ainda mais limpo em atualiza_estado e mantemos a lógica de colisão inteira dentro de Meteoro.
Exercise 1
Avançando em Pygame#
Agora que você já domina o básico de criação de jogos com Pygame está na hora de seguir para lógicas mais complexas. O repositório Pygame snippets tem diversos exemplos de código comentados. Você pode estudá-los e adaptar o código para usar em seu projeto (sempre citando a fonte, é claro).