• Jogos
  • 04. Classes e mais
  • Classes e mais recursos em Pygame

Classes e mais recursos em Pygame#

Agora que já discutimos a utilidade de usar classes em nossos programas, temos duas atividades:

  1. Handout de classes: sintaxe básica de classes e alguns exercícios simples. Faça este antes de continuar
  2. 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 e y: coordenadas do meteoro
  • w e h: dimensões do meteoro
  • vx e vy: velocidade do meteoro
  • imagem: 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.

m = Meteoro(10, 20, 0, 10, assets['meteoro'])

A classe Meteoro deve ter os seguintes métodos.

  • atualiza_posicao(dt): deve ser chamado na função atualiza_estado do jogo e move o meteoro.
  • colide_rect(x, y, w, h): use para checar se o meteoro bateu no jogador. Retorna True 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 e y: coordenadas do jogador
  • w e h: dimensões do jogador
  • vx e vy: velocidade do jogador
  • imagem: 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

Marque aqui que finalizou as atividade de Pygame! A ideia é mostrar seu trabalho para algum dos professores e discutir como poderia avançar a partir de agora.

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).