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.