blg 0 Denunciar post Postado Junho 7, 2016 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
_Isis_ 202 Denunciar post Postado Junho 7, 2016 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
blg 0 Denunciar post Postado Junho 8, 2016 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
freak1Day 1 Denunciar post Postado Junho 9, 2016 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
blg 0 Denunciar post Postado Junho 9, 2016 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
Wilkyn Fernandes Taborda 0 Denunciar post Postado Novembro 24, 2019 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