Você está na página 1de 9

Tutorial Como programar um jogo em C

1 de 9

http://snakedevc.appspot.com/

Tutorial Como programar um jogo em C


Passo 1
Abrir o Dev-C++ ou Code::Blocks e Criar um novo arquivo (Ctrl+N)

Passo 2
Digitar o cdigo
main()
{
}
E salvar como 'snake.cpp'

Passo 3
Compilar e executar (F9)

Passo 4
Vamos comear a desenhar na tela
Digite
printf("%c",1);
dentro da funo main.
Se voc executar dar erro pois a funo printf est declarada na biblioteca stdio.h
Vamos incluir
#include<stdio.h>
no incio do arquivo.
E salvar e compilar e executar.
Ainda no deu pra ver nada porque o programa executou e fechou muito rpido.
Vamos por uma pausa.
Digite
getch();

18/11/2015 17:41

Tutorial Como programar um jogo em C

2 de 9

http://snakedevc.appspot.com/

depois do printf
E digite
#include<conio.h>
depois da declarao da biblioteca stdio
O Cdigo at aqui fica:
#include<stdio.h>
#include<conio.h>
main()
{
printf("%c",1);
getch();
}
Pode salvar, compilar e executar (F9)
Esse o comeo da codificao do jogo

Passo 5
Vamos desenhar no meio da tela
Pra isso inclua a biblioteca windows.h
E antes do printf digite
COORD p={10,10};
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),p);
Essa linha coloca o cursor na dcima coluna da dcima linha
Eu ralei um pouco pra chegar at essa linha... antigamente eu usava a funo gotoxy mas ela no
disponvel para todos windows
Vamos criar a funo mgotoxy
void mgotoxy(int x,int y)
{
COORD p={x,y};
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),p);
}
E vamos chamar a funo antes do printf
O Cdigo at aqui fica
#include<windows.h>
#include<stdio.h>
#include<conio.h>
void mgotoxy(int x,int y)
{
COORD p={x,y};
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),p);
}

18/11/2015 17:41

Tutorial Como programar um jogo em C

3 de 9

main()
{

http://snakedevc.appspot.com/

mgotoxy(7,7);
printf("%c",1);
getch();

Passo 6
Vamos desenhar as paredes do jogo
Vamos declarar uma variavel int x e usar um 'for' para desenhar cada uma das quatro paredes
int x;
for(x=0;x<18;x++)
{
mgotoxy(0,x);
printf("%c",219);
}
for(x=0;x<26;x++)
{
mgotoxy(x,0);
printf("%c",219);
}
for(x=0;x<18;x++)
{
mgotoxy(26,x);
printf("%c",219);
}
for(x=0;x<27;x++)
{
mgotoxy(x,18);
printf("%c",219);
}

Passo 7
Vamos comear a movimentar
for(x=2;x<26;x++)
{
mgotoxy(x-1,8);
printf(" ");
mgotoxy(x,8);
printf("%c",219);
Sleep(500);
}

Passo 8
J temos um ponto se movendo na tela
Vamos dar direo a esse ponto, de acordo com o teclado
Vamos declarar uma variavel int 'd'
Se d==0 entao o ponto se move para a esquerda

18/11/2015 17:41

Tutorial Como programar um jogo em C

4 de 9

http://snakedevc.appspot.com/

Se d==1 entao o ponto se move para a cima


Se d==2 entao o ponto se move para a direita
Se d==3 entao o ponto se move para a baixo
vamos inicializar d com 2
Vamos criar as variaveis int cx e cy que vo armazenar a coordenada do ponto
Vamos criar uma variavel char tecla
E vamos substituir aquele for por dois while. Na condio do segundo while vamos usar a funo
kbhit()
#include<windows.h>
#include<stdio.h>
#include<conio.h>
void mgotoxy(int x,int y)
{
COORD p={x,y};
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),p);
}
main()
{
int x,d=2,cx=0,cy=7;
char tecla='a';
for(x=0;x<18;x++)
{
mgotoxy(0,x);
printf("%c",219);
}
for(x=0;x<26;x++)
{
mgotoxy(x,0);
printf("%c",219);
}
for(x=0;x<18;x++)
{
mgotoxy(26,x);
printf("%c",219);
}
for(x=0;x<27;x++)
{
mgotoxy(x,18);
printf("%c",219);
}
while(tecla!='s')
{
while(tecla!='s'&&!(tecla=kbhit()))
{
if(d==0)cx--;
if(d==1)cy--;
if(d==2)cx++;
if(d==3)cy++;
mgotoxy(cx,cy);
printf("%c",219);
Sleep(500);
if(cy==0||cy==18||cx==0||cx==26)tecla='s';
}
if(tecla!='s')tecla=getch();
if(tecla=='K')d=0;
if(tecla=='H')d=1;

18/11/2015 17:41

Tutorial Como programar um jogo em C

5 de 9

http://snakedevc.appspot.com/

if(tecla=='M')d=2;
if(tecla=='P')d=3;
if(cy==0||cy==18||cx==0||cx==26)tecla='s';
}
getch();
}
Ralei um pouco pra achar e entender a funo kbhit(). Agora disponibilizo a utilizao dela aqui.

Passo 9
Vamos apagar o rastro da cobra.
Vamos transformar cx e cy em arrays, assim agente pinta o primeiro elemento e apaga o ultimo
Vamos criar uma variavel int t que armazena o tamanho da cobra, pra podermos apagar o fim da cobra
qdo ela andar
#include<windows.h>
#include<stdio.h>
#include<conio.h>
void mgotoxy(int x,int y)
{
COORD p={x,y};
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),p);
}
main()
{
int x,d=2,cx[300]={1,2},cy[300]={7,7},t=1;
char tecla='a';
for(x=0;x<18;x++)
{
mgotoxy(0,x);
printf("%c",219);
}
for(x=0;x<26;x++)
{
mgotoxy(x,0);
printf("%c",219);
}
for(x=0;x<18;x++)
{
mgotoxy(26,x);
printf("%c",219);
}
for(x=0;x<27;x++)
{
mgotoxy(x,18);
printf("%c",219);
}
while(tecla!='s')
{
while(tecla!='s'&&!(tecla=kbhit()))
{
for(x=t;x>0;x--)
{
cx[x]=cx[x-1];
cy[x]=cy[x-1];
}
if(d==0)cx[0]--;
if(d==1)cy[0]--;
if(d==2)cx[0]++;

18/11/2015 17:41

Tutorial Como programar um jogo em C

6 de 9

http://snakedevc.appspot.com/

if(d==3)cy[0]++;
mgotoxy(cx[t],cy[t]);
printf(" ");
mgotoxy(cx[0],cy[0]);
printf("%c",219);
Sleep(500);
if(cy[0]==0||cy[0]==18||cx[0]==0||cx[0]==26)tecla='s';
}
if(tecla!='s')tecla=getch();
if(tecla=='K')d=0;
if(tecla=='H')d=1;
if(tecla=='M')d=2;
if(tecla=='P')d=3;
if(cy[0]==0||cy[0]==18||cx[0]==0||cx[0]==26)tecla='s';
}
getch();
}
Agora vamos gerar e desenhar a ma
Vamos declarar duas variaveis int mx e my
Vamos incluir a biblioteca iostream e a time.h
e para gerar a ma em um ponto aleatrio:
#include<time.h>
#include<iostream>

srand(time(NULL));
mx=(rand()%25)+1;
my=(rand()%17)+1;
Para desenhar a ma digite
mgotoxy(mx,my);
printf("%c",1);
depois do printf da ponta

Passo 10
Quando a cobra passa sobre a ma ela deve aumentar de tamanho e outra ma deve ser gerada
Entre as linhas que apagam o fim da cobra e as linhas que desenham a ponta, Digite:
if(mx==cx[0]&&my==cy[0])
{
t++;
mx=(rand()%25)+1;
my=(rand()%17)+1;
}

18/11/2015 17:41

Tutorial Como programar um jogo em C

7 de 9

http://snakedevc.appspot.com/

Passo 11
Falta fazer o fim do jogo:
Se a ponta da cobra estiver sobre ela mesma o jogo acaba
for(x=1;x<t;x++)
{
if(cx[0]==cx[x]&&cy[0]==cy[x])tecla='s';
}

Cdigo Fonte
#include<windows.h>
#include<stdio.h>
#include<conio.h>
#include<time.h>
//#include<stdlib.h>
#include<iostream>
void mgotoxy(int x,int y)
{
COORD p={x,y};
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),p);
}
main()
{
int x,d=2,cx[300]={1,2},cy[300]={7,7},t=1,mx,my;
char tecla='a';
//system("MODE con cols=27 lines=20");
for(x=0;x<18;x++)
{
mgotoxy(0,x);
printf("%c",219);
}
for(x=0;x<26;x++)
{
mgotoxy(x,0);
printf("%c",219);
}
for(x=0;x<18;x++)
{
mgotoxy(26,x);
printf("%c",219);
}
for(x=0;x<27;x++)
{
mgotoxy(x,18);
printf("%c",219);
}
srand(time(NULL));
mx=(rand()%25)+1;
my=(rand()%17)+1;
while(tecla!='s')
{
while(tecla!='s'&&!(tecla=kbhit()))
{
for(x=t;x>0;x--)
{
cx[x]=cx[x-1];
cy[x]=cy[x-1];

18/11/2015 17:41

Tutorial Como programar um jogo em C

8 de 9

http://snakedevc.appspot.com/

}
if(d==0)cx[0]--;
if(d==1)cy[0]--;
if(d==2)cx[0]++;
if(d==3)cy[0]++;
mgotoxy(cx[t],cy[t]);
printf(" ");
if(mx==cx[0]&&my==cy[0])
{
t++;
mx=(rand()%25)+1;
my=(rand()%17)+1;
}
mgotoxy(cx[0],cy[0]);
printf("%c",219);
mgotoxy(mx,my);
printf("%c",1);
Sleep(500);
for(x=1;x<t;x++)
{
if(cx[0]==cx[x]&&cy[0]==cy[x])tecla='s';
}
if(cy[0]==0||cy[0]==18||cx[0]==0||cx[0]==26)tecla='s';
}
if(tecla!='s')tecla=getch();
if(tecla=='K')d=0;
if(tecla=='H')d=1;
if(tecla=='M')d=2;
if(tecla=='P')d=3;
if(cy[0]==0||cy[0]==18||cx[0]==0||cx[0]==26)tecla='s';
}
getch();
}

Executveis
cobra.exe - Executvel bsico resultante desse tutorial
cobrareduzida.exe - Executvel Redimensionado
snakeGF.exe - Executvel gerado pelo Gustavo Fabro que seguiu esse tutorial e depois implementou
algumas melhorias
Se voc quiser divulgar sua verso aqui mande um email com o cdigo-fonte para
schio.rodrigo@gmail.com

Voltar para a pgina com links para outros Tutoriais


http://www.rodrigoschio.com.br/index.php?mdl=122

Comentar (Facebook)

18/11/2015 17:41

Tutorial Como programar um jogo em C

9 de 9

9 Comments

http://snakedevc.appspot.com/

Sort by Top

Add a comment...

Joao Paulo Velozo IFPI - Campus Floriano


Toop!
Like Reply

1 Nov 14, 2015 4:39pm

Rodolfo Souza So Paulo, Brazil


showw
Like Reply

1 Oct 11, 2015 5:33pm

Rodrigo Schio Developer at Internet


Tm outros tutoriais e artigos interessantes no meu site:
http://www.rodrigoschio.com.br/index.php?mdl=122
E recentemente comeei a escrever artigos sobre programao para um outro site:
http://ubuntu.blog.br/author/rodrigo/
Like Reply Sep 20, 2015 2:39pm

Paulo Edson
Legal. Parabns@!
Like Reply

1 Sep 15, 2015 10:08am

Fred Garcia Colgio Anchieta


muito bom!!
Like Reply

2 Aug 23, 2015 1:25pm

Andre Filipe Works at OK Estudante


melhor tutorial de c que j vi, objectivo e bem explicita. muito obrigado e continua a fazer tuturial
como estas
Like Reply

1 Aug 8, 2015 1:54am

Rafa Schmitz Internship at Siemens no Brasil


da hora mesmo em ... parabens
Like Reply

1 Jul 1, 2015 3:21pm

Douglas Martins Dvoli Works at Student


poxa muito massa
Like Reply

1 Mar 31, 2015 6:39am

Gustavo Fabro Sonoplasta e OPEC at Rdio Cruz de Malta


Muito obrigado!
Like Reply

1 Dec 15, 2014 4:38am

Facebook Comments Plugin

18/11/2015 17:41