labirinto

Como fazer um jogo de labirinto em JavaScript?

Se você já desenvolveu jogos ou animações em JavaScript, provavelmente já ouviu falar do termo “sprite”. Mas o que exatamente é um sprite e como ele é usado no desenvolvimento de jogos?

O que é um Sprite?

Um sprite é um elemento visual usado em jogos e animações para representar um personagem, objeto ou cenário. No code.org temos ferramentas que facilita o manuseio de sprites.

Agora, vamos entender um exemplo de código que cria um jogo com sprites no code.org.

Explicando o jogo

Aqui está o jogo que iremos criar:

Passo 1: Configurando o ambiente

Antes de começarmos a programar, certifique-se de ter um ambiente de desenvolvimento configurado:

  • Acesse o code.org, ao entrar na sua conta, selecione a opção criar novo projeto e escolha “game lab”.

labirinto

Passo 2: Criação das Paredes do Labirinto

Para criar os sprites das paredes use os seguintes comandos:

  • createSprite(x, y, largura, altura): Cria um sprite na posição X e Y especificadas, com as dimensões de largura e altura definidas.
  • shapeColor = "cor": Define a cor de preenchimento do sprite quando não há imagem associada. Aceita nomes de cores em inglês (“red”, “blue”), códigos hexadecimais (“#FF0000”) ou valores RGB/RGBA.
				
					// Criação de todas as 40 paredes do labirinto
var parede1 = createSprite(5,100,10,200);
var parede2 = createSprite(5,340,10,155);
var parede3 = createSprite(200,395,400,10);
var parede4 = createSprite(200,5,400,10);
var parede5 = createSprite(395,5,10,1000);
var parede6 = createSprite(8,261,150,10);
var parede7 = createSprite(82,218,10,95);
var parede8 = createSprite(72,167,30,10);
var parede9 = createSprite(54,111,10,120);
var parede10 = createSprite(80,82,50,10);
var parede11 = createSprite(150,6,10,65);
var parede12 = createSprite(185,44,80,10);
var parede13 = createSprite(230,9,10,80);
var parede14 = createSprite(290,44,30,10);
var parede15 = createSprite(302,65,10,50);
var parede16 = createSprite(230,88,150,10);
var parede17 = createSprite(153,128,10,90);
var parede18 = createSprite(141,171,35,10);
var parede19 = createSprite(200,125,140,10);
var parede20 = createSprite(204,178,10,100);
var parede21 = createSprite(266,145,10,50);
var parede22 = createSprite(170,225,75,10);
var parede23 = createSprite(256,170,30,10);
var parede24 = createSprite(240,190,10,50);
var parede25 = createSprite(290,219,110,10);
var parede26 = createSprite(130,265,10,90);
var parede27 = createSprite(75,310,30,10);
var parede28 = createSprite(57,330,10,50);
var parede29 = createSprite(130,350,150,10);
var parede30 = createSprite(201,324,10,60);
var parede31 = createSprite(240,299,80,10);
var parede32 = createSprite(280,314,10,40);
var parede33 = createSprite(270,335,30,10);
var parede34 = createSprite(250,375,10,90);
var parede35 = createSprite(340,170,10,260);
var parede36 = createSprite(330,295,30,10);
var parede37 = createSprite(313,315,10,50);
var parede38 = createSprite(325,338,30,10);
var parede39 = createSprite(342,365,10,70);
var parede40 = createSprite(370,150,60,10);

// Configuração de cor para todas as paredes
parede1.shapeColor = "black";
parede2.shapeColor = "black";
parede3.shapeColor = "black";
parede4.shapeColor = "black";
parede5.shapeColor = "black";
parede6.shapeColor = "black";
parede7.shapeColor = "black";
parede8.shapeColor = "black";
parede9.shapeColor = "black";
parede10.shapeColor = "black";
parede11.shapeColor = "black";
parede12.shapeColor = "black";
parede13.shapeColor = "black";
parede14.shapeColor = "black";
parede15.shapeColor = "black";
parede16.shapeColor = "black";
parede17.shapeColor = "black";
parede18.shapeColor = "black";
parede19.shapeColor = "black";
parede20.shapeColor = "black";
parede21.shapeColor = "black";
parede22.shapeColor = "black";
parede23.shapeColor = "black";
parede24.shapeColor = "black";
parede25.shapeColor = "black";
parede26.shapeColor = "black";
parede27.shapeColor = "black";
parede28.shapeColor = "black";
parede29.shapeColor = "black";
parede30.shapeColor = "black";
parede31.shapeColor = "black";
parede32.shapeColor = "black";
parede33.shapeColor = "black";
parede34.shapeColor = "black";
parede35.shapeColor = "black";
parede36.shapeColor = "black";
parede37.shapeColor = "black";
parede38.shapeColor = "black";
parede39.shapeColor = "red";  // Parede especial (será destruída)
parede40.shapeColor = "black";
				
			

Passo 3: Criação dos elementos do Labirinto

labirinto
labirinto

Primeiro criamos o fundo:

  • createSprite(200, 200): Cria um sprite centralizado na tela (coordenadas x=200, y=200)

  • setAnimation("background"): Carrega a animação do cenário

				
					// Fundo do jogo

// Cria o sprite do fundo centralizado na tela (200,200)
var background = createSprite(200, 200);  

// Aplica a animação de background
background.setAnimation("background");    
				
			

Criamos o jogador:

  • createSprite(17, 228, 20, 20): Inicia no canto esquerdo do labirinto

  • setAnimation("alien"): Carrega os frames de animação da personagem

				
					// Personagem principal
var alien = createSprite(17, 228, 20, 20);      // Cria o joagador na posição inicial 
alien.setAnimation("alien");           // Aplica animação da personagem

				
			

Agora as estrelas coletáveis:

  • createSprite(x, y, 20, 20): Posiciona a estrela em um ponto específico do labirinto

  • setAnimation("star"): Define o visual de estrela piscante

  • scale = 0.3: Redimensiona para 30% do tamanho original (ajuste para caber no labirinto)

				
					var sprite1 = createSprite(178, 110);
  sprite1.setAnimation("moeda");
  sprite1.scale=0.3
  
  var sprite2 = createSprite(268, 200);
  sprite2.setAnimation("moeda");
  sprite2.scale=0.3
    
  var sprite3 = createSprite(250, 320);
  sprite3.setAnimation("moeda");
  sprite3.scale=0.3
  
  var sprite4 = createSprite(75, 330);
  sprite4.setAnimation("moeda");
  sprite4.scale=0.3
				
			

Por fim, criamos a medalha:

  • createSprite(367,200,10,10): Posiciona no canto direito (final do labirinto)

  • setAnimation("medalha"): Animação do prêmio

				
					// Objetivo final
var medalha = createSprite(367,200,10,10);     // Cria a medalha na posição
medalha.setAnimation("medalha");          // Aplica animação da medalha

				
			

Passo 4: Adicionando Controles do Jogador

Vamos implementar os controles para mover o Jogador usando teclado (WASD ou setas direcionais).

  • keyDown() verifica se uma tecla está pressionada.

  • Teclas suportadas:

    • ↑ (UP_ARROW) ou W: Move para cima (alien.y -= 2)

    • ↓ (DOWN_ARROW) ou S: Move para baixo (alien.y += 2)

    • → (RIGHT_ARROW) ou D: Move para direita (alien.x += 2)

    • ← (LEFT_ARROW) ou A: Move para esquerda (alien.x -= 2)

				
					  // Controles do jogador (WASD ou setas)
  if (keyDown(UP_ARROW) || keyDown("W")) {    // ↑ ou 'W' (Cima)
    alien.y -= 2;  // Move para cima
  }
  if (keyDown(DOWN_ARROW) || keyDown("S")) {  // ↓ ou 'S' (Baixo)
    alien.y += 2;  // Move para baixo
  }
  if (keyDown(RIGHT_ARROW) || keyDown("D")) { // → ou 'D' (Direita)
    alien.x += 2;  // Move para direita
  }
  if (keyDown(LEFT_ARROW) || keyDown("A")) {  // ← ou 'A' (Esquerda)
    alien.x -= 2;  // Move para esquerda
  }
				
			

Passo 5: Colisões com as paredes

Vamos implementar a verificação de colisão entre o alienígena e as paredes do jogo.

  • isTouching() verifica se o alienígena está encostando em alguma parede.

  • Quando ocorre uma colisão, o alienígena é reposicionado para as coordenadas:

    • alien.x = 17 (posição horizontal)

    • alien.y = 228 (posição vertical)

				
					if(alien.isTouching(parede1) ||
alien.isTouching(parede2) ||
alien.isTouching(parede3) ||
alien.isTouching(parede4) ||
alien.isTouching(parede5) ||
alien.isTouching(parede6) ||
alien.isTouching(parede7) ||
alien.isTouching(parede8) ||
alien.isTouching(parede9) ||
alien.isTouching(parede10) ||
alien.isTouching(parede11) ||
alien.isTouching(parede12) ||
alien.isTouching(parede13) ||
alien.isTouching(parede14) ||
alien.isTouching(parede15) ||
alien.isTouching(parede16) ||
alien.isTouching(parede17) ||
alien.isTouching(parede18) ||
alien.isTouching(parede19) ||
alien.isTouching(parede20) ||
alien.isTouching(parede21) ||
alien.isTouching(parede22) ||
alien.isTouching(parede23) ||
alien.isTouching(parede24) ||
alien.isTouching(parede25) ||
alien.isTouching(parede26) ||
alien.isTouching(parede27) ||
alien.isTouching(parede28) ||
alien.isTouching(parede29) ||
alien.isTouching(parede30) ||
alien.isTouching(parede31) ||
alien.isTouching(parede32) ||
alien.isTouching(parede33) ||
alien.isTouching(parede34) ||
alien.isTouching(parede35) ||
alien.isTouching(parede36) ||
alien.isTouching(parede37) ||
alien.isTouching(parede38) ||
alien.isTouching(parede39) ||
alien.isTouching(parede40)){
 
 alien.x=17 

 alien.y=228 
  
}
				
			

Passo 6: Criando os pontos

Agora precisamos criar a variável pontos com valor zero no início do jogo.

  • var → Declara uma variável (modo antigo, substituído por let/const no JavaScript moderno)

  • pontos → Nome da variável que armazenará a pontuação

  • = 0 → Atribui o valor inicial zero

				
					var pontos = 0;
				
			

Passo 7: Exibindo os pontos

  1. fill("white"):

    • Define a cor do texto como branco

    • Todas as próximas operações de desenho de texto usarão esta cor

  2. textSize(17):

    • Configura o tamanho da fonte para 17 pixels

    • Ajusta o tamanho do texto que será exibido na tela

  3. text("4/"+pontos, 190, 29):

    • Exibe na tela um texto formatado como “4/X” (onde X é o valor atual da variável pontos)

    • Posiciona o texto nas coordenadas (190, 29) da tela

				
					fill("white")
textSize(17)
text("4/"+pontos,190,29)

				
			

Passo 8: Colisões com as moedas

Vamos implementar a verificação de colisão entre o alienígena e as moedas do jogo.

  • isTouching() verifica se o alienígena está encostando em alguma parede.

  • Quando ocorre uma colisão entre o alien e um sprite coletável:

    • pontos = pontos + 1 → Adiciona 1 ponto ao contador total

    • sprite.destroy() → Remove o objeto coletado do jogo

				
					if(alien.isTouching(sprite1)){
pontos=pontos +1
sprite1.destroy()
}

if(alien.isTouching(sprite2)){
pontos=pontos +1
sprite2.destroy()
}

if(alien.isTouching(sprite3)){
pontos=pontos +1
sprite3.destroy()
}

if(alien.isTouching(sprite4)){
pontos=pontos +1
sprite4.destroy()
}
				
			

Passo 9: Verificando os pontos

  1. Verificação de progresso:

    • pontos >= 4 checa se o jogador marcou 4 ou mais pontos

    • O operador >= significa “maior ou igual”

  2. Recompensa por progresso:

    • Quando a condição é atendida (4+ pontos coletados)

    • parede39.destroy() remove a barreira do cenário

				
					if(pontos>= 4){
parede39.destroy()}
				
			

Passo 10: Colisão com o troféu

Vamos verificar se o alienígena coletou a medalha final e, em caso positivo, exibe uma mensagem de vitória e remove a medalha do jogo.

  1. if(alien.isTouching(medalha)){

    • Verifica se há colisão entre o alienígena e o objeto chamado “medalha”

    • Usa a função isTouching() para detecção de colisão

  2. win = createSprite(200,200,20,20);

    • Cria um novo sprite chamado “win” na posição (200,200)

    • Define tamanho inicial de 20×20 pixels (será ajustado pelo scale)

  3. win.setAnimation("you win")

    • Atribui a animação “you win” ao sprite de vitória

    • Essa animação deve conter a mensagem/efeito visual de vitória

  4. win.scale = 1.5

    • Aumenta o tamanho do sprite em 1.5 vezes

    • Torna a mensagem mais visível e impactante

  5. medalha.destroy()

    • Remove a medalha do jogo após ser coletada

    • Impede que o jogador colete repetidamente o mesmo item

				
					if(alien.isTouching(medalha)){
   win= createSprite(200,200,20,20);
   win.setAnimation("you win")
   win.scale= 1.5
   medalha.destroy()
}

				
			

Posts Similares

2 Comentários

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *