|
|
Sommaire
|
|
|
|
|
|
Le code source
|
|
Il serait trop long et indigeste de vous fournir l'ensemble de notre code source - qui n'est pas non plus de première beauté. Voici les principales fonctions...
Tout d'abord, la suite de boucle pour créer, remplir, mélanger, conserver, etc., nos principaux tableaux.
function initTableau() {
// Le tableau original, fait à la main.
tableau = new Array(
[1, 2, 3, 4, 5, 6, 7, 8, 9],
[4, 5, 6, 7, 8, 9, 1, 2, 3],
[7, 8, 9, 1, 2, 3, 4, 5, 6],
[2, 3, 4, 5, 6, 7, 8, 9, 1],
[5, 6, 7, 8, 9, 1, 2, 3, 4],
[8, 9, 1, 2, 3, 4, 5, 6, 7],
[3, 4, 5, 6, 7, 8, 9, 1, 2],
[6, 7, 8, 9, 1, 2, 3, 4, 5],
[9, 1, 2, 3, 4, 5, 6, 7, 8]);
// Tableau des inversions de chiffres, fait à la main.
melange = new Array(1, 2, 3, 4, 5, 6, 7, 8, 9);
// Mélange du tableau des inversions.
for (i=0; i<10; i++) {
indexOriginal = Math.round(Math.random()*8);
indexMelange = Math.round(Math.random()*8);
copie = melange[indexOriginal];
melange[indexOriginal]= melange[indexMelange];
melange[indexMelange] = copie;
}
// Modification des valeurs du tableau à partir du mélange.
for (i=0; i<9; i++) {
for(j=0; j<9; j++) {
tableau[j][i] = melange[tableau[j][i]-1];
}
}
// Conserver une copie du tableau original.
tableauSolution = new Array();
for (i=0; i<10; i++) {
tableauSolution[i] = new Array();
}
for (i=0; i<10; i++) {
for (j=0; j<10; j++) {
tableauSolution[j][i] = tableau[j][i];
}
}
// Effacer certaines cases.
// 1. besoin d'une nouveau tableau indiquant
// si une case est déjà prise (true) ou pas
tableauTrous = new Array();
for (i=0; i<10; i++) {
tableauTrous[i] = new Array();
}
for (i=0; i<10; i++) {
for (j=0; j<10; j++) {
tableauTrous[i][j] = true;
}
}
// "difficulte" représente le nombre de trous à effacer par ligne.
// On calcul donc le nombre total de trous à effacer
nbrTrous = difficulte*9;
// Puis on en retard autant que nécessaire sur chaque ligne
// jusqu'à épuisement du nombre
while (nbrTrous > 0) {
for (i=0; i<9; i++) {
trousLigne = difficulte;
while (trousLigne > 0 ) {
j = Math.floor(Math.random()*9);
if (tableauTrous[i][j] === true) {
tableauTrous[i][j] = false;
tableau[i][j] = "";
trousLigne--;
nbrTrous--;
}
}
}
}
}
Ensuite, la bouche pour afficher la grille à l'écran, avec les valeurs idoines.
function initGrille() {
coordx = 0;
coordy = 0;
profondeur = 0;
// "uneCase" est le nom de notre movie-clip
// dont une instance a été placée sur la scène
taille = uneCase._width;
for (i=1; i<10; i++) {
for (j=1; j<10; j++) {
// on instancie autant de uneCase que nécessaire
laCase = attachMovie("uneCase", "c"+j+i, profondeur);
laCase._x = taille*(i-1);
laCase._y = taille*(j-1);
// on assigne la valeur du tableau mélangé et vidé
laCase.chiffre = tableau[j-1][i-1];
if (laCase.chiffre === "") {
// on lui assigne une fonction choisir()
// qui changera sa couleur (via gotoAndStop())
// et remplira la variable "choisie" avec sa référence
laCase.onPress = function() {
choisir(this);
};
}
profondeur++;
}
}
}
L'écouteur des touches du clavier
function initClavier() {
// on écoute les touche du clavier
// et on met à jour la grille
var ecouteur:Object = new Object();
ecouteur.onKeyDown = function() {
choisie.chiffre = String.fromCharCode(Key.getCode());
verifTableauCorrespondance()
};
Key.addListener(ecouteur);
}
La boucle pour vérifier qu'un chiffre entré correspond bien à la solution.
function verifTableauCorrespondance() {
toutEstbon = true;
for (i=1; i<10; i++) {
calculDesChiffres = 0
for (j=1; j<10; j++) {
if (this["c"+i+j].chiffre != "") {
calculDesChiffres += tableau[i][j];
if (calculDesChiffres == 45) {
// tous les chiffres sont rentrés
if (this["c"+i+j].chiffre != tableauSolution[i-1][j-1]) {
// ... mais ça ne correspond pas à la solution
toutEstBon = false;
statut = "Tout va mal !";
} else {
// ... et ça correspond !
statut = "Tout va bien...";
}
} else {
toutEstBon = false;
}
}
}
}
}
|