Exemplo de códigos de jogos simples em C
Antes de começar baixe o programa Dev-C++ ou Code::Blocks
(DOWNLOAD)
Code::Blocks - IDE de código-aberto para a linguagem C++ com recursos preciosos para programadores iniciantes
(DOWNLOAD)
Code::Blocks - IDE de código-aberto para a linguagem C++ com recursos preciosos para programadores iniciantes
(DOWNLOAD)
Abrir o Dev-C++ ou Code::Blocks e Criar um novo
arquivo (Ctrl+N)
Digitar o código
main()
{
}
E salvar como
'snake.cpp'
Compilar e executar
(F9)
Vamos começar a
desenhar na tela
Digite
printf("%c",1);
dentro da função main.
Se você executar dará
erro pois a função printf está declarada na biblioteca stdio.h
Vamos incluir
#include<stdio.h>
no início do arquivo.
E salvar e compilar e
executar.
Ainda não deu pra ver
nada porque o programa executou e fechou muito rápido.
Vamos por uma pausa.
Digite:
getch();
depois do printf
E digite
#include<conio.h>
depois da declaração da biblioteca stdio
O Código até aqui fica:
#include<stdio.h>
#include<conio.h>
main()
{
printf("%c",1);
getch();
}
Pode salvar, compilar e executar (F9)
Esse é o começo da codificação 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
décima coluna da décima linha
Eu ralei um pouco pra chegar até
essa linha... antigamente eu usava a função gotoxy mas ela não é disponível
para todos windows
Vamos criar a função mgotoxy
void mgotoxy(int x,int y)
{ COORD p={x,y}; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),p);
}
E vamos chamar a
função antes do printf
O Código 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);
}
main()
{ mgotoxy(7,7);
printf("%c",1);
getch();
}
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);
}
Vamos começar a
movimentar
for(x=2;x<26;x++)
{ mgotoxy(x-1,8);
printf(" ");
mgotoxy(x,8);
printf("%c",219);
Sleep(500);
}
Já temos um ponto se
movendo na tela
Vamos dar direção 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
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 vão armazenar a coordenada do ponto
Vamos criar uma
variavel char tecla
E vamos substituir
aquele for por dois while. Na condição do segundo while vamos usar a função
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;
if(tecla=='M')d=2;
if(tecla=='P')d=3;
if(cy==0||cy==18||cx==0||cx==26)tecla='s';
}
getch();
}
Utilização da função kbhit()
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]++;
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 aleatório:
#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
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;
}
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';
}
Código 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];
}
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();
}
cobra.exe - Executável básico resultante desse tutorial
Código completo do Jogo da Velha em C
#include <stdio.h>
#define DIM 3
int vez;
int menu(void);
void clear(void);
void zeraTabuleiro(int tabuleiro[][DIM]);
void exibeTabuleiro(int tabuleiro[][DIM]);
void jogar(int tabuleiro[][DIM]);
int checaLocal(int tabuleiro[][DIM], int linha, int coluna);
int checaLinha(int tabuleiro[][DIM]);
int checaColuna(int tabuleiro[][DIM]);
int checaDiagonal(int tabuleiro[][DIM]);
int checaEmpate(int tabuleiro[][DIM]);
int checaTermino(int tabuleiro[][DIM], int vez);
void jogada(int tabuleiro[][DIM]);
int main(void)
{
int tabuleiro[DIM][DIM],
continuar;
do
{
vez=1;
continuar = menu();
if(continuar == 1)
jogar(tabuleiro);
}while(continuar);
return 0;
}
int menu(void)
{
int opcao;
printf("\t\tJogo da Velha 1.0 - Site C Progressivo\n");
printf("\n1.Jogar\n");
printf("0.Sair\n");
printf("\nOpcao: ");
scanf("%d", &opcao);
switch(opcao)
{
case 1:
case 0:
break;
default:
clear();
printf("Opcao invalida. Tente de novo!\n");
}
return opcao;
}
void clear(void)
{
int count=0;
while(count != 100)
{
putchar('\n');
count++;
}
}
void zeraTabuleiro(int tabuleiro[][DIM])
{
int linha, coluna;
for(linha = 0 ; linha < DIM ; linha++)
for(coluna = 0 ; coluna < DIM ; coluna++)
tabuleiro[linha][coluna] = 0;
}
void exibeTabuleiro(int tabuleiro[][DIM])
{
int linha, coluna;
putchar('\n');
for(linha = 0 ; linha < DIM ; linha++)
{
for(coluna = 0 ; coluna < DIM ; coluna++)
{
if(tabuleiro[linha][coluna] == 0)
printf(" ");
else
if(tabuleiro[linha][coluna] == 1)
printf(" X ");
else
printf(" O ");
if(coluna != (DIM-1))
printf("|");
}
putchar('\n');
}
putchar('\n');
}
void jogar(int tabuleiro[][DIM])
{
int continua;
zeraTabuleiro(tabuleiro);
do
{
clear();
exibeTabuleiro(tabuleiro);
jogada(tabuleiro);
}while(checaTermino(tabuleiro, vez) != 1);
}
int checaLocal(int tabuleiro[][DIM], int linha, int coluna)
{
if(linha < 0 || linha > (DIM-1) || coluna < 0 || coluna > (DIM-1) || tabuleiro[linha][coluna] != 0)
return 0;
else
return 1;
}
int checaLinha(int tabuleiro[][DIM])
{
int linha, coluna,
soma;
for(linha = 0 ; linha < DIM ; linha++)
{
soma=0;
for(coluna = 0 ; coluna < DIM ; coluna++)
soma += tabuleiro[linha][coluna];
if(soma==DIM || soma == (-1)*DIM)
return 1;
}
return 0;
}
int checaColuna(int tabuleiro[][DIM])
{
int linha, coluna,
soma;
for(coluna = 0 ; coluna < DIM ; coluna++)
{
soma=0;
for(linha = 0 ; linha < DIM ; linha++)
soma += tabuleiro[linha][coluna];
if(soma==DIM || soma == (-1)*DIM)
return 1;
}
return 0;
}
int checaDiagonal(int tabuleiro[][DIM])
{
int linha,
diagonal_principal=0,
diagonal_secundaria=0;
for(linha = 0 ; linha < DIM ; linha++)
{
diagonal_principal += tabuleiro[linha][linha];
diagonal_secundaria += tabuleiro[linha][DIM-linha-1];
}
if(diagonal_principal==DIM || diagonal_principal==(-1)*DIM ||
diagonal_secundaria==DIM || diagonal_secundaria==(-1)*DIM)
return 1;