Como Fazer um Jogo de Luta no Scratch: Passo a Passo pra 2 Jogadores

Jogo de luta no Scratch passo a passo: dois lutadores, controles para 2 jogadores no mesmo teclado, barra de vida, detecção de golpe, pulo e rounds.
Fazer um jogo de luta no Scratch é daqueles projetos que fazem os olhos de qualquer criança brilharem. Dois lutadores na tela, cada jogador em um lado do teclado, barra de vida descendo a cada golpe e aquela disputa boa entre irmãos ou colegas de sala. E o melhor: dá pra construir tudo isso só encaixando blocos coloridos, sem escrever uma linha de código.
Neste tutorial você vai montar um jogo de luta completo pra 2 jogadores no mesmo computador: lutadores com animações, controles separados, sistema de vida, detecção de golpe, pulo e até rounds com tela de vitória. Se essa é a sua primeira vez na plataforma, vale ver antes como criar um jogo no Scratch pra conhecer a tela, os sprites e o palco. Depois volte aqui e bora lutar.
O que você vai construir neste jogo de luta no Scratch
Antes de sair encaixando blocos, entenda o plano. O jogo terá:
- Dois sprites de lutadores, cada um com fantasias de parado, soco, chute e dano
- Jogador 1 controlando com W, A, S, D e atacando com F
- Jogador 2 controlando com as setas e atacando com K
- Uma variável de vida pra cada jogador, com barra visual na tela
- Detecção de golpe: só tira vida se estiver tocando no adversário E na fantasia de ataque
- Pulo com gravidade simulada usando uma variável de velocidade
- Rounds e uma tela de vitória no final
Parece muita coisa, mas cada pedaço é pequeno. Vamos por partes.
Passo 1: monte os dois lutadores
Crie um sprite novo e dê o nome de Lutador1. Você pode desenhar o seu próprio personagem no editor de pintura do Scratch ou escolher um da biblioteca (os sprites de pessoas com várias poses funcionam bem).
O segredo de um jogo de luta está nas fantasias. Abra a aba Fantasias do Lutador1 e crie quatro:
- parado: o lutador em posição de guarda
- soco: braço esticado pra frente
- chute: perna levantada
- dano: personagem inclinado pra trás, como se tivesse levado o golpe
Não precisa ser desenho de artista. Se estiver usando um sprite da biblioteca, duplique a fantasia original e mova o braço ou a perna com a ferramenta de seleção. O importante é que cada fantasia tenha o nome certo, porque vamos usar esses nomes nos blocos.
Com o Lutador1 pronto, clique com o botão direito nele e escolha duplicar. Renomeie a cópia pra Lutador2, pinte de outra cor pra diferenciar e vire o desenho pro outro lado (as fantasias podem ser espelhadas no editor). Posicione o Lutador1 na esquerda do palco e o Lutador2 na direita.
Passo 2: controles pra 2 jogadores no mesmo teclado
Aqui está o truque dos jogos de 2 jogadores no Scratch: cada sprite escuta teclas diferentes. Nada impede dois scripts de rodarem ao mesmo tempo, então cada jogador controla o seu lutador sem atrapalhar o outro.
No Lutador1, monte este script de movimento:
- "quando bandeira verde clicada"
- "sempre"
- dentro do sempre: "se tecla d pressionada, então adicione 8 a x"
- logo abaixo: "se tecla a pressionada, então adicione -8 a x"
No Lutador2, a mesma ideia com as setas:
- "quando bandeira verde clicada"
- "sempre"
- "se tecla seta para a direita pressionada, então adicione 8 a x"
- "se tecla seta para a esquerda pressionada, então adicione -8 a x"
Agora os ataques. No Lutador1, crie dois scripts separados:
- "quando tecla f pressionada": "mude fantasia para soco", "espere 0.2 segundos", "mude fantasia para parado"
- "quando tecla g pressionada": "mude fantasia para chute", "espere 0.3 segundos", "mude fantasia para parado"
No Lutador2, repita com K pro soco e L pro chute. Teste com a bandeira verde: os dois já andam e mostram os golpes. Falta alguém perder vida.
Passo 3: sistema de vida com barra visual
Vá em Variáveis e crie duas: vida1 e vida2. Marque a caixinha pra elas aparecerem no palco por enquanto.
No script da bandeira verde de cada lutador, adicione no começo: "mude vida1 para 100" (e vida2 no outro). Todo round começa com a vida cheia.
Mostrar só o número funciona, mas uma barra visual deixa o jogo com cara de fliperama. A forma mais simples: crie um sprite chamado Barra1, desenhe um retângulo verde comprido e faça 11 fantasias, cada uma um pouco menor que a anterior, da barra cheia (nome "10") até a vazia (nome "0"). Posicione no canto superior esquerdo.
No sprite Barra1, monte:
- "quando bandeira verde clicada"
- "sempre"
- "mude fantasia para (arredondar (vida1 / 10))"
O bloco de arredondar transforma a vida de 0 a 100 em um número de 0 a 10, que bate com o nome das fantasias. Duplique o sprite pra Barra2 no canto direito, trocando a variável. Atalho: se as 11 fantasias parecerem trabalho demais, use um retângulo só com o bloco "defina o tamanho para (vida1) %". Fica menos bonito, mas funciona.
Passo 4: detecção de golpe (a parte mais importante)
Aqui é onde muita gente trava, então vamos com calma. A pergunta que o jogo precisa responder o tempo todo é: o golpe acertou? E a resposta tem duas condições que precisam ser verdadeiras ao mesmo tempo:
- O lutador está tocando no adversário?
- O lutador está na fantasia de ataque (soco ou chute)?
Se a gente checasse só o toque, os lutadores perderiam vida só de encostar um no outro andando. Por isso a fantasia entra na jogada. No Lutador1, monte:
- "quando bandeira verde clicada"
- "sempre"
- "se ((tocando em Lutador2?) e ((número da fantasia = 2) ou (número da fantasia = 3))) então"
- dentro do se: "adicione -10 a vida2" e "espere 0.3 segundos"
Os números 2 e 3 são as posições das fantasias de soco e chute na lista (confira na aba Fantasias do seu sprite, a ordem pode variar). E aquele "espere 0.3 segundos" no final é essencial: sem ele, o "sempre" roda dezenas de vezes por segundo e um único soco encostado drena a vida inteira do adversário num piscar de olhos. A espera funciona como um tempo de recuperação entre um golpe e outro.
Faça o script espelhado no Lutador2, tirando vida de vida1. Capriche num detalhe: dentro do se, antes da espera, coloque no sprite atingido um "mude fantasia para dano" seguido de "espere 0.2 segundos" e "mude fantasia para parado". Faça isso com um recado: o atacante usa "envie dano-jogador2 a todos" e o Lutador2 troca a fantasia no "quando eu receber dano-jogador2". Esse feedback visual muda a sensação do jogo.
Passo 5: pulo com gravidade fake
Jogo de luta sem pulo fica sem graça. O Scratch não tem gravidade pronta, mas dá pra simular com uma variável. Crie velocidade-y1 (só pro Lutador1, marque "apenas para este sprite" se quiser organizar).
No Lutador1:
- "quando bandeira verde clicada"
- "sempre"
- "adicione -2 a velocidade-y1" (a gravidade puxando pra baixo)
- "adicione velocidade-y1 a y" (o movimento de verdade)
- "se (posição y < -100) então: mude y para -100 e mude velocidade-y1 para 0" (o chão segura o lutador)
E o pulo:
- "quando tecla w pressionada"
- "se (posição y = -100) então: mude velocidade-y1 para 18"
A condição do "se" impede o pulo infinito: só pula quem está com os pés no chão. O -100 é a altura do chão no seu palco, ajuste conforme o cenário. Repita tudo no Lutador2 usando a seta para cima. O resultado é um pulo com subida rápida e queda acelerando, igualzinho aos jogos de verdade. Essa mesma lógica de detecção de acerto e resposta ao golpe aparece em qualquer engine profissional, como explico no guia de como fazer um jogo de luta pensado pra quem quer ir além do Scratch.
Passo 6: rounds e tela de vitória
Crie uma variável rounds1 e outra rounds2 pra contar as vitórias. No palco (ou num sprite invisível de "juiz"), monte:
- "quando bandeira verde clicada"
- "mude rounds1 para 0" e "mude rounds2 para 0"
- "sempre"
- "se (vida1 < 1) então: adicione 1 a rounds2, envie novo-round a todos"
- "se (vida2 < 1) então: adicione 1 a rounds1, envie novo-round a todos"
- "se (rounds1 = 2) então: envie vitoria-jogador1 a todos, pare todos"
- "se (rounds2 = 2) então: envie vitoria-jogador2 a todos, pare todos"
Quando um lutador zera a vida, o adversário ganha o round. Melhor de três: quem fizer 2 vence a partida. No recado "novo-round", cada lutador volta pra posição inicial ("vá para x -150 y -100" e o outro no espelho) e as vidas voltam pra 100.
Pra tela de vitória, crie dois pano de fundo no palco escrito "Jogador 1 venceu!" e "Jogador 2 venceu!". No palco, "quando eu receber vitoria-jogador1, mude para o pano de fundo Jogador 1 venceu". Simples e satisfatório.
Ideias pra deixar o jogo mais legal
Com a base pronta, é aqui que a criatividade solta:
- Golpe especial com barra de energia: crie uma variável energia que sobe 5 a cada golpe acertado. Quando chegar em 100, a tecla do especial libera um golpe que tira 30 de vida e zera a energia.
- Cenários: desenhe panos de fundo diferentes (dojo, rua, praia) e sorteie um a cada round com "mude para o pano de fundo (número aleatório entre 1 e 3)".
- Sons: um som de impacto no golpe que acerta e uma música de fundo mudam tudo. A aba Sons do Scratch tem vários prontos.
- Empurrão no dano: quando levar golpe, "adicione 30 a x" (ou -30, dependendo do lado) pra dar aquele knockback clássico.
- Cronômetro de round: 60 segundos por round, e quem tiver mais vida quando zerar leva o ponto.
Quando o Scratch começa a apertar
Sejamos honestos: em algum momento este projeto vai esbarrar no teto do Scratch. Você vai querer combos com sequência de teclas, hitbox separada pro braço e pro corpo, oito personagens selecionáveis, luta online contra um amigo em outra casa. Dá pra forçar algumas dessas coisas no Scratch, mas cada uma vira uma gambiarra maior que a outra.
Isso não é um defeito, é um sinal de progresso. O Scratch cumpriu o papel dele: você (ou seu filho, ou seu aluno) aprendeu condições, variáveis, eventos e a lógica de um jogo funcionando de ponta a ponta. Quando os projetos começam a pedir mais do que a plataforma entrega, o caminho natural é uma engine de verdade, com código de verdade. Escrevi um guia sobre do Scratch para a Godot: quando migrar explicando exatamente como reconhecer esse momento e como fazer a transição sem sofrimento.
Até lá, aproveite. Chame alguém pra segunda metade do teclado e bota esses lutadores pra trabalhar.
Perguntas frequentes
Como fazer um jogo de luta no Scratch?
Crie dois sprites de lutadores com fantasias de parado, soco, chute e dano. Programe controles separados para cada jogador, crie uma variável de vida para cada um e use o bloco de sensor "tocando em" combinado com a fantasia de ataque para detectar golpes. Com rounds e uma tela de vitória, o jogo fica completo.
Como fazer 2 jogadores no scratch?
Divida o teclado: o jogador 1 usa W, A, S, D para mover e F para atacar, e o jogador 2 usa as setas para mover e K para atacar. Cada sprite recebe seus próprios blocos de "quando tecla pressionada", então os dois podem jogar ao mesmo tempo no mesmo computador.
Como fazer barra de vida no Scratch?
Crie uma variável de vida para cada jogador começando em 100. Para a barra visual, crie um sprite retangular com 11 fantasias, da barra cheia até a vazia, e troque a fantasia conforme o valor da variável. Uma alternativa mais simples é usar o bloco "defina o tamanho" para encolher a barra junto com a vida.
Como detectar o golpe acertando no Scratch?
Use um "sempre" com um "se" que verifica duas coisas ao mesmo tempo: se o sprite está tocando no adversário e se a fantasia atual é a de soco ou chute. Quando as duas condições forem verdadeiras, tire vida do outro jogador e use um "espere 0.3 segundos" para o golpe não drenar a vida toda de uma vez.
Qual idade pra criar jogo no Scratch?
O Scratch é recomendado oficialmente a partir dos 8 anos, mas crianças de 6 ou 7 já conseguem acompanhar com ajuda de um adulto. Um jogo de luta como este é um ótimo projeto entre 8 e 14 anos, porque envolve lógica de condições, variáveis e coordenação entre dois sprites.


