Bonjour,
J'ai tenté de faire comme le patron (mais pas si bien d'un point de vue de l'écriture) ... avec quelques différences :
- les images qui peuvent être déplacées sont celles dont la case à laquelle elles sont rattachées comporte l'adresse de la case vide voisine
- les positions de toutes les images sont enregistrées en A1 et comparées à la cible
Cela donne un code assez court et jouable (cela ne sera jamais aussi rapide qu'un appareil physique).
const doc = SpreadsheetApp.getActiveSpreadsheet();
const f = doc.getSheets()[0];
const images = f.getImages();
const adresses = ["C2","D2","E2","B3","C3","D3","E3","B4","C4","E4","D5","B5","C5","D4","B2"];
const cible = ["C2","D2","E2","B3","C3","D3","E3","B4","C4","D4","E4","B5","C5","D5","B2"];
function imageClic(n){
var img = images[n];
var ici = img.getAnchorCell().getA1Notation();
var la = img.getAnchorCell().getValue();
if (la != ""){
img.setAnchorCell(f.getRange(la));
f.getRange(ici).offset(0, 1).setValue(ici);
f.getRange(ici).offset(0,-1).setValue(ici);
f.getRange(ici).offset( 1,0).setValue(ici);
f.getRange(ici).offset(-1,0).setValue(ici);
f.getRange(la).offset(0, 1).setValue('');
f.getRange(la).offset(0,-1).setValue('');
f.getRange(la).offset( 1,0).setValue('');
f.getRange(la).offset(-1,0).setValue('');
var seq=f.getRange('A1').getValue().replace(ici,la);
f.getRange('A1').setValue(seq);
if (seq == cible.join()){Browser.msgBox('Gagné !');}
}
}
J'ai mis une situation de départ assez simple pour tester la fin de la partie
function imageLayOut(){
var actuel = [];
for (var n=0 ; n<15 ; n++){
var img = images[n];
img.setAnchorCell(f.getRange(adresses[n]));
actuel[n] = adresses[n];
}
f.getRange('A1:F6').clearContent();
f.getRange('E5').offset(0,-1).setValue('E5');
f.getRange('E5').offset(-1,0).setValue('E5');
f.getRange('A1').setValue(actuel.join());
}
Reste à faire la mise en place aléatoire ... et là, soucis ! interrogation !!
Je ne suis pas certain qu'une mise en place purement aléatoire n'amène pas des impossibilités de terminer la figure ! Il faudrait comme pour un matériel physique, partir de la figure et mélanger informatiquement par déplacements aléatoires.