====== Jeu de la vie ======
Solution du TD [[nsi:tds:jeux:jeu_de_la_vie|Jeu de la vie]]
Comme pour [[nsi:langages:processing:solutions:feu_foret|Feu de forêt]], on exploite ''pixels''.
/* définition des couleurs */
color nothing = color(200,200,200);
color life = color(50,50,250);
final float p_life = 0.3; // probabilité initiale qu'une cellule soit ON
void setup(){
size(1000,800);
// initialisation de la forêt
loadPixels();
// d'abord création aléatoire
for (int i=0; i= height)){
return 0;
}
if ((col<0) || (col>= width)) {
return 0;
}
if (pixels[line*width + col] == life){
return 1;
} else {
return 0;
}
}
void set_next_state(int line, int col, boolean[] next){
/* on fournit une ligne et une colonne
en utilisant la variable globale pixels
met à jour le tableau next qui contient l'état suivant
*/
int compte = is_alive(line-1, col-1) + is_alive(line-1, col) + is_alive(line-1, col+1)
+ is_alive(line , col-1) + is_alive(line , col+1)
+ is_alive(line+1, col-1) + is_alive(line+1, col) + is_alive(line+1, col+1);
if ((compte == 3) || (compte ==2) && (pixels[line*width+col] == life)) {
next[line*width+col] = true;
} else {
next[line*width+col] = false;
}
}
void draw(){
loadPixels();
// next sert à noter les cases qu'il faudra allumer
boolean[] next = new boolean[height*width];
for (int line=0; line= width-demi) {
x = width - demi - 1;
}
int y = mouseY;
if (y < demi) {
y = demi;
} else if (y >= height - demi) {
y = height - demi - 1;
}
loadPixels();
for (int i=-demi; i<= demi; i++){
for (int j=-demi; j<= demi; j++){
if (random(1) <= p_life) {
pixels[(y+i)*width + x + j] = life;
}
}
}
updatePixels();
}