Jogo do Labirinto

Publicado por Thiago Henrique Hüpner (última atualização em 07/07/2014)

[ Hits: 19.145 ]

Homepage:

Download 6018.teste.c




Olá pessoal.

Após muito tempo programando (+/- 2 dias) eu consegui criar um jogo de labirinto em C.

"Diferencial":

- Mapas ilimitados¹;
- Contador de levels;
- Contador de passos:
- Pode ser customizável²;
- Níveis aleatórios;
- Entre outras coisas ...

¹ Quase ilimitado porque pode ser gerado um mapa que não é possível chegar até o destino.
² O mapa pode ser alterado (apenas alterar a matriz) e os ícones.

  



Esconder código-fonte

/*

    Esse é o Labirinto '1.0'
    W - Cima
    A - Esquerda
    S - Baixo
    D - Direita
    Q - Sair

    Como todo bom labirinto , esse pode gerar mapas em que você fica impossibilitado de Chegar Até o # (O Boneco é o @)

    Definições

    Parede = (=)(Você Não Pode Passar );
    Grama = (.)(Você Pode Passar);
    Chao = (Espaço em Branco) (Você Pode Passar)

    A Biblioteca <graphics.h> aqui foi usado apenas para o getch();, mas caso voces nao tenham , apenas modique de getch(); para getchar();

    Versão 1.0 ; Versão 2.0 Com o Uso Das Setas do Teclado (Ou Não ...)

*/

#include <stdio.h>
#include <stdlib.h>
#include <graphics.h>
#include <time.h>

/* Definicoes, para facilitar o uso da funcao para desenhar o mapa */
#define CHAO 0
#define PAREDE 1
#define VOCE 2
#define GRAMA 3
#define SAIDA 4


#define ACIMA 119
#define ABAIXO 115
#define DIREITA 100
#define ESQUERDA 97

#define Q 113

/*Outras definições para tratamento de erros*/
#define OK 1
#define ERRO 2




int coluna_atual = 1,
linha_atual = 1,
coluna_atual2 = 1,
linha_atual2 = 1;

int key,passos;


/* O Mapa */
int mapa[10][20] = {
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,};

void gera_mapa(  )
{
    int m, n;

    for (m = 0; m < 10;m++)
    {
        for (n = 0;n<20;n++)
        {
            if (mapa[m][n] == 0)
            {
                mapa[m][n] = rand() % 4;

                if (mapa[m][n] == 2)
                {
                    mapa[m][n] = 0;
                }
            }
        }
    }
    mapa[9][18] = 4;
}

int desenhar_mapa()
{
    int linha,coluna;

    for (linha=0;linha<10;linha++) {
        for (coluna=0;coluna<20;coluna++) {

            if ((linha == linha_atual) && (coluna == coluna_atual)) {
                printf("&");
                continue;
            }
            if (mapa[linha][coluna] == CHAO)
                printf(" ");
            if (mapa[linha][coluna] == PAREDE)
                printf("©");
            if (mapa[linha][coluna] == GRAMA)
                printf(".");
            if (mapa[linha][coluna] == SAIDA)
                printf("#");

        }
        printf("\n");
    }
    return OK;
}


int main(int argc, char *argv[]){

    srand( (unsigned)time(NULL) );
    system("clear");
    int level = 1;

    do {

        gera_mapa();
        desenhar_mapa();

        do {

            key=getch();

            if (key==ACIMA){

                linha_atual -= 1;
                passos += 1;

                if (mapa[linha_atual][coluna_atual] == PAREDE){
                    linha_atual +=1;
                }

                system("clear");
                desenhar_mapa();
            }

            if (key==ABAIXO){

                linha_atual += 1;
                passos += 1;

                if ((mapa[linha_atual][coluna_atual] == PAREDE)){
                    linha_atual -= 1;
                }

                system("clear");
                desenhar_mapa();
            }

            if (key==DIREITA){

                coluna_atual += 1;
                passos += 1;

                if ((mapa[linha_atual][coluna_atual] == PAREDE)){
                    coluna_atual -= 1;
                }

                system("clear");
                desenhar_mapa();
            }

            if (key==ESQUERDA){

                coluna_atual -= 1;
                passos += 1;

                if ((mapa[linha_atual][coluna_atual] == PAREDE)){
                    coluna_atual += 1;
                }

                system("clear");
                desenhar_mapa();
                printf("@");
            }

            if (key==Q){

                printf("\n\nLevel %i Incompleto\nTotal de Passos Level %i: %i\nPressione Qualquer Para Sair . .\n",level,level,passos);
                getch();
                exit(2);

            }

        } while(mapa[linha_atual][coluna_atual]!=SAIDA);

        coluna_atual =1;
        linha_atual=1;
        int level2 = level +1;

        printf("\n\nLevel %i Concluido\nTotal de Passos Level %i: %i\nPressione Qualquer Tecla Para ir Ao Level %i\n",level,level,passos,level2);
        getch();
        passos = 0;
        system("clear");
        level+=1;

    } while(key!=Q);

    exit(2);
}

Scripts recomendados

Passando parâmetros com getopt

Crescimento de bactérias

Super Thiagout (Breakout) - O Jogo

Menu animado

A - Comando strdup


  

Comentários
[1] Comentário enviado por phoemur em 09/07/2014 - 18:29h

Cara, muito legal seu joguinho.
Eu fiz uns teste parecidos no ano passado, dá uma olhada:

Shell-script:
http://www.vivaolinux.com.br/script/Jogo-de-labirinto-feito-em-shell-script

Python3:
http://www.vivaolinux.com.br/script/Jogo-de-labirinto-modo-texto

Um abraço

[2] Comentário enviado por starkiller em 12/07/2014 - 10:40h

Bacana!

[3] Comentário enviado por fabio em 27/03/2015 - 22:36h

Boa! Tava precisando desse código pra ilustrar uma explicação, pesquisei no Google e caí aqui. Me salvou um bom tempo. Obrigado.

[4] Comentário enviado por Thihup em 28/03/2015 - 08:57h


[3] Comentário enviado por fabio em 27/03/2015 - 22:36h

Boa! Tava precisando desse código pra ilustrar uma explicação, pesquisei no Google e caí aqui. Me salvou um bom tempo. Obrigado.


Então meu script vai aparecer na sua explicação ?

Se sim , poderia por o link e por meu nome ? Se quiser , mas eu ficaria muito honrado

Grato ( e honrado)

Thiago

[5] Comentário enviado por removido em 03/06/2015 - 05:57h

Conhece o jogo da cobrinha? Lembrei dele.
--
Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden

[6] Comentário enviado por Thihup em 03/06/2015 - 08:05h


[5] Comentário enviado por listeiro_037 em 03/06/2015 - 05:57h

Conhece o jogo da cobrinha? Lembrei dele.
--
Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden


Conheço Sim =D

Quando der tempo vou ver se eu consigo implementar ele.

Valew!!


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts