pratica

Recebendo Comandos do Teclado

Aprenda sobre recebendo comandos do teclado

40 min
Aula 3 de 5

⌨️ Recebendo Comandos do Teclado

Olá, futuro Game Maker! 👋

No módulo anterior, aprendemos a dar vida aos nossos atores na tela, mas eles ainda estão um pouco parados, não é? Para que nossos jogos sejam divertidos e interativos, precisamos que os jogadores possam controlar os atores! E a forma mais comum de fazer isso em jogos de computador é usando o teclado.

Nesta aula prática, vamos aprender como fazer nossos atores reagirem aos comandos que você digita no teclado. Prepare-se para dar o controle aos seus jogadores! 🎮


🚀 1. Introdução: Dando Vida aos Controles

Imagine um jogo de nave espacial. Você precisa mover a nave para a esquerda e para a direita, talvez atirar. Ou em um jogo de plataforma, seu personagem precisa pular e andar. Tudo isso começa com o teclado!

Com o Pgzero, é super fácil detectar quando uma tecla é pressionada. Vamos explorar duas maneiras principais de fazer isso:

  1. Verificando o estado do teclado no update(): Ideal para movimentos contínuos (como andar enquanto a tecla está pressionada).
  2. Usando funções de evento (on_key_down, on_key_up): Ideal para ações que acontecem uma única vez quando a tecla é pressionada ou solta (como pular ou atirar).

Vamos começar a codificar! 🧑‍💻


🧐 2. Entendendo o Teclado no Pgzero

O Pgzero nos dá um objeto especial chamado keyboard. Ele nos permite saber quais teclas estão sendo pressionadas a cada momento. Além disso, podemos usar funções especiais para reagir a eventos de teclado.

2.1. 🕹️ Movimento Contínuo com keyboard no update()

A função update() é chamada várias vezes por segundo. Isso a torna perfeita para verificar se uma tecla está sendo mantida pressionada e, se sim, mover nosso ator continuamente.

O objeto keyboard possui "propriedades" para cada tecla. Por exemplo, keyboard.left é True se a tecla seta para a esquerda estiver pressionada, e False caso contrário.

Exemplo:

Vamos fazer um ator se mover para a esquerda e para a direita usando as setas.

# Largura e altura da janela do jogo
WIDTH = 800
HEIGHT = 600
 
# Nosso ator
nave = Actor('nave') # Certifique-se de ter uma imagem 'nave.png' na pasta 'images'
nave.pos = (WIDTH / 2, HEIGHT / 2) # Posição inicial no centro
 
# Velocidade da nave
VELOCIDADE = 3
 
def draw():
    screen.clear() # Limpa a tela a cada frame
    nave.draw()    # Desenha a nave
 
def update():
    # Verifica se a tecla seta para a esquerda está pressionada
    if keyboard.left:
        nave.x -= VELOCIDADE # Move a nave para a esquerda
    
    # Verifica se a tecla seta para a direita está pressionada
    if keyboard.right:
        nave.x += VELOCIDADE # Move a nave para a direita
    
    # Opcional: Limitar a nave dentro da tela
    if nave.left < 0:
        nave.left = 0
    if nave.right > WIDTH:
        nave.right = WIDTH
 

O que está acontecendo aqui? 🤔

  • Na função update(), estamos constantemente perguntando: "A tecla left está pressionada?" e "A tecla right está pressionada?".
  • Se a resposta for sim (True), ajustamos a posição x da nossa nave.
  • Isso cria um movimento suave e contínuo enquanto a tecla estiver pressionada.

2.2. 💥 Ações Pontuais com on_key_down() e on_key_up()

Às vezes, queremos que algo aconteça apenas uma vez quando uma tecla é pressionada, e não continuamente. Por exemplo, um pulo ou um tiro. Para isso, usamos funções de evento:

  • on_key_down(key): Esta função é chamada uma vez quando uma tecla é pressionada.
  • on_key_up(key): Esta função é chamada uma vez quando uma tecla é solta.

A variável key que é passada para essas funções nos diz qual tecla foi pressionada ou solta. Para comparar, usamos constantes do Pgzero, como keys.SPACE, keys.UP, keys.A, etc.

Exemplo:

Vamos fazer a nave mudar de cor quando a tecla SPACE (espaço) for pressionada e voltar ao normal quando ela for solta.

# Largura e altura da janela do jogo
WIDTH = 800
HEIGHT = 600
 
# Nosso ator
nave = Actor('nave') # Certifique-se de ter uma imagem 'nave.png' na pasta 'images'
nave.pos = (WIDTH / 2, HEIGHT / 3) # Posição inicial
 
# Cor original da nave (para o exemplo de mudança de cor)
COR_ORIGINAL = 'nave'
COR_ATIVADA = 'nave_fogo' # Certifique-se de ter uma imagem 'nave_fogo.png'
 
def draw():
    screen.clear()
    nave.draw()
 
# Não precisamos de update() para este exemplo específico, mas podemos combiná-lo com o anterior!
 
# Função chamada quando uma tecla é pressionada
def on_key_down(key):
    if key == keys.SPACE: # Se a tecla ESPAÇO foi pressionada
        print("Espaço pressionado! Ativando modo fogo! 🔥")
        nave.image = COR_ATIVADA # Muda a imagem da nave
 
# Função chamada quando uma tecla é solta
def on_key_up(key):
    if key == keys.SPACE: # Se a tecla ESPAÇO foi solta
        print("Espaço solto! Desativando modo fogo. 🌬️")
        nave.image = COR_ORIGINAL # Volta a imagem original da nave
 

O que está acontecendo aqui? 🤔

  • Quando a tecla SPACE é pressionada, on_key_down é ativada. Dentro dela, verificamos se a tecla é keys.SPACE e, se for, mudamos a imagem da nave.
  • Quando a tecla SPACE é solta, on_key_up é ativada. Fazemos a mesma verificação e mudamos a imagem de volta.
  • Isso é ótimo para ações como "atirar" (pressionou uma vez, atirou), "pular" (pressionou uma vez, personagem pula), etc.

🎯 3. Exercícios Práticos: Mãos na Massa!

Agora é a sua vez de combinar o que aprendeu! Vamos criar um pequeno jogo onde você controla uma nave e ela pode "atirar".

🚀 Desafio 1: Nave Espacial Completa!

Vamos criar um jogo simples onde você controla uma nave espacial que pode se mover em todas as direções e atirar.

Objetivo: Fazer uma nave se mover para cima, baixo, esquerda, direita e "atirar" (imprimir uma mensagem no console) quando a tecla SPACE for pressionada.

Passos:

  • Crie um novo arquivo Python para o seu jogo (ex: nave_game.py).
  • Defina WIDTH e HEIGHT para a janela do jogo.
  • Crie um ator nave (use uma imagem como 'nave.png', você pode encontrar ou desenhar uma).
  • Defina uma velocidade para a nave (ex: VELOCIDADE = 5).
  • Implemente a função draw() para limpar a tela e desenhar a nave.
  • Implemente a função update():
    • Use if keyboard.left: para mover a nave para a esquerda.
    • Use if keyboard.right: para mover a nave para a direita.
    • Use if keyboard.up: para mover a nave para cima.
    • Use if keyboard.down: para mover a nave para baixo.
    • Bônus: Adicione limites para que a nave não saia da tela.
  • Implemente a função on_key_down(key):
    • Se a tecla keys.SPACE for pressionada, imprima a mensagem "Pew! Pew! 💥" no console.
Dica: Como adicionar limites na função update()
    # Limites para a nave
    if nave.left < 0:
        nave.left = 0
    if nave.right > WIDTH:
        nave.right = WIDTH
    if nave.top < 0:
        nave.top = 0
    if nave.bottom > HEIGHT:
        nave.bottom = HEIGHT

🤸 Desafio 2: Personagem Saltitante

Agora, vamos fazer um personagem que pode andar para os lados e pular!

Objetivo: Fazer um personagem se mover para a esquerda e direita com as setas e pular quando a tecla SPACE for pressionada.

Passos:

  • Use o código do Desafio 1 como base, ou crie um novo arquivo.
  • Mude o ator para um personagem (ex: 'personagem.png'). Posicione-o na parte inferior da tela.
  • Mantenha o movimento para a esquerda (keyboard.left) e direita (keyboard.right) na função update().
  • Na função on_key_down(key):
    • Se a tecla keys.SPACE for pressionada, faça o personagem "pular".
    • Para um pulo simples: diminua o y do personagem (ex: personagem.y -= 50).
    • Bônus: Para um pulo mais realista, você pode usar animate() para mover o personagem para cima e depois para baixo.
Dica: Como fazer um pulo simples com animate()
# No início do seu código, após definir o personagem
personagem = Actor('personagem')
personagem.pos = (WIDTH / 2, HEIGHT - 50) # Posição inicial no chão
 
# ...
 
def on_key_down(key):
    global personagem # Se 'personagem' for uma variável global
    if key == keys.SPACE:
        # Anima o personagem para subir e depois descer
        animate(personagem, duration=0.2, y=personagem.y - 80).then(
            animate(personagem, duration=0.2, y=HEIGHT - 50) # Volta para o chão
        )

📝 4. Resumo e Próximos Passos

Parabéns! 🎉 Você deu um grande passo para tornar seus jogos interativos!

Nesta aula, aprendemos:

  • Como usar o objeto keyboard dentro da função update() para detectar teclas pressionadas continuamente, ideal para movimento.
  • Como usar as funções de evento on_key_down() e on_key_up() para reagir a um único pressionamento ou soltura de tecla, ideal para ações pontuais como pular ou atirar.
  • Como usar keys.NOME_DA_TECLA para identificar qual tecla foi pressionada.

Agora seus atores não são mais bonecos parados, mas sim personagens que podem ser controlados pelo jogador!

No próximo módulo, vamos explorar como fazer nossos atores interagirem uns com os outros, como detectar colisões entre eles e dar ainda mais vida aos nossos jogos. Prepare-se para a diversão! 💥

© 2025 Escola All Dev. Todos os direitos reservados.

Recebendo Comandos do Teclado - Game Maker: Python com Pgzero para Crianças | escola.all.dev.br