Joguinho de labirinto

Publicado por Luís Fred 28/10/2006

[ Hits: 18.677 ]

Download labirinto.c




Esse joguinho  na verdade é um código melhorado, que foi originalmente escrito pelo Tiago Negri, um colega nosso aqui do VOL.

O código anterior não implementava uma saída para o labirinto, então resolvi modificá-lo, implementando uma saída, aumentando o mapa do jogo, entre outras coisas.

  



Esconder código-fonte

/*###############################################################################################
# Programa originalmente escrito por <Tiago Negri>                                              #
# Modificações feitas por Luís Fred <fredwind@terra.com.br>                                     #
# Comentário: este programa consiste num joguinho de laborinto. Originalmente o jogo não tinha  #
# uma saida, e onde já se viu um joguinho de labirinto sem uma saida????? :), então resolvi     #
#fazer algumas modificações no código, como introduzir uma saida e aumentar o mapa do jogo.     #
# Caso queiram verificar o código antigo, acessem esse link:                                    #   # www.vivaolinux.com.br/scripts/verFonte.php?codigo=722                                         #
#################################################################################################
*/

#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 SAIDA 4
  
 /*Outras definições para tratamento de erros*/
 #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][40] = { 
 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,1,
 1,0,0,0,0,1,1,1,0,1,1,1,1,1,1,1,1,0,0,1,1,1,0,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,
 1,0,0,0,0,3,0,0,0,1,1,0,0,0,0,0,0,1,1,1,1,1,0,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,
 1,0,0,1,3,3,3,0,0,1,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,
 1,0,0,0,0,1,0,0,0,1,1,0,1,1,1,1,1,1,0,1,1,1,0,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,
 1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,
 1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,0,1,1,1,1,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,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,
 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,4,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<40;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()
 {
    char movimento;
    while ((movimento != 'x') && (movimento != 'X')) {
       system(LIMPARTELA);
       desenhar_mapa();
       printf("\n##################### L A B I R I N T O #####################################\n");
       printf("\n\n  (W)\n(A)+(D)\n  (S)\n"); /* Imprime as direcoes */
       printf("\nPressione X[x] para sair\n");
       printf("\n------------------------------------------------------------------------------\n");
       if ((scanf("%c",&movimento))==0) {
          printf("mensagem de erro..\n");
          getchar(); getchar();
          return ERRO;
       }
       if ((movimento == 'w') || (movimento == 'W')) {
          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) && (mapa[linha_atual][coluna_atual] != SAIDA)) {
             linha_atual = linha_atual + 1;
             getchar(); getchar();
        
          }
       }
       if ((movimento == 's') || (movimento == 'S')) {
          linha_atual = linha_atual + 1;
          /* Se não for chao ou grama ou saida ele volta pra posicao anterior */
          if ((mapa[linha_atual][coluna_atual] != CHAO) && (mapa[linha_atual][coluna_atual] != GRAMA) && (mapa[linha_atual][coluna_atual] != SAIDA)) {
             linha_atual = linha_atual - 1;
              getchar(); getchar();
      
          }
       }
       if ((movimento == 'd') || (movimento == 'D')) {
          coluna_atual = coluna_atual + 1;
          /* Se não for chao ou grama ou saida ele volta pra posicao anterior */
          if ((mapa[linha_atual][coluna_atual] != CHAO) && (mapa[linha_atual][coluna_atual] != GRAMA) && (mapa[linha_atual][coluna_atual] != SAIDA)) {
             coluna_atual = coluna_atual - 1;
             getchar(); getchar();
    
          }
       }
       if ((movimento == 'a') || (movimento == 'A')) {
          coluna_atual = coluna_atual - 1;
          /* Se não for chao ou grama ou saida ele volta pra posicao anterior */
          if ((mapa[linha_atual][coluna_atual] != CHAO) && (mapa[linha_atual][coluna_atual] != GRAMA) && (mapa[linha_atual][coluna_atual] != SAIDA)) {
             coluna_atual = coluna_atual + 1;
             getchar(); getchar();
     
          }
       }
    }
   
 } 

Scripts recomendados

Calculadora simples em C

Solucionador de problemas

Codificador de texto*

Converter graus Celsius em Fahrenheit e vice-versa

Inverte valor das variáveis


  

Comentários
[1] Comentário enviado por Raptor em 29/10/2006 - 21:43h

Amigo, desculpa a ignorância, mas como faço para executar?
Basta um
sudo ./labirinto.c?
É assim?


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts