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:
x
ey
: coordenadas do meteorow
eh
: dimensões do meteorovx
evy
: 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_estado
do jogo e move o meteoro.colide_rect(x, y, w, h)
: use para checar se o meteoro bateu no jogador. RetornaTrue
se 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:
x
ey
: coordenadas do jogadorw
eh
: dimensões do jogadorvx
evy
: 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).