• Jogos
  • 04. Adicionando interação

Adicionando Interação

Movimentando um personagem

Nesta sequência de exercícios vamos produzir o seguinte "jogo" (as setas não fazem parte do jogo, elas apenas mostram qual tecla estava apertada no momento):

Temos uma novidade em relação aos outros exercícios de introdução: precisamos saber onde está a raposa atualmente para podermos movimentá-la para a direita ou esquerda. Ou seja, o jogo tem um estado que representa o que está acontecendo no jogo neste momento. Uma das partes importantes da função recebe_eventos é modificar o estado do jogo baseado nas ações do usuário.

Exercício 1

Vamos representar o estado do jogo como um dicionário em que guardamos na chave "jogador_x" a coordenada x da raposa. O mesmo vale para a coordenada y da nave, que será guardada na chave "jogador_y".

Como você pintaria a raposa na tela? Suponha que as seguintes variáveis existem.

window # tela do jogo
assets = {
    'jogador': ... # imagem da raposa
}
state = {
    'jogador_x': ... # posição x
    'jogador_y': ... # posição y
}

Resposta

Para mostrar a imagem da raposa na tela usamos

window.blit(assets['jogador'], (
    state['jogador_x'], state['jogador_y']
))

Lembrando que a função blit recebe a imagem a ser mostrada e uma tupla com sua posição.

Exercício 2

Agora vamos pensar como modificaríamos a função recebe_eventos. Seguimos usando as variáveis definidas no exercício anterior. Dado o código da função recebe_eventos abaixo, qual das opções você usaria para mover a raposa para a direita?

def recebe_eventos(state):
    for evento in pygame.event.get():
        if evento.type == pygame.QUIT:
            return False

        # TODO: qual código vai aqui?

    return True

Resposta

Precisamos checar duas coisas:

  1. o evento recebido é um evento de tecla pressionada?
  2. se sim, a tecla pressionada é seta para direita?

As duas primeiras alternativas checam direto evento.key, porém esse atributo key ´so existe em eventos de teclado. Se o evento for de mouse, por exemplo, o código daria erro.

Agora precisamos atualizar o estado do jogo. As coordenadas de pygame crescem para a direita e para baixo. Ou seja, para mover a raposa para direita precisamos somar em state['jogador_x'].

Exercício 3

Agora vamos implementar! Seu trabalho será:

  1. Criar o dicionário state na função inicializa e retorná-lo junto com assets e window;
  2. Receber o dicionário state como argumento da função desenha como fizemos no roteiro anterior;
  3. Receber o dicionário state como argumento da função recebe_eventos como fizemos acima.

O exercício já possui algum código base usando a estrutura que vimos nos handouts anteriores e também uma imagem da raposa para ser usada no jogo.

Este exercício possui apenas um teste que você pode usar para enviar sua solução para o nosso servidor. Você deverá testar seu funcionamento manualmente, executando o jogo e verificando que o comportamento esperado acontece.

Acessar exercício