Lo revivo porque buscando por google me ha salido esto y tengo la misma duda aunque lo he probado y no se me resuelve.
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
#define MAXMOST 3
#define N 6
#define NCICLOS 5
//Structura de dades
typedef struct//creo un nou tipus de variable//
{
int fila;
int colum;
}posicio;
//Declaració de funcions que usem
void Printmap(char map[N][N]);
int cambi_col(char lloc[2]);
int cambi_fil(char lloc[2]);
posicio Iniciar(posicio jugador , char map[N][N], int count);/*posicio final,posicio monstre[M],*/
posicio Moure(posicio jugador, char map[N][N], int contador);//moure personatge//
posicio Moure_monstre(posicio comodin, char map[N][N]);
//MAIN
int main()
{
int count=0, i=0,contador=0;
posicio jugador, final, monstre[MAXMOST], comodin;
char map[N][N]={{' ','A','B','C','D','E'},
{'5','-','-','-','-','X'},
{'4','-','-','-','X','-'},
{'3','-','X','-','X','-'},
{'2','-','-','-','-','-'},
{'1','X','-','X','-','-'}};
Printmap(map);//Imprimir situacio del joc
//Inici
printf("Punt d'Inici\n");
jugador= Iniciar(jugador, map, count);//posicionar el jugador
Printmap(map);//Imprimir situacio del joc
count++;
//Final
fflush( stdin );
printf("Punt Final\n");
final=Iniciar(final, map, count);
Printmap(map);
count++;
//Monstes
fflush( stdin );
printf("On vols que apareixin els monstres?");
monstre[i]=Iniciar(comodin, map, count);
count++;
Printmap(map);
while(jugador.fila!=final.fila && jugador.colum!=final.colum ) //moures fins el final
{
jugador=Moure(jugador, map, contador);
if(contador==NCICLOS || contador==2*NCICLOS || contador == MAXMOST*NCICLOS)
{
i++;
comodin= monstre[i];
monstre[i]=Moure_monstre(comodin, map);
Printmap(map);
}
Printmap(map);
}
}
void Printmap(char map[N][N])
{
int i,j;
for (i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
printf("%c ",map[i][j]);
}
printf ("\n");
}
printf ("\n");
}
posicio Iniciar(posicio comodi, char map[N][N], int count)
{
//int cont;
char lloc[2];
int a, b;
while(!comodi.fila || !comodi.colum)
{
fflush( stdin );
printf("Introdueix la posició \n");
fflush( stdin );
scanf("\n%s", &lloc);
a=cambi_fil(lloc);
b=cambi_col(lloc);
if(map[a][b]=='-') //TODO transformacio
{
if(count==0)
{
map[a][b]='O';
}
if(count==1)
{
map[a][b]='D';
}
if(count>1)
{
map[a][b]='M';
}
comodi.fila= a;
comodi.colum= b;
}
else
printf("No es pot aqui\n");
}
return comodi;
}
posicio Moure(posicio jugador, char map[N][N],int contador)
{
int bolea=0, fil=0, col=0, f, c;;
do
{
fil=0;
col=0;
f=0;
c=0;
char dir;
fflush( stdin );
printf("Clica una tecla per mouret\n");
fflush( stdin );
scanf("\n%c", &dir);
switch(dir)
{
case 'a'://dalt
fil--;
break;
case 'b'://baix
fil++;
break;
case 'd'://dreta
col++;
break;
case 'i'://esquerra
col--;
break;
}
f = jugador.fila + fil;
c = jugador.colum + col;
if(map[f][c]=='-'|| map[f][c]=='D')
{
map[jugador.fila][jugador.colum]='-';
map[f][c]='O';
jugador.fila= f;
jugador.colum= c;
bolea=1;
return jugador;
if(map[f][c]=='D')
{
printf("YOU WIN!!!\n");
}
contador++;
}
else
{
printf("El moviment no es correcte, torna-ho a intentar\n");
bolea=0;
}
}while(bolea==0);
}
posicio Moure_monstre(posicio comodin, char map[N][N]) //TODO
{
int bolea=0, fil=0, col=0, f, c,a;
do
{
fil=0;
col=0;
f=0;
c=0;
srand((unsigned)time(NULL));
a=rand() % 4;
switch(a)
{
case '0'://dalt
fil--;
break;
case '1'://baix
fil++;
break;
case '2'://dreta
col++;
break;
case '3'://esquerra
col--;
break;
}
f = comodin.fila + fil;
c = comodin.colum + col;
if(map[f][c]=='-' || map[f][c]=='M')
{
map[comodin.fila][comodin.colum]='-';
map[f][c]='M';
comodin.fila= f;
comodin.colum= c;
bolea=1;
return comodin;
}
else
{
bolea=0;
}
}while(bolea==0);
}
int cambi_col(char lloc[2])
{
int a;
switch(lloc[1])
{
case 'a':
a=1;
break;
case 'b':
a=2;
break;
case 'c':
a=3;
break;
case 'd':
a=4;
break;
case 'e':
a=5;
break;
}
return a;
}
int cambi_fil(char lloc[2])
{
int a;
switch(lloc[0])
{
case '1':
a=5;
break;
case '2':
a=4;
break;
case '3':
a=3;
break;
case '4':
a=2;
break;
case '5':
a=1;
break;
}
return a;
}
Me compila bien pero cuando lo ejecuto me salta los scans y va a su bola.