Exemplo de um "Jogo de Labirinto"

Publicado por Hunz 29/11/2004

[ Hits: 61.685 ]

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: tn_negri@hotmail.com */

#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

Intercalador de vetores em NCURSES com memória dinâmica

ANO BISEXTO

Manipulação de BITS em C

Fibonacci Recursivo e Não Recursivo

C++ CGI


  

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




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts