Tutorial Jogo Snake com C e Dev C++
- Gustavo Ferreira
- 2 de mar. de 2015
- 4 min de leitura
Olá. Neste tutorial iremos aprender como fazer o clássico jogo Snake, utilizando a linguagem C e a IDE DEV C++.
Antes de começarmos, teremos que instalar a biblioteca conio.h, para que possamos usar cores em nossos programas, irei disponibilizar para o download. Tem um tutorial de como instalar as bibliotecas dentro do arquivo. // Não consegui usar as cores, as bibliotecas estão entrando em conflito com a função textcolor() e a função kbhit(), caso no teu computador não esteja entrando em conflito, pode usar livremente a função textcolor(), do contrário ao invés de por um #include <conio.c> colocaremos a biblioteca <conio.h>.
Para desenhar na tela, iremos usar laços e os caracteres da tabela ASCII. Vocês podem usar qualquer caractere desta tabela. Agora vamos começar a importar as bibliotecas do código.

Como iremos mesclar funções do C com C++, vamos importar ao todo 6 bibliotecas, agora vamos criar a função que percorrerá as matrizes. E também já vamos declarar todas as variáveis que utilizaremos neste tutorial. Vou explicar o que cada uma faz conforme precisemos delas.

Esta função irá para as posições x,y da nossa matriz, vamos utiliza-la para desenhar as 4 paredes do nosso game., para isso iremos utilizar laços for(), e para desenha-las vamos utilizar a tabela ANCII. Nosso código ficará assim:

O que fizemos foi criar um laço, e dentro dele utilizar a função mgotoxy() que percorre por toda a matriz, desenhando nela com caracteres especiais, no caso usei o de numero 219, que representa a "|", e para desenhar as 4 paredes, fizemos uma por vez, através de 4 laços, a primeira percorre de 0 até X(18), a segunda de X(50) até 0, a terceira de 50 até X(18), e a quarta de X(51, para o cursos ficar fora das paredes) até 18. Bem simples, não? Agora vamos começar a movimentar, para isso vamos definir as teclas de movimento.
Para movimentar a Snake, vamos usar as setas do teclado, então vamos declarar da seguinte forma:
Se seta==0 entao o ponto se move para a esquerda Se seta==1 entao o ponto se move para a cima Se seta==2 entao o ponto se move para a direita Se seta==3 entao o ponto se move para a baixo
Agora, vamos criar as variaveis aque armazenam o ponto, e as que apagam o rastro da cobra conforme ela se locomove pela tela. Vamos criar uma variavel que armazena o tamanho da cobra, logo após a imagem irei explicar o que cada linha do código faz.
Fica assim o código:

Com isso, criamos toda a lógica que vai fazer a cobra se movimentar pela tela, mas ainda não funcionará. O que fizemos primeiro foi criar um laço, dentro ele está a variável 'tecla' que declaramos sendo do tipo char e contendo a letra 'a', enquanto ela for 'a' o laço continua. Em seguida, usamos o conectivo E NÃO FOR (&&!) com a função kbhit().
A função kbhit() basicamente espera o usuario pressionar uma tecla. Agora vamos desenhar a maça, e coloca-la de modo aleatório na tela, para isto iremos usar a função rand() que está na biblioteca time.h, mas para que a maça sempre apareça em um local diferente da tela, iremos usar a função srand. As próximas linhas ficam assim:
srand(time(NULL));
mx=(rand()%49)+1;
my=(rand()%17)+1;
O valor de mx são os nossos valores de x da matriz, e os de my são os de y da matriz.
Agora, vamos desenhar a maça, usando a tabela ASCII mais uma vez.
mgotoxy(mx,my);
printf("%c",1);
Nosso jogo está quase pronto, vamos fazer o código de quando a cobra passa pela maçã e aumenta de tamanho, e quando isso acontece, nós geramos outra maça aleatóriamente.
if(mx==cx[0]&&my==cy[0])
{
t++;
mx=(rand()%25)+1;
my=(rand()%17)+1;
}
Pronto! Nosso jogo está terminado e funcionando. Agora só vamos deixa-lo um pouco mais bonito visualmente, vamos criar um menu flutuante indicando os pontos e a velocidade da nossa cobra, e também, criar uma variável para controlar a função Sleep(), que deve diminuir a cada vez que a snake pegar uma maça, aumentando a velocidade do jogo.
Voltamos ao inicio do código, e declaramos mais algumas variáveis:
int velo = 100, velo2 = 5, int pontos =0;
A variável 'velo' irá controlar nossa função Sleep(), começando com 100 e diminuindo seu valor a cada vez que a maça for pega, fazendo assim a velocidade aumentar. A variável 'velo2' e 'pontos' irá aparecer no nosso menu flutuante. Agora, vamos na parte do código onde se a snake come a maçã, ela aumenta de tamanho e colocamos as seguintes linhas:
if(mx==cx[0]&&my==cy[0])
{
t++;
pontos++;
mx=(rand()%25)+1;
my=(rand()%17)+1;
velo-=5;
velo2+=5;
}
Ou seja, quando a cobra come a maça, a variável 'velo' diminui em 5, e a variável 'velo2' que aparecerá no nosso menu aumenta em 5. Agora só falta escrever o menu e colocar nossa variável de controle na função Sleep(), para isto, vamos usar a função mgotoxy() para andar por nossa matriz, e assim, desenhar o menu flutuante, na parte onde desenhamos a cobra e a maça, escrevemos isso:
mgotoxy(55,10);
textcolor(MAGENTA);
printf ("Pontos: %d",pontos);
mgotoxy(55,3);
printf ("Velocidade: %d",velo2);
mgotoxy(3,22);
textcolor(11);
printf ("Jogo desenvolvido por Gustavo Ferreira");
Sleep(velo);
Agora, por final, vamos criar a mensagem de game over, para que o usuário saiba quando perdeu e quantos pontos o mesmo fez. Colocamos esta linha fora dos while(), mas dentro da main()
system("cls");
system("pause");
textcolor(14);
printf ("\n\n\tVOCE PERDEU\n\n");
textcolor(13);
printf ("\n\n\tVOCE FEZ %d PONTOS",pontos);
Pronto! Nosso código está feito e funcionando. Caso tenha dúvidas ou sugestões, deixe um comentário e responderei o mais rápido possível!
Por hoje foi só, muito obrigado e boa programação a todos!

Comments