refactor GameField constructor for mapped seed Cells
This commit is contained in:
parent
f68cd3a62a
commit
ea42beed13
2 changed files with 32 additions and 13 deletions
|
@ -1,18 +1,22 @@
|
||||||
import Cell from "./Cell";
|
import Cell from "./Cell";
|
||||||
|
|
||||||
export default class GameField {
|
export default class GameField {
|
||||||
constructor(seed) {
|
constructor({ fieldArray = [], fieldMap = {} }) {
|
||||||
// seed = [ [] ]
|
// seed = [ [] ]
|
||||||
this.map = {};
|
this.map = {};
|
||||||
seed.forEach((subArray, majorIndex) =>
|
fieldArray.forEach((subArray, majorIndex) =>
|
||||||
subArray.forEach((value, minorIndex) => {
|
subArray.forEach((value, minorIndex) => {
|
||||||
if (value > 0) {
|
if (value > 0) {
|
||||||
this.map[`${majorIndex}-${minorIndex}`] = new Cell(true);
|
this.map[`${majorIndex}-${minorIndex}`] = new Cell(true);
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
|
for (let key in fieldMap) {
|
||||||
|
this.map[key] = new Cell(true);
|
||||||
|
}
|
||||||
// instead of implementing multiple GameFields, clear irrelevant keys and expand Game Field as needed
|
// instead of implementing multiple GameFields, clear irrelevant keys and expand Game Field as needed
|
||||||
|
// discrete Field expansion should only happen in View (to keep view fields centered)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// as a stream -> fieldStream => Stream(GameField, () => Stream(GameField.computeNeighbors(), () => Stream(GameField.setLiving()))
|
// as a stream -> fieldStream => Stream(GameField, () => Stream(fieldStream.computeNeighbors(), () => Stream(fieldStream.setLiving()))
|
||||||
|
|
|
@ -6,19 +6,34 @@ describe("Game Field", () => {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe("Game Field seeds living Cells", () => {
|
describe("Game Field seeds living Cells with array", () => {
|
||||||
const gameField = new GameField([
|
const gameArraySeed = new GameField({
|
||||||
[0, 1, 0],
|
fieldArray: [
|
||||||
[1, 0, 1],
|
[0, 1, 0],
|
||||||
]);
|
[1, 0, 1],
|
||||||
[("0-1", "1-0", "1-2")].forEach((key) => {
|
],
|
||||||
test(`${key} should equal living Cell`, () => {
|
});
|
||||||
expect(gameField.map[key].living).toEqual(true);
|
const gameMapSeed = new GameField({
|
||||||
|
fieldMap: {
|
||||||
|
"0-0": true,
|
||||||
|
"0-2": true,
|
||||||
|
"1-1": true,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
["0-1", "1-0", "1-2"].forEach((key) => {
|
||||||
|
test(`Array seed: ${key} should equal living Cell`, () => {
|
||||||
|
expect(gameArraySeed.map[key].living).toEqual(true);
|
||||||
|
});
|
||||||
|
test(`Map seed: ${key} should equal undefined`, () => {
|
||||||
|
expect(gameMapSeed.map[key]).toEqual(undefined);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
["0-0", "0-2", "1-1"].forEach((key) => {
|
["0-0", "0-2", "1-1"].forEach((key) => {
|
||||||
test(`${key} should equal undefined`, () => {
|
test(`Array seed: ${key} should equal undefined`, () => {
|
||||||
expect(gameField.map[key]).toEqual(undefined);
|
expect(gameArraySeed.map[key]).toEqual(undefined);
|
||||||
|
});
|
||||||
|
test(`Map seed: ${key} should equal living Cell`, () => {
|
||||||
|
expect(gameMapSeed.map[key].living).toEqual(true);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in a new issue