Ir para conteúdo
blg

ajuda jogo do 15 em c

Recommended Posts

Pessoal, to tentando fazer um joguinho simples em c, pra ser executado na linha de comando usando matriz ,o jogo é o jogo do 15

tem que ordenar as casas de 1 a 15 , usando comandos como 3 d (numero 3, direita); estou tendo um erro ao chamar uma função dentro de outra. se alguém puder dar uma olhadinha no código e me dar alguma dica eu agradeço!


#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <time.h>

#include<stdbool.h>


#define MAX 20

#define CASAS 15


bool jogo();

void realizarJogada(int, char [*]);

int encontrarPosicao(size_t, size_t, int[*][*], int);

void mostrarTabuleiro(size_t, size_t, int[*][*]);

void mostrarCasa(int);

void montarTabuleiro(size_t, size_t, int[*][*]);


int main(){


srand((unsigned) time(0));

char CMD_SAIR[] = "sair";

char CMD_CIMA[] = "c";

char CMD_BAIXO[] = "b";

char CMD_DIREITA[] = "d";

char CMD_ESQUERDA[] = "e";

int M = 4;

int N = 4;

int tabuleiro[M][N];


montarTabuleiro(M, N, tabuleiro);

mostrarTabuleiro(M, N, tabuleiro);

jogo();


bool jogo(){

while(true){

char jogada[MAX];


printf("digite a jogada: ");

gets(jogada);


if(CMD_SAIR == jogada){

break;

}


char *token = NULL;

token = strtok(jogada, " ");

int casa = 0;

char direcao[] = "";

casa = atoi(token);


printf("digite um comando! ex: '3 d' ou 'sair'");


realizarJogada(casa, direcao);

mostrarTabuleiro(M, N, tabuleiro);


}

}


void realizarJogada(int casa, char direcao[], int encontrarPosicao){

int posicao[MAX] = encontrarPosicao(casa); //***** erro aqui*******


int linha = posicao[0];

int coluna = posicao[1];

int linhaAntes = linha;

int colunaAntes = coluna;



if(CMD_DIREITA == direcao){

coluna++;

}

if(CMD_ESQUERDA == direcao){

coluna--;

}

if(CMD_CIMA == direcao){

linha--;

}

if(CMD_BAIXO == direcao){

linha++;

}


int aux = tabuleiro[linha][coluna];

if(aux == 0){

tabuleiro[linha][coluna] = casa;

tabuleiro[linhaAntes][colunaAntes] = 0;

}

}


int encontrarPosicao(size_t linha, size_t coluna, int tabuleiro[linha][coluna], int casa){

int i, j;


for(i = 0; i< linha; i++){

for(j = 0; j < coluna; j++){

if(casa == tabuleiro[j]){

int retorno [MAX] = {i, j};

return retorno[MAX];

}

else{

printf("casa não encontrada");

}

}

}

}


void mostrarTabuleiro(size_t linha, size_t coluna, int tab[linha][coluna]){

int i, j;

for(i = 0; i < linha; i++){

for(j = 0;j < coluna; j++){

int casa = tab[j];

mostrarCasa(casa);

}

printf("\n\r");

}

}


void mostrarCasa(int casa){

if(0 == casa){

printf(" ");

}

else{

printf("%d ", casa);

}

printf("\t");

}


void montarTabuleiro(size_t linha, size_t coluna, int tab[linha][coluna]){

int i, j;

for(i = 0;i < linha; i++){

for(j = 0;j < coluna; j++){

tabuleiro[j] = rand() % (CASAS + 1);

printf("%d\n", tab[j]);

}

}

}

return EXIT_SUCCESS;

}


Compartilhar este post


Link para o post
Compartilhar em outros sites

 

 

estou tendo um erro ao chamar uma função dentro de outra


Seja específico. Qual é o erro?

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Seja específico. Qual é o erro?

error called object 'encontrarPosicao' is not a function or function pointer

int posicao[MAX] = encontrarPosicao(casa);

^

 

como posso resolver isso ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Creio eu que você está usando a função encontrarPosicao(casa); de forma errônea, ja que foi declarada assim

int encontrarPosicao(size_t, size_t, int[*][*], int);

Ou e o fato de você estar inicializando um array de int ( ou int *posicao) pois a função encontrarPosição não e um ponteiro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Creio eu que você está usando a função encontrarPosicao(casa); de forma errônea, ja que foi declarada assim

int encontrarPosicao(size_t, size_t, int[*][*], int);

Ou e o fato de você estar inicializando um array de int ( ou int *posicao) pois a função encontrarPosição não e um ponteiro.

 

 

ja arrumei os parâmetros da função encontrarPosicao, mas continua com erro de inicialização inválida, já dei uma pesquisada mas não estou conseguindo resolver

Compartilhar este post


Link para o post
Compartilhar em outros sites
Em 09/06/2016 at 15:26, blg disse:

 

 

ja arrumei os parâmetros da função encontrarPosicao, mas continua com erro de inicialização inválida, já dei uma pesquisada mas não estou conseguindo resolver

Sem que você coloque aqui o código-fonte modificado com os parâmetros "arrumados" como você mesmo diz não tem como saber aonde está o erro. 

