top of page

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


Destaques
Últimos posts
Arquivos
#Hashtags

© 2023 por Nome do Site. Orgulhosamente criado com Wix.com

bottom of page