[download id=”285″]
Olá Pessoal do MundoJs !
Esse é um artigo/tutorial sobre mecanismos básicos de jogos em javascript
Será apresentada uma maneira bem básica de como fazer um jogo da cobrinha em javascript. É um jogo para ser jogado no browser/navegador (chrome/firefox/explorer) mas não funciona em tablets e celulares porque precisa do teclado…
Vamos começar criando um arquivo .html em branco. E logo em seguida escrever um pouco de html:
document.getElementById('principal').innerHTML='Daqui surge o jogo';
<html>
<body>
<div id=principal></div>
<script>
document.getElementById('principal').innerHTML='Daqui surge o jogo';
</script>
</body>
</html>
<html>
<body>
<div id=principal></div>
<script>
document.getElementById('principal').innerHTML='Daqui surge o jogo';
</script>
</body>
</html>
Até aqui sem maiores surpresas… um simples arquivo sem muita complicação.
Logo em seguida vamos criar o tabuleiro por onde a cobra irá se movimentar:
tabuleiro="<table align=center border=1>";
tabuleiro+="<td>"+x+"_"+y+"</td>";
document.getElementById('principal').innerHTML=tabuleiro+"</table>";
<html>
<body>
<div id=principal></div>
<script>
tabuleiro="<table align=center border=1>";
for(x=0;x<10;x++){
tabuleiro+="<tr>";
for(y=0;y<10;y++)
tabuleiro+="<td>"+x+"_"+y+"</td>";
tabuleiro+="</tr>";
}
document.getElementById('principal').innerHTML=tabuleiro+"</table>";
</script>
</body>
</html>
<html>
<body>
<div id=principal></div>
<script>
tabuleiro="<table align=center border=1>";
for(x=0;x<10;x++){
tabuleiro+="<tr>";
for(y=0;y<10;y++)
tabuleiro+="<td>"+x+"_"+y+"</td>";
tabuleiro+="</tr>";
}
document.getElementById('principal').innerHTML=tabuleiro+"</table>";
</script>
</body>
</html>
Vamos dar um id para cada celula do tabuleiro:
tabuleiro+="<td id=td"+x+"_"+y+" style='width:30px; height:30px;'> </td>";
for(y=0;y<10;y++){
tabuleiro+="<td id=td"+x+"_"+y+" style='width:30px; height:30px;'> </td>";
}
for(y=0;y<10;y++){
tabuleiro+="<td id=td"+x+"_"+y+" style='width:30px; height:30px;'> </td>";
}
Vamos ‘pintar’ uma celula do tabuleiro:
document.getElementById('td3_3').style.background="#333333";
document.getElementById('td3_3').style.background="#333333";
document.getElementById('td3_3').style.background="#333333";
Vamos criar uma variavel cobra[] que armazena a coordenada (x,y) da cobra:
document.getElementById('td'+cobra[0]+'_'+cobra[1]).style.background="#333333";
cobra=[5,0];
document.getElementById('td'+cobra[0]+'_'+cobra[1]).style.background="#333333";
cobra=[5,0];
document.getElementById('td'+cobra[0]+'_'+cobra[1]).style.background="#333333";
Vamos fazer a cobra ‘andar’ com a função ‘setTimeout’:
document.getElementById('td'+cobra[0]+'_'+cobra[1]).style.background="#333333";
setTimeout('anda()',300);
function anda(){
cobra[1]++;
document.getElementById('td'+cobra[0]+'_'+cobra[1]).style.background="#333333";
setTimeout('anda()',300);
}
anda();
function anda(){
cobra[1]++;
document.getElementById('td'+cobra[0]+'_'+cobra[1]).style.background="#333333";
setTimeout('anda()',300);
}
anda();
Essa função setTimeout é a base do movimento em javascript. Existem alternativas mas essa é nativa e tem vantagens…
E vamos ‘apagar’ o rastro da cobrinha:
document.getElementById('td'+cobra[0]+'_'+cobra[1]).style.background="#ffffff";
function anda(){
document.getElementById('td'+cobra[0]+'_'+cobra[1]).style.background="#ffffff";
cobra[1]++;
}
function anda(){
document.getElementById('td'+cobra[0]+'_'+cobra[1]).style.background="#ffffff";
cobra[1]++;
}
Vamos ‘interceptar/interpretar’ a tecla que o usuário aperta no teclado:
<body onKeyDown="pegadirecao(event.keyCode);">
<body onKeyDown="pegadirecao(event.keyCode);">
<body onKeyDown="pegadirecao(event.keyCode);">
function pegadirecao(tecla){
function pegadirecao(tecla){
alert(tecla);
}
function pegadirecao(tecla){
alert(tecla);
}
Vamos criar uma variavel direcao que armazena/determina pra onde a cobra deve se mover:
direcao=2;
function pegadirecao(tecla){
function pegadirecao(tecla){
/*alert(tecla);*/
if(tecla==37)direcao=0;
if(tecla==38)direcao=1;
if(tecla==39)direcao=2;
if(tecla==40)direcao=3;
}
function pegadirecao(tecla){
/*alert(tecla);*/
if(tecla==37)direcao=0;
if(tecla==38)direcao=1;
if(tecla==39)direcao=2;
if(tecla==40)direcao=3;
}
E dentro da função anda
if(direcao==0)cobra[1]--;
if(direcao==1)cobra[0]--;
if(direcao==2)cobra[1]++;
if(direcao==3)cobra[0]++;
if(direcao==0)cobra[1]--;
if(direcao==1)cobra[0]--;
if(direcao==2)cobra[1]++;
if(direcao==3)cobra[0]++;
if(direcao==0)cobra[1]--;
if(direcao==1)cobra[0]--;
if(direcao==2)cobra[1]++;
if(direcao==3)cobra[0]++;
vamos criar a maçã:
mx=parseInt(Math.random()*10);
my=parseInt(Math.random()*10);
mx=parseInt(Math.random()*10);
my=parseInt(Math.random()*10);
mx=parseInt(Math.random()*10);
my=parseInt(Math.random()*10);
E na função ‘anda()’
document.getElementById('td'+mx+'_'+my).style.background="#ff3333";
document.getElementById('td'+mx+'_'+my).style.background="#ff3333";
document.getElementById('td'+mx+'_'+my).style.background="#ff3333";
Vamos fazer a maçã ser gerada novamente:
if(mx==cobra[0]&&my==cobra[1]){
mx=parseInt(Math.random()*10);
my=parseInt(Math.random()*10);
cobra[cobra.length]=[10,10];
if(mx==cobra[0]&&my==cobra[1]){
mx=parseInt(Math.random()*10);
my=parseInt(Math.random()*10);
cobra[cobra.length]=[10,10];
}
if(mx==cobra[0]&&my==cobra[1]){
mx=parseInt(Math.random()*10);
my=parseInt(Math.random()*10);
cobra[cobra.length]=[10,10];
}
Agora vem a parte mais sofisticada do jogo. Vamos transformar a variável cobra de um array para um array de arrays. Até agora a variavel cobra armazenava um ponto. A partir daqui essa variavel armazenará um array de pontos…
cobra=[[5,0]];
document.getElementById('td'+cobra[cobra.length-1][0]+'_'+cobra[cobra.length-1][1]).style.background="#ffffff";
if(mx==cobra[cobra.length-1][0]&&my==cobra[cobra.length-1][1]){
mx=parseInt(Math.random()*10);
my=parseInt(Math.random()*10);
cobra[cobra.length]=[10,10];
if(direcao==0)cobra[0][1]--;
if(direcao==1)cobra[0][0]--;
if(direcao==2)cobra[0][1]++;
if(direcao==3)cobra[0][0]++;
document.getElementById('td'+cobra[0][0]+'_'+cobra[0][1]).style.background="#333333";
document.getElementById('td'+mx+'_'+my).style.background="#ff3333";
setTimeout('anda()',300);
function anda(){
document.getElementById('td'+cobra[cobra.length-1][0]+'_'+cobra[cobra.length-1][1]).style.background="#ffffff";
if(mx==cobra[cobra.length-1][0]&&my==cobra[cobra.length-1][1]){
mx=parseInt(Math.random()*10);
my=parseInt(Math.random()*10);
cobra[cobra.length]=[10,10];
}
if(direcao==0)cobra[0][1]--;
if(direcao==1)cobra[0][0]--;
if(direcao==2)cobra[0][1]++;
if(direcao==3)cobra[0][0]++;
document.getElementById('td'+cobra[0][0]+'_'+cobra[0][1]).style.background="#333333";
document.getElementById('td'+mx+'_'+my).style.background="#ff3333";
setTimeout('anda()',300);
}
function anda(){
document.getElementById('td'+cobra[cobra.length-1][0]+'_'+cobra[cobra.length-1][1]).style.background="#ffffff";
if(mx==cobra[cobra.length-1][0]&&my==cobra[cobra.length-1][1]){
mx=parseInt(Math.random()*10);
my=parseInt(Math.random()*10);
cobra[cobra.length]=[10,10];
}
if(direcao==0)cobra[0][1]--;
if(direcao==1)cobra[0][0]--;
if(direcao==2)cobra[0][1]++;
if(direcao==3)cobra[0][0]++;
document.getElementById('td'+cobra[0][0]+'_'+cobra[0][1]).style.background="#333333";
document.getElementById('td'+mx+'_'+my).style.background="#ff3333";
setTimeout('anda()',300);
}
Para fazer a cobra se movimentar devemos passar os valores de cada coordenada de cada ‘gomo’ da cobra para o ‘gomo de traz’:
for(x=cobra.length-1;x>0;x--){
cobra[x][0]=cobra[x-1][0];
cobra[x][1]=cobra[x-1][1];
for(x=cobra.length-1;x>0;x--){
cobra[x][0]=cobra[x-1][0];
cobra[x][1]=cobra[x-1][1];
}
for(x=cobra.length-1;x>0;x--){
cobra[x][0]=cobra[x-1][0];
cobra[x][1]=cobra[x-1][1];
}
Agora só falta fazer função que executará quando a cobra ‘morrer’:
vivo=true;
if(vivo)setTimeout('anda()',300);
else alert('Fim de jogo');
if(vivo)setTimeout('anda()',300);
else alert('Fim de jogo');
if(vivo)setTimeout('anda()',300);
else alert('Fim de jogo');
for(x=1;x<cobra.length;x++){
if(cobra[0][0]==cobra[x][0]&&cobra[0][1]==cobra[x][1])vivo=false;
if(cobra[0][0]<0||cobra[0][1]<0||cobra[0][0]>9||cobra[0][1]>9)vivo=false;
for(x=1;x<cobra.length;x++){
if(cobra[0][0]==cobra[x][0]&&cobra[0][1]==cobra[x][1])vivo=false;
if(cobra[0][0]<0||cobra[0][1]<0||cobra[0][0]>9||cobra[0][1]>9)vivo=false;
}
for(x=1;x<cobra.length;x++){
if(cobra[0][0]==cobra[x][0]&&cobra[0][1]==cobra[x][1])vivo=false;
if(cobra[0][0]<0||cobra[0][1]<0||cobra[0][0]>9||cobra[0][1]>9)vivo=false;
}
O código completo fica:
<body onKeyDown="pegadirecao(event.keyCode);">
tabuleiro="<table align=center border=1>";
tabuleiro+="<td id=td"+x+"_"+y+" style='width:30px; height:30px;'> </td>";
document.getElementById('principal').innerHTML=tabuleiro+"</table>";
mx=parseInt(Math.random()*10);
my=parseInt(Math.random()*10);
document.getElementById('td'+cobra[cobra.length-1][0]+'_'+cobra[cobra.length-1][1]).style.background="#ffffff";
if(mx==cobra[cobra.length-1][0]&&my==cobra[cobra.length-1][1]){
mx=parseInt(Math.random()*10);
my=parseInt(Math.random()*10);
cobra[cobra.length]=[10,10];
for(x=cobra.length-1;x>0;x--){
cobra[x][0]=cobra[x-1][0];
cobra[x][1]=cobra[x-1][1];
if(direcao==0)cobra[0][1]--;
if(direcao==1)cobra[0][0]--;
if(direcao==2)cobra[0][1]++;
if(direcao==3)cobra[0][0]++;
for(x=1;x<cobra.length;x++)if(cobra[0][0]==cobra[x][0]&&cobra[0][1]==cobra[x][1])vivo=false;
if(cobra[0][0]<0||cobra[0][1]<0||cobra[0][0]>9||cobra[0][1]>9)vivo=false;
document.getElementById('td'+cobra[0][0]+'_'+cobra[0][1]).style.background="#333333";
document.getElementById('td'+mx+'_'+my).style.background="#ff3333";
if(vivo)setTimeout('anda()',300);
else alert('Fim de jogo');
function pegadirecao(tecla){
<html>
<body onKeyDown="pegadirecao(event.keyCode);">
<div id=principal></div>
<script>
tabuleiro="<table align=center border=1>";
for(x=0;x<10;x++){
tabuleiro+="<tr>";
for(y=0;y<10;y++)
tabuleiro+="<td id=td"+x+"_"+y+" style='width:30px; height:30px;'> </td>";
tabuleiro+="</tr>";
}
document.getElementById('principal').innerHTML=tabuleiro+"</table>";
cobra=[[5,0]];
direcao=2;
mx=parseInt(Math.random()*10);
my=parseInt(Math.random()*10);
vivo=true;
function anda(){
document.getElementById('td'+cobra[cobra.length-1][0]+'_'+cobra[cobra.length-1][1]).style.background="#ffffff";
if(mx==cobra[cobra.length-1][0]&&my==cobra[cobra.length-1][1]){
mx=parseInt(Math.random()*10);
my=parseInt(Math.random()*10);
cobra[cobra.length]=[10,10];
}
for(x=cobra.length-1;x>0;x--){
cobra[x][0]=cobra[x-1][0];
cobra[x][1]=cobra[x-1][1];
}
if(direcao==0)cobra[0][1]--;
if(direcao==1)cobra[0][0]--;
if(direcao==2)cobra[0][1]++;
if(direcao==3)cobra[0][0]++;
for(x=1;x<cobra.length;x++)if(cobra[0][0]==cobra[x][0]&&cobra[0][1]==cobra[x][1])vivo=false;
if(cobra[0][0]<0||cobra[0][1]<0||cobra[0][0]>9||cobra[0][1]>9)vivo=false;
document.getElementById('td'+cobra[0][0]+'_'+cobra[0][1]).style.background="#333333";
document.getElementById('td'+mx+'_'+my).style.background="#ff3333";
if(vivo)setTimeout('anda()',300);
else alert('Fim de jogo');
}
anda();
function pegadirecao(tecla){
/*alert(tecla);*/
if(tecla==37)direcao=0;
if(tecla==38)direcao=1;
if(tecla==39)direcao=2;
if(tecla==40)direcao=3;
}
</script>
</body>
</html>
<html>
<body onKeyDown="pegadirecao(event.keyCode);">
<div id=principal></div>
<script>
tabuleiro="<table align=center border=1>";
for(x=0;x<10;x++){
tabuleiro+="<tr>";
for(y=0;y<10;y++)
tabuleiro+="<td id=td"+x+"_"+y+" style='width:30px; height:30px;'> </td>";
tabuleiro+="</tr>";
}
document.getElementById('principal').innerHTML=tabuleiro+"</table>";
cobra=[[5,0]];
direcao=2;
mx=parseInt(Math.random()*10);
my=parseInt(Math.random()*10);
vivo=true;
function anda(){
document.getElementById('td'+cobra[cobra.length-1][0]+'_'+cobra[cobra.length-1][1]).style.background="#ffffff";
if(mx==cobra[cobra.length-1][0]&&my==cobra[cobra.length-1][1]){
mx=parseInt(Math.random()*10);
my=parseInt(Math.random()*10);
cobra[cobra.length]=[10,10];
}
for(x=cobra.length-1;x>0;x--){
cobra[x][0]=cobra[x-1][0];
cobra[x][1]=cobra[x-1][1];
}
if(direcao==0)cobra[0][1]--;
if(direcao==1)cobra[0][0]--;
if(direcao==2)cobra[0][1]++;
if(direcao==3)cobra[0][0]++;
for(x=1;x<cobra.length;x++)if(cobra[0][0]==cobra[x][0]&&cobra[0][1]==cobra[x][1])vivo=false;
if(cobra[0][0]<0||cobra[0][1]<0||cobra[0][0]>9||cobra[0][1]>9)vivo=false;
document.getElementById('td'+cobra[0][0]+'_'+cobra[0][1]).style.background="#333333";
document.getElementById('td'+mx+'_'+my).style.background="#ff3333";
if(vivo)setTimeout('anda()',300);
else alert('Fim de jogo');
}
anda();
function pegadirecao(tecla){
/*alert(tecla);*/
if(tecla==37)direcao=0;
if(tecla==38)direcao=1;
if(tecla==39)direcao=2;
if(tecla==40)direcao=3;
}
</script>
</body>
</html>