Jogo do Labirinto
Publicado por Thiago Henrique Hüpner (última atualização em 07/07/2014)
[ Hits: 19.124 ]
Homepage:
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.
/* 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); }
Os cincos primeiros termos da séries de fourier
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Como renomear arquivos de letras maiúsculas para minúsculas
Imprimindo no formato livreto no Linux
Vim - incrementando números em substituição
Efeito "livro" em arquivos PDF
Como resolver o erro no CUPS: Unable to get list of printer drivers
Melhores Práticas de Nomenclatura: Pastas, Arquivos e Código [RESOLVID... (4)
Recuperar arquivos de HD em formato RAW usando Linux (0)
[Python] Automação de scan de vulnerabilidades
[Python] Script para analise de superficie de ataque
[Shell Script] Novo script para redimensionar, rotacionar, converter e espelhar arquivos de imagem
[Shell Script] Iniciador de DOOM (DSDA-DOOM, Doom Retro ou Woof!)
[Shell Script] Script para adicionar bordas às imagens de uma pasta