summaryrefslogtreecommitdiff
path: root/src/simulation/game.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/simulation/game.js')
-rw-r--r--src/simulation/game.js46
1 files changed, 46 insertions, 0 deletions
diff --git a/src/simulation/game.js b/src/simulation/game.js
new file mode 100644
index 0000000..991d125
--- /dev/null
+++ b/src/simulation/game.js
@@ -0,0 +1,46 @@
+'use strict';
+
+
+function is_wall(size, x, y) {
+ return (
+ x === 0 || x === size-1 ||
+ y === 0 || y === size-1
+ );
+}
+function is_corner(size, x, y) {
+ const subsize = Math.floor(size/3);
+ return (
+ (x < subsize || x >= 2*subsize) &&
+ (y < subsize || y >= 2*subsize)
+ );
+}
+function get_team(size, x, y) {
+ const subsize = Math.floor(size/3);
+ if (y < subsize) {
+ return 0;
+ } else if (x >= 2*subsize) {
+ return 1;
+ } else if (y >= 2*subsize) {
+ return 2;
+ } else if (x < subsize) {
+ return 3;
+ } else {
+ return undefined;
+ }
+}
+
+export function setup_board(size) {
+ const lattice = [...Array(size)]
+ .map(() => [...Array(size)])
+ .map((row, y) => row.map((_, x) => {
+ if (is_wall(size, x, y)) {
+ return { type: 'immutable', flags: {} };
+ } else if (is_corner(size, x, y)) {
+ return { type: 'immutable', flags: {} };
+ } else {
+ const team = get_team(size, x, y);
+ return { type: 'empty', flags: { team } };
+ }
+ }));
+ return lattice;
+}