thomas
This commit is contained in:
63
TP1/EX4/gameoflife.js
Normal file
63
TP1/EX4/gameoflife.js
Normal file
@@ -0,0 +1,63 @@
|
||||
class GameOfLife {
|
||||
constructor(width, height) {
|
||||
this.width = width;
|
||||
this.height = height;
|
||||
this.grid = new Array(height).fill(null).map(() => new Array(width).fill(0));
|
||||
}
|
||||
|
||||
// Initialise la grille avec l'état de départ
|
||||
setInitialState(initialStateString) {
|
||||
this.grid = new Array(this.height).fill(null).map(() => new Array(this.width).fill(0));
|
||||
const liveCells = initialStateString.split(';').map(cell => cell.split(','));
|
||||
liveCells.forEach(([x, y]) => {
|
||||
const cellX = parseInt(x);
|
||||
const cellY = parseInt(y);
|
||||
if (cellX >= 0 && cellX < this.width && cellY >= 0 && cellY < this.height) {
|
||||
this.grid[cellY][cellX] = 1;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// Calcule le nombre de voisins vivants d'une cellule
|
||||
getNumberActiveNeighbourCells(x, y) {
|
||||
let count = 0;
|
||||
for (let i = -1; i <= 1; i++) {
|
||||
for (let j = -1; j <= 1; j++) {
|
||||
if (i === 0 && j === 0) continue;
|
||||
|
||||
const neighborX = x + j;
|
||||
const neighborY = y + i;
|
||||
|
||||
if (neighborX >= 0 && neighborX < this.width && neighborY >= 0 && neighborY < this.height) {
|
||||
count += this.grid[neighborY][neighborX];
|
||||
}
|
||||
}
|
||||
}
|
||||
return count;
|
||||
}
|
||||
|
||||
// Calcule la génération suivante
|
||||
computeNextGeneration() {
|
||||
const nextGrid = new Array(this.height).fill(null).map(() => new Array(this.width).fill(0));
|
||||
|
||||
for (let y = 0; y < this.height; y++) {
|
||||
for (let x = 0; x < this.width; x++) {
|
||||
const liveNeighbors = this.getNumberActiveNeighbourCells(x, y);
|
||||
const cellState = this.grid[y][x];
|
||||
|
||||
if (cellState === 1) {
|
||||
// Règle 2 : Cellule vivante
|
||||
if (liveNeighbors === 2 || liveNeighbors === 3) {
|
||||
nextGrid[y][x] = 1;
|
||||
}
|
||||
} else {
|
||||
// Règle 1 : Cellule morte
|
||||
if (liveNeighbors === 3) {
|
||||
nextGrid[y][x] = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
this.grid = nextGrid;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user