Aqui vai uma versão do seu programa jogo do 15 refeita por mim:

 

 

#include<stdlib.h>

#include<stdio.h>

 

int tabuleiro[3][5];

 

void distribui();

 

void adiciona();

 

void mostra_tabuleiro();

 

void mover(int numero,char posicao);

 

void encontra_numero(int numero, int *linha, int *coluna); 

 

void move(int linha, int coluna, char direcao);

 

void verifica_completou();

 

int main(){

  int numero;

  char posicao;

  distribui();

  while(1){

    mostra_tabuleiro();

    verifica_completou();

    printf("Digite os comandos para mover os numeros pelo tabuleiro.");

    printf("\nNumero:");

    scanf("%d",&numero);

    fflush(stdin);

    printf("\nposicao:");

    scanf("%c",&posicao);

    fflush(stdin);

    mover(numero,posicao);

  }      

}

 

void distribui(){

  int i,j,ja_tem,valor_randomico,conta_numeros;

  for(i=0;i<3;i++)

    for(j=0;j<5;j++)

      tabuleiro[j]=0;

  conta_numeros=0;

  srand(time(NULL));

  while(conta_numeros<15){

    valor_randomico=1+(rand()%15);

    ja_tem=0;

    for(i=0;i<3;i++){

      for(j=0;j<5;j++)

        if(tabuleiro[j]==valor_randomico){

          ja_tem=1;

          break;

        }

      if(ja_tem)

        break;

    }

    if(!ja_tem){

      adiciona(conta_numeros+1,valor_randomico);

      conta_numeros++;

    }

  }  

}

 

void mostra_tabuleiro(){

  int i,j;

  for(i=0;i<3;i++){

    for(j=0;j<5;j++)

      printf("%d ",tabuleiro[j]);

    printf("\n");

  }

}

 

void adiciona(int posicao, int valor){

  int coluna,linha;

  if(posicao<6)

    linha=0;

  else if(posicao<11)

    linha=1;

  else

    linha=2;

  switch(posicao){

    case 1:

    case 6:

    case 11: coluna=0; break;

    case 2:

    case 7:

    case 12: coluna=1; break;

    case 3:

    case 8:

    case 13: coluna=2; break;

    case 4:

    case 9:

    case 14: coluna=3; break;

    case 5:

    case 10:

    case 15: coluna=4;     

  }

  tabuleiro[linha][coluna]=valor;

}

 

void mover(int numero,char posicao){

  int linha,coluna;

  if((numero<1) || (numero>15)){

    printf("Numero fora do intervalo permitido.");

    return;

  }

  if((posicao!='e') && (posicao!='d') && (posicao!='c') && (posicao!='b')){

    printf("Posicao incorreta.");

    return;

  }  

  encontra_numero(numero, &linha, &coluna);

  

  switch (posicao){

    case 'e': 

      if(coluna==0){

        printf("Limite de posicao a esquerda atingido.");

        break;

      }

      else{

        move(linha,coluna,posicao);

        break;

      }

    case 'd': 

      if(coluna==4){

        printf("Limite de posicao a direita atingido.");

        break;

      }

      else{

        move(linha,coluna,posicao);

        break;

      }

    case 'c': 

      if(linha==0){

        printf("Limite de posicao acima atingido.");

        break;

      }

      else{

        move(linha,coluna,posicao);

        break;

      }

    case 'b': 

      if(linha==2)

        printf("Limite de posicao abaixo atingido.");

      else

        move(linha,coluna,posicao);

  }

}

 

void encontra_numero(int numero, int *linha, int *coluna){

  int i,j;

  for(i=0;i<3;i++)

    for(j=0;j<5;j++)

      if(numero==tabuleiro[j]){

        *linha=i;

        *coluna=j;

        return;       

      }

}

 

void move(int linha, int coluna, char direcao){

  int temp;  

  if(direcao=='c'){

    temp=tabuleiro[linha-1][coluna];

    tabuleiro[linha-1][coluna]=tabuleiro[linha][coluna];    

    tabuleiro[linha][coluna]=temp;

  }

  if(direcao=='b'){

    temp=tabuleiro[linha+1][coluna];

    tabuleiro[linha+1][coluna]=tabuleiro[linha][coluna];    

    tabuleiro[linha][coluna]=temp;

  }

  if(direcao=='d'){

    temp=tabuleiro[linha][coluna+1];

    tabuleiro[linha][coluna+1]=tabuleiro[linha][coluna];    

    tabuleiro[linha][coluna]=temp;

  }

  if(direcao=='e'){

    temp=tabuleiro[linha][coluna-1];

    tabuleiro[linha][coluna-1]=tabuleiro[linha][coluna];    

    tabuleiro[linha][coluna]=temp;

  }

}

 

void verifica_completou(){

  int i,j,temp=0,conta=0;

  int nao_completou=1;

  for(i=0;i<3;i++)

    for(j=0;j<5;j++){

      if((tabuleiro[j]-temp)==1)

        conta++;

      else 

        conta--;

      temp=tabuleiro[j];  

  }

  if(conta==15){

    printf("Voce Completou o Jogo!");    

    system("pause");

    exit(0); 

  }

}

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.