Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

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

×

Informação importante

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