Mi stavo preparando con esercizi base di C per un compito che si terrà in classe fra qualche settimana (vado in 2) e costruendo l'algoritmo per il gioco del 15 mi sono reso conto che qualcosa non andava anche perché appena compilato il programma sembra dare subito la conclusione con la vittoria; di seguito metto il codice in C base:
#include <stdio.h>
#include <stdlib.h>
int** NumSwap(int tabella[4][4], int r, int c)
{
int** matnew;
matnew=(int**)malloc(4*sizeof(int*));
for(int i=0;i<4;i++)
{
matnew[i]=(int*)malloc(4*sizeof(int));
}
if(tabella[r-1][c]!=0&&tabella[r][c-1]!=0&&tabella[r+1][c]!=0&&tabella[r][c+1]!=0)
{
printf("ERRORE!!! Sembra che tu non possa muovere questa casella, riprova.");
for(int i=0;i<4;i++)
{
for(int j=0;j<4;j++)
{
matnew[i][j]=tabella[i][j];
}
}
for(int i=0;i<4;i++)
{
free(tabella[i]);
}
return matnew;
}
if(tabella[r-1][c]==0)
{
tabella[r-1][c]=tabella[r][c];
tabella[r][c]=0;
}
if(tabella[r+1][c]==0)
{
tabella[r+1][c]=tabella[r][c];
tabella[r][c]=0;
}
if(tabella[r][c-1]==0)
{
tabella[r][c-1]=tabella[r][c];
tabella[r][c]=0;
}
if(tabella[r][c+1]==0)
{
tabella[r][c+1]=tabella[r][c];
tabella[r][c]=0;
}
for(int i=0;i<4;i++)
{
for(int j=0;j<4;j++)
{
matnew[i][j]=tabella[i][j];
}
}
for(int i=0;i<4;i++)
{
free(tabella[i]);
}
free(tabella);
return matnew;
}
main()
{
int tabella[4][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,0,15}};
int** tabnew;
int r,c,conto=1;
do{
for(int i=0;i<4;i++)
{
printf("\n");
for(int j=0;j<4;j++)
{
if(tabella[i][j]!=0)
printf(" %d",tabella[i][j]);
else
printf(" _");
}
}
printf("\n");
printf("inserisci la riga del numero che decidi di muovere: ");
scanf("%d",&r);
printf("inserisci la colonna del numero che decidi di muovere: ");
scanf("%d",&c);
tabnew=(int**)malloc(4*sizeof(int*));
for(int i=0;i<4;i++)
{
tabnew[i]=(int*)malloc(4*sizeof(int));
}
**tabnew=(tabella,r,c);
for(int i=0;i<4;i++)
{
printf("\n");
for(int j=0;j<4;j++)
{
if(tabella[i][j]!=0)
printf(" %d",tabella[i][j]);
else
printf(" _");
}
}
}while(tabella[3][3]==0);
printf("\n");
printf("Complimenti, hai vinto al gioco del 15!!");
}