Pas de soucis. Bon, le truc important à comprendre, c'est que j'ai rarement la bonne approche quand je commence un projet, donc ce que j'écris ici, c'est ce que je ferai "pour commencer"; rien ne dit que je ne changerai pas des trucs au fur et à mesure.
1) la découpe :
Ca tu l'as, à part que le code est pas au point : on peut partir du principe que si tu copy-paste la même fonction plus de 10 fois, c'est toujours mieux d'écrire une boucle. En l’occurrence, ici, tu aura besoin de deux boucles imbriquées, une pour X et une pour Y. Profites en pour placer les ID des sprites dans un tableau 2D qui a la même taille que ton taquin (4 * 4 sur ton exemple). Aussi, pour que ton taquin fonctionne, il ne faut pas oublier que tu dois supprimer une case dans un coin!
2) Le mélange :
Là, c'est le plus dur, parce que random le tableau peut donner un puzzle insoluble. Idéalement, il faut une boucle de X (où X est la difficulté), dans laquelle tu "simules" des mouvements. En gros : tu prends la case vide, tu prends une case adjacente et tu inverses leur état.
3) l'affichage :
il suffit de réutiliser la même boucle que le découpage, mais dans le sens inverse : une boucle x et une boucle y imbriquées, qui regardent si il y a un sprite dans le tableau, et qui l'affiche le cas échéant.
4) l’interactivité :
à chaque instant, il y a au maximum 4 cases déplaçables : celles qui sont en contact avec la case vide. Si tu détecte un clic sur une de ses cases, tu inverses sa position avec la case vide.
Voila comment je m'y prendrai.
@Zorro
Code:
RandomizeArray(dd())
DisplayTransparentSprite(dd(0), 0, 0)
DisplayTransparentSprite(dd(1), 100, 0)
DisplayTransparentSprite(dd(2), 0, 100)
DisplayTransparentSprite(dd(3), 100, 100)
Autant je suis pour l'utilisation des boucles et des switchs quand c'est utile, autant là ça rajoute vraiment beaucoup de code pour pas grand chose :p