1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123
| // Population
var v, h, x, y;
tour = 1;
generation = 0;
h = -11;
do {
h = h + 20;
RectanglePlein(h, 9, 1, 20 * 14, 'black'); // Que de l'esthétique, pour mettre une grille par la suite
} while (h < 20 * 14);
v = -11;
do {
v = v + 20;
RectanglePlein(9, v, 20 * 14, 1, 'black'); // De même, pas dimportance pour linstant
} while (v < 20 * 14);
var T = [ // Var T -> le tableau dans lequel on stocke les coordonnées des cellules
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // Cette ligne : y = 0 et x compris entre 0 et 13
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] // cette ligne : y = 13 et x compris entre 0 et 13
//x=0 1 2 3 4 5 6 7 8 9 10 11 12 13
];
// quelques valeurs
T[6][1] = 1;
T[6][3] = 1;
T[6][4] = 1;
T[7][3] = 1;
T[7][4] = 1;
T[7][5] = 1;
for (x = 0; x < 14; x = x + 1) { // Pour x allant de 0 à 13 et x toujours < 14
for (y = 0; y < 14; y = y + 1) { // pour y allant de 0 à 13 et y toujours < 14
//T[y][x] = Hasard(2); // On donne à chaque 0 du tableau soit 0, soit 1 par hasard pour la première génération
T[0][x] = 0; // 4 lignes suivantes très importantes -> il faut que chaque extrémité reste tout le temps = à 0, cf + bas **
T[13][x] = 0;
T[y][0] = 0;
T[y][13]=0;
if (T[y][x] == 1) { // Si un point de la coordonnée y,x = 1 (1 veut dire qu'il y a une cellule , 0 -> case vide)
CerclePlein(y * 20 + 20, x * 20 + 20, 10, 'red'); // Cellules sont rouges - pour première génération
} else {
CerclePlein(y * 20 + 20, x * 20 + 20, 10, 'black'); // cases vides sont noires - pour première génération
}
}
}
function MouseClick(x, y) { // Très important, permet à chaque clique de calculer une nouvelle génération, moyen le plus simple trouvé pour calculer plusieurs générations. 1 clique = génération + 1. Une autre idée ?
for (x = 0; x < 14; x = x + 1) { // Même chose que là-haut, on affecte à une cellule du rouge, à une case vide du noir, mais pour génération + 1
for (y = 0; y < 14; y = y + 1) {
if (T[y][x] == 1) {
CerclePlein(y * 20 + 20, x * 20 + 20, 10, 'red');
} else {
CerclePlein(y * 20 + 20, x * 20 + 20, 10, 'black');
}
}
}
for (y = 1; y <= 13; y = y + 1) { // 0 < y < 14 car comme dit, il ne faut pas calculer pour les extrémités
for (x = 1; x <= 13; x = x + 1) { // pareil pour x
if (T[y][x] == 0) {
if ((T[y - 1][x] == 1) && (T[y][x + 1] == 1) && (T[y + 1][x]) == 1) { // ** voilà ici plus bas, on calcule par rapport à cellule case haut, case droite, case bas - cf scan
T[y][x] = 1;
CerclePlein(x * 20 + 20, y * 20 + 20, 10, 'red'); // scan -> jaune
} else {
if ((T[y - 1][x] == 1) && (T[y][x - 1] == 1) && (T[y][x + 1] == 1)) { // cf scan
T[y][x] = 1;
CerclePlein(x * 20 + 20, y * 20 + 20, 10, 'red'); // scan -> marron
} else {
if ((T[y - 1][x] == 1) && (T[y][x - 1] == 1) && (T[y + 1][x] == 1)) { // cf scan
T[y][x] = 1;
CerclePlein(x * 20 + 20, y * 20 + 20, 10, 'red'); // scan -> noir
} else {
if ((T[y][x - 1] == 1) && (T[y + 1][x] == 1) && (T[y][x + 1] == 1)) { // cf scan
T[y][x] = 1;
CerclePlein(x * 20 + 20, y * 20 + 20, 10, 'red'); // scan -> rose
}
}
}
}
} else {
if (T[y][x] == 1) {
if ((T[y][x - 1] + T[y - 1][x] + T[y + 1][x] + T[y][x + 1]) == 3) {// Si une cellule vivante est entourée de 3 cellules, elle le reste (Txy = 1)
T[y][x] = 1;
RectanglePlein(x * 20 + 20, y * 20 + 20 + 7, 7, 'red');
} else {
if ((T[y][x - 1] + T[y - 1][x] + T[y + 1][x] + T[y][x + 1]) == 2) { // Si une cellule vivante est entourée de 2 cellules, elle le reste (Txy = 1)
T[y][x] = 1;
RectanglePlein(x * 20 + 20, y * 20 + 20 + 7, 7, 'red');
} else { // si aucun de ces deux cas -> cellule entourée de 0,1 ou 4 cellules, elle meurt -> tyx = 0
T[y][x] = 0;
CerclePlein(x * 20 + 20, y * 20 + 20, 10, 'black');
}
}
}
}
}
}
}
// 4 lignes suivantes cf scan ac quadrillage partie droite
// ROSE (T[y][x-1])
// ROUGE (T[y-1][x])
// ORANGE (T[y+1][x])
// VERT (T[y][x+1]) |
Partager