Salve a tutti!

Sto scrivendo il gioco del 15 in C http://it.wikipedia.org/wiki/Gioco_del_quindici :

codice:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <windows.h>

void crea_matrice(int [][4]);
void stampa_matrice(int [][4]);
void muovi_numero(int [][4]);
int appartiene_a2D(int n, int [][4]);
int vittoria(int [][4]);

int matrice_random[4][4];
int mossa=1;

int main()
{
    crea_matrice(matrice_random);
    stampa_matrice(matrice_random);

    while(mossa<=30)
    {
        muovi_numero(matrice_random);
        system("cls");
        stampa_matrice(matrice_random);
        printf("Mossa numero: %d",mossa);
        mossa++;
    }

    return 0;
}

void crea_matrice(int campo[][4])
{
    int i,x,y;
    srand(time(NULL));
    for(i=0;i<16;i++)
        {
            x=rand()%4;
            y=rand()%4;
            if(campo[x][y])
                i--;
            else
                campo[x][y]=i;
        }
}

void stampa_matrice(int campo[][4])
{
    int x,y;
    for(x=0;x<4;x++)
    {
        for(y=0;y<4;y++)
        {
            if(campo[x][y]==0)
                printf("%7c",255);
            else
                printf("%7d",campo[x][y]);
        }
        printf("\n\n\n\n");
    }
}

void muovi_numero(int campo[][4])
{
    int x,y,n;
    printf("\nDigita il numero da spostare: ");
    scanf("%d",&n);
    if(appartiene_a2D(n,campo) && n!=0)
    {
        for(x=0;x<4;x++)
            for(y=0;y<4;y++)
            {
                if(campo[x][y]==0)
                {
                    if(campo[x][y+1]==n)
                    {
                        campo[x][y+1]=0;
                        campo[x][y]=n;
                        break;
                    }
                    else if(campo[x][y-1]==n)
                    {
                        campo[x][y-1]=0;
                        campo[x][y]=n;
                        break;
                    }
                    else if(campo[x+1][y]==n)
                    {
                        campo[x+1][y]=0;
                        campo[x][y]=n;
                        break;
                    }
                    else if(campo[x-1][y]==n)
                    {
                        campo[x-1][y]=0;
                        campo[x][y]=n;
                        break;
                    }
                    else
                    {
                        printf("\nERRORE!! Il numero %d non puo' essere spostato\n",n);
                        muovi_numero(campo);
                    }
                }
            }
    }
    else
    {
        printf("\nERRORE!! Devi digitare un numero da 1 a 15.\n");
        muovi_numero(campo);
    }
}

int appartiene_a2D(int n, int campo[][4])
{
    int r,c;
    for(r=0;r<4;r++)
        for(c=0;c<4;c++)
            if(n==campo[r][c])
                return 1;
    return 0;
}
E sto avendo dei problemi nella funzione muovi_numero(), in pratica riesco a spostare un numero a sinistra, destra e giù ma non su.

codice:
else if(campo[x+1][y]==n)
                    {
                        campo[x+1][y]=0;
                        campo[x][y]=n;
                        break;
                    }
Secondo voi dove sbaglio? Grazie a chi mi aiuta