Jogo 8 Puzzle

Preciso fazer uma função que embaralha os numeros do jogo 8 Puzzle (do 1 ao 8), matriz 3x3
Quem pode me ajudar ? Não sei como fazer

Como vc faria isso num jogo real, não virtual?

void embaralharNumeros() {
  repita varias vezes {
    moveUmAleatoriamente();
  }
}

void moveUmAleatoriamente() {
  Posição atual = localizarEspaco();
  Posição nova = Random();
  troca(atual, nova);
}

void troca(Posição p1, Posição p2) {
  int v = matriz[p1.x][p1.y];
  matriz[p1.x][p1.y] = matriz[p2.x][p2.y];
  matriz[p2.x][p2.y] = v;
}

O embaralhamento no caso do jogo 8 Puzzle não pode ser apenas troca de posição entre os números, porque a troca arbitraria pode criar uma configuração que nunca gere uma solução do jogo.

O jeito de fazer o embaralhamento é realmente mapeando as possíveis movimentações (movimentar pra cima baixo esquerda direita) e depois criar uma randomização de movimentação.