board module
This commit is contained in:
28
src/modules/board.js
Normal file
28
src/modules/board.js
Normal file
@ -0,0 +1,28 @@
|
||||
import { create2dState, create1dStateOneCell, create1dState } from "./core.js";
|
||||
|
||||
import { getRandomInt } from "./common.js";
|
||||
|
||||
function Board(width, height, grid = []) {
|
||||
this.width = width;
|
||||
this.height = height;
|
||||
(this.cellProperties = {
|
||||
size: 3,
|
||||
liveColor: "#000000",
|
||||
deadColor: "#F5F5F5",
|
||||
}),
|
||||
(this.grid = grid);
|
||||
}
|
||||
|
||||
// create a first state, either a single living cell
|
||||
// at the center or random ones
|
||||
const create1dInitialState = (board, type = "onecell") => {
|
||||
if (type === "onecell") return create1dStateOneCell(board.width);
|
||||
return create1dState(board.width, getRandomInt, [0, 2]);
|
||||
};
|
||||
|
||||
// initialize 2d board with random cells
|
||||
const create2dRandomGrid = (width, height) => {
|
||||
return create2dState(width, height, getRandomInt, [0, 2]);
|
||||
};
|
||||
|
||||
export { Board, create1dInitialState, create2dRandomGrid };
|
||||
@ -44,19 +44,21 @@ export function picToBoard(pixels, width, height) {
|
||||
acc[index] = value;
|
||||
return acc;
|
||||
}, []);
|
||||
|
||||
// TODO: The representation has to be 2D, not the data structure
|
||||
// (change to flat)
|
||||
return toMatrix(flat, width, height);
|
||||
}
|
||||
|
||||
// convert board to ImageData
|
||||
// TODO : different cell to color functions
|
||||
// (binary, intermediate states, camaieux, etc)
|
||||
export function boardToPic(board, width, height, cellProperties) {
|
||||
const live = cellProperties.liveColor;
|
||||
const dead = cellProperties.deadColor;
|
||||
const img = new ImageData(width, height);
|
||||
export function boardToPic(board) {
|
||||
const live = board.cellProperties.liveColor;
|
||||
const dead = board.cellProperties.deadColor;
|
||||
const img = new ImageData(board.width, board.height);
|
||||
const colors = [hexToRGB(live), hexToRGB(dead)];
|
||||
board.flat().reduce((acc, cell, index) => {
|
||||
board.grid.flat().reduce((acc, cell, index) => {
|
||||
// TODO : bitshift operation instead of ternary
|
||||
const color = cell === 1 ? colors[0] : colors[1];
|
||||
const i = index * 4;
|
||||
acc[i] = color[0];
|
||||
|
||||
Reference in New Issue
Block a user