Exemplo de um "Jogo de Labirinto"

Publicado por Hunz 29/11/2004

[ Hits: 58.870 ]

Homepage: http://tnegri.com/

Download jogo_mapa.c




Meu primeiro jogo em C, foi um jogo de labirinto, com os graficos mais ou menos assim, porém usando a conio.h do Windows, e para se movimentar não precisava do uso do ENTER.
Não tenho o código antigo, mas eu fiz esse pequeno exemplo, em uns 15 minutos, usando o mesmo sistem que usei no jogo antigo.
Fiz um mapa bem pequeno, mas da pra sacar a idéia, né?

Espero que seja de alguma ajuda.
Abraços,
Fiquem com Deus.

  



Esconder código-fonte

/* Desenvolvido por: Thiago Negri ( hunz ) */
/* Email: [email protected] */

#include <stdio.h>
#include <stdlib.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 OUTRA_COISA 4

/* Definicoes que eu uso em quase todos os meus codigos :) */
#define OK 1
#define ERRO 2

/* Usuarios de Windows, troquem "clear" por "cls" */
#define LIMPARTELA "clear"

int    coluna_atual = 2,
   linha_atual = 2;

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

/* Funcao para desenhar o Mapa */
int desenhar_mapa()
{
   int linha,coluna;
   for (linha=0;linha<10;linha++) {
      for (coluna=0;coluna<10;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] == OUTRA_COISA)
            printf("+");
      }
      printf("\n");
   }
   return OK;
}

int main()
{
   char movimento;
   while ((movimento != 'x') && (movimento != 'X')) {
      system(LIMPARTELA);
      desenhar_mapa();
      printf("\n\n  (N)\n(W)+(E)\n  (S)\n\n"); /* Imprime as direcoes */
      if ((scanf("%c",&movimento))==0) {
         printf("mensagem de erro..\n");
         getchar(); getchar();
         return ERRO;
      }
      if ((movimento == 'n') || (movimento == 'N')) {
         linha_atual = linha_atual - 1;
         /* Se não for chao ou grama ele volta pra posicao anterior */
         if ((mapa[linha_atual][coluna_atual] != CHAO) && (mapa[linha_atual][coluna_atual] != GRAMA)) {
            linha_atual = linha_atual + 1;
            printf("\n\nups.. ali não =)\n");
            getchar(); getchar();
         }
      }
      if ((movimento == 's') || (movimento == 'S')) {
         linha_atual = linha_atual + 1;
         /* Se não for chao ou grama ele volta pra posicao anterior */
         if ((mapa[linha_atual][coluna_atual] != CHAO) && (mapa[linha_atual][coluna_atual] != GRAMA)) {
            linha_atual = linha_atual - 1;
            printf("\n\nups.. ali não =)\n");
            getchar(); getchar();
         }
      }
      if ((movimento == 'e') || (movimento == 'E')) {
         coluna_atual = coluna_atual + 1;
         /* Se não for chao ou grama ele volta pra posicao anterior */
         if ((mapa[linha_atual][coluna_atual] != CHAO) && (mapa[linha_atual][coluna_atual] != GRAMA)) {
            coluna_atual = coluna_atual - 1;
            printf("\n\nups.. ali não =)\n");
            getchar(); getchar();
         }
      }
      if ((movimento == 'w') || (movimento == 'W')) {
         coluna_atual = coluna_atual - 1;
         /* Se não for chao ou grama ele volta pra posicao anterior */
         if ((mapa[linha_atual][coluna_atual] != CHAO) && (mapa[linha_atual][coluna_atual] != GRAMA)) {
            coluna_atual = coluna_atual + 1;
            printf("\n\nups.. ali não =)\n");
            getchar(); getchar();
         }
      }
   }
}

Scripts recomendados

Utilizando arrays, funções e arquivos de texto

Cálculo do M.D.C

Escrevendo um arquivo Unicode em C#

Parte 2 - Sessão de estudo sobre MATRIZES

Imprimir primeiras letras de uma String


  

Comentários
[1] Comentário enviado por fredwind em 02/10/2005 - 16:20h

Kra o joguinho eh show, c pode me explik o código? eu gostei muito mermu kra!!! manda um email pra mim explikndu o código por favor!!!! massa mermu o teu código!!! valeuuu!!!!

[2] Comentário enviado por srjulio em 25/06/2012 - 14:16h

joginho muito bom, da para fazer ele ler o mapa atraves de um arquivo ".txt" ?

[3] Comentário enviado por removido em 30/06/2012 - 16:30h

haha gostei!!!

[4] Comentário enviado por joaodaniloXP em 05/11/2012 - 20:28h

fazer ele ler o mapa atraves de um txt é facil, basta criar um txt com os numeros desejados, e efetuar a leitura através da função fscanf(); :)

[5] Comentário enviado por eduardonetoh em 11/12/2013 - 10:22h

cara.. pra ficar bonito mesmo, use a biblioteca ASCII no (não) e o comando pra limpar a tela eh #define LIMPARTELA "cls"

[6] Comentário enviado por jader_cleber em 15/04/2014 - 18:34h

Muito interessante seu código... Estou elaborando um projeto para a faculdade, onde preciso criar um jogo no prompt, como você fez para não necessitar pressionar Enter para movimentar?


Contribuir com comentário