Linux slogan
Visite também: Segurança Linux · BR-Linux.org · Dicas-L · Doode · NoticiasLinux · SoftwareLivre.org · UnderLinux



» Screenshot
Linux: slack+flux
Por U-Neeks
» Login
Login:
Senha:

Se você ainda não possui uma conta, clique aqui.

Esqueci minha senha



Scripts

Linux user

Publicado por Denilson em 29/05/2008 (última atualização em 16/05/2012)   [ 9881 hits ]

Login: YankVeyron, 14319 pontos

   


Descrição

Esse é um joguinho de labirinto.

Originalmente escrito por < Tiago Negri >, modificado por < Luís Fred > e agora melhorado pro mim.

Agora o jogo usa as setas do teclado.

[ Download: 'Joguinho'.cpp ]   [ Enviar nova versão ]

Versões atualizadas deste script (NOVO)
Linux user

Publicado por aaaaa em 14/05/2012

Changelog:
/*
#################################################################################################
# Programa originalmente escrito por <Tiago Negri> #
# #
# Posteriormente modificado por Luís Fred <fredwind@terra.com.br> #
# ADICIONADO o fim do Jogo (se o cursor chegar na saida). retorna uma mensagem dizendo qe voce ganhou. Por Rafael Zurawski <www.facebook.com/rafaelzurawski> #
# Comentário de Luíz Fred: 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. #
# #
# Posteriormente modificado por YanyVeyron < denilsonmaxi@gmail.com > #
# Comentário de YankVeyron: Bom, eu apenas tornei o Programa mais dinâmico através do uso das #
# Setas do teclado utilizando a Biblioteca < conoi.h > #
# #
# 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>
#include <conio.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 72
#define ABAIXO 80
#define DIREITA 77
#define ESQUERDA 75

#define ESC 27

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

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

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()
{
int tecla;
do{
system(LIMPARTELA);
desenhar_mapa();
printf("\n##################### L A B I R I N T O #####################################\n");
printf("\n\n ( %c )\n\n( %c ) + ( %c )\n\n ( %c )\n",30,17,16,31); /* Imprime as direcoes */
printf("\nPressione ESC para sair\n");
printf("\n------------------------------------------------------------------------------\n");

tecla = getch();

if ( tecla == ACIMA ) {
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;


}
}
if ( tecla == ABAIXO ) {
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;


}
}
if ( tecla == DIREITA ) {
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;


}
}
if ( tecla == ESQUERDA ) {
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;


}
}
if(mapa[linha_atual][coluna_atual]==SAIDA)
{
system("cls");
printf("\n\n\n\n\n\n\nVoce ganhou");
getch();
tecla = ESC;
}


}while( tecla != ESC );

}

(versão 2)

 

[ Esconder código-fonte ]

/*
#################################################################################################
# Programa originalmente escrito por <Tiago Negri>                                              #
#                                                                                               #
# Posteriormente modificado por Luís Fred <fredwind@terra.com.br>                               #
# Comentário de Luíz Fred: 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.                                                                                 #
#                                                                                               #
# Posteriormente modificado por YanyVeyron < denilsonmaxi@gmail.com >                           #
# Comentário de YankVeyron: Bom, eu apenas tornei o Programa mais dinâmico através do uso das   #
# Setas do teclado utilizando a Biblioteca < conoi.h >                                          #
#                                                                                               #
# 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>
#include <conio.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 72
#define ABAIXO 80
#define DIREITA 77
#define ESQUERDA 75

#define ESC 27

/*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()
{
    int tecla;
    do{
       system(LIMPARTELA);
       desenhar_mapa();
       printf("\n##################### L A B I R I N T O #####################################\n");
       printf("\n\n    ( %c )\n\n( %c ) + ( %c )\n\n    ( %c )\n",30,17,16,31); /* Imprime as direcoes */
       printf("\nPressione ESC para sair\n");
       printf("\n------------------------------------------------------------------------------\n");

       tecla = getch();

       if ( tecla == ACIMA ) {
          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;


          }
       }
       if ( tecla == ABAIXO ) {
          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;


          }
       }
       if ( tecla == DIREITA ) {
          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;


          }
       }
       if ( tecla == ESQUERDA ) {
          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;


          }
       }
    }while(  tecla != ESC );

}

Scripts recomendados
   Script Linux recomendado Ordenação quicksort
   Script Linux recomendado Stack (LIFO)
   Script Linux recomendado Jogo Micro Breakout
   Script Linux recomendado Ejetor
   Script Linux recomendado Manipulação de um vetor de registros

Comentários
[1] Comentário enviado por pintofree em 29/05/2008 - 19:26h:

muito massa eheheh curto esses joguinhos simples

[2] Comentário enviado por DarkSign em 30/05/2008 - 14:25h:

Interessante. Me ajudou a entender um pouco mais da lógica de jogos, principalmente de labirintos, coisa que ainda n achei muito material disponível.

Só uma ressalva: além de trocar Clear por Cls no Windows, lembrar que a biblioteca <conio.h> e as funções que permitem que uma tecla seja pressionada sem precisar dar o Enter, apenas funcionam no Windows, sendo necessário achar soluções alternativas para o Linux.

[3] Comentário enviado por hunz em 24/04/2009 - 10:15h:

Como o DarkSign falou, a biblioteca conio.h não existe - até onde eu sei - para Linux.

Apesar um detalhe, meu nome é com H (Thiago Negri), rs.

Este código é antigo (2005), mas quem quiser um joguinho de labirinto com interface gráfica (SDL) pode pegar deste link: http://server.codigolivre.org.br/dudurox/dudurox3-src/dudurox3-0.3/

Aviso: O código está cheio de gambiarra e foi desenvolvido ao estilo Megazord (um unico arquivo). Peguem leve, foi um dos primeiros jogos que fiz.

[4] Comentário enviado por Listeiro 037 em 16/05/2012 - 12:05h:

Tem um projeto de <conio.h> substitutiva para Linux aqui no VOL.
Estava por aqui há um mês atrás, contando desta data.

[5] Comentário enviado por Jonas1311 em 22/05/2012 - 09:54h:

Seguinte, creio que não seja necessário tantos testes na condição de colisão

if ((mapa[linha_atual][coluna_atual] != CHAO) && (mapa[linha_atual][coluna_atual] != GRAMA) && (mapa[linha_atual][coluna_atual] != SAIDA)) {

basta escrever...

if(mapa[linha_atual][coluna_atual] == PAREDE){

pois querendo ou não, o que não é CHAO, nem GRAMA e nem SAIDA é PAREDE. E se vcs forem ver, a cada novo objeto que eu queira colocar no mapa, eu vou ter que adicionar && (mapa[linha_atual][coluna_atual] != NOVO OBJETO )


Contribuir com comentário


  
Para executar esta ação você precisa estar logado no site, caso contrário, tudo o que for digitado será perdido.
Responsável pelo site: Fábio Berbert de Paula - Conteúdo distribuído sob licença GNU FDL
Site hospedado por:

Viva o Linux

A maior comunidade Linux da América Latina! Artigos, dicas, tutoriais, fórum, scripts e muito mais. Ideal para quem busca auto-ajuda em Linux.