Criando jogos em c

Resultado de imagem para jogos em c++
Exemplo de códigos de jogos simples em C

Antes de começar baixe o programa Dev-C++ ou Code::Blocks

Dev-C++ -  é um Ambiente de Desenvolvimento Integrado (IDE - Integrated Development Environment) para programação na linguagem C/C++ 
(DOWNLOAD)

Code::BlocksIDE 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;



Jogo da Velha em C


Os códigos de exemplo foram retirados da internet