Salve ho trovato questo gioco. Vorrei capire come funzionano righe di spostamento e se c'e' qualche altro modo per scrivere queste operazioni. Poi invece di usare l'istruzione GOTO c'e' qualche altro modo? Grazie.
C:
int m[4][4] = {
{1,2,3,4},
{5,6,7,8},
{9,10,11,12},
{13,14,15,0}
};
srand((unsigned)time(NULL));
int i,j,k,jj,kk;
int num,mem;
printf("Questo programma compone il gioco del 15\n\n");
//mischio
num = (rand() % 100)+1;
for (i = 0 ; i < num ; i++)
{
k = rand() % 4;
j = rand() % 4;
kk = rand() % 4;
jj = rand() % 4;
mem = m[k][j];
m[k][j] = m[kk][jj];
m[kk][jj] = mem;
}
printf("Inserendo uno dei numeri puoi mischiare la matrice!\n\n");
int mosse=0;
while(num)
{
//disegno mappa
for(i=0; i<4; i++)
{
for(j=0; j<4; j++)
{
if(m[j]==0)
printf(" ");
else
printf(" %2d ",m[j]);
}
printf("\n\n");
}
printf("\nInserisci il numero (0 per terminare la mischia):");
scanf("%d",&num);
for(i=0; i<4; i++)
{
for(j=0; j<4; j++)
{
if(m[j] != num) continue;
//spostamento
kk = i;
jj = j;
if (j > 0 && !m[j - 1])
--jj;
else if ( j < 4 && !m[j + 1] )
++jj;
else if ( i > 0 && !m[i - 1][j] )
--kk;
else if ( i < 4 && !m[i + 1][j] )
++kk;
mem = m[j];
m[j] = m[kk][jj];
m[kk][jj] = mem;
goto contmosse;
}
}
contmosse:
++mosse;
system("cls");
}
printf("Hai risolto il Gioco del 15 in %d mosse!\n\n", mosse);
Ultima modifica da un moderatore: