diff options
author | sanine <sanine.not@pm.me> | 2023-11-11 15:48:28 -0600 |
---|---|---|
committer | sanine <sanine.not@pm.me> | 2023-11-11 15:48:28 -0600 |
commit | 4715baef25b39d2614b1d0cc67d8bcff5676b6ce (patch) | |
tree | 52cdaf566888f163556cd77afe98db1b8e8f716b /src/simulation/game.js | |
parent | f995438c0e72e1d08203609d74854d07dbecd661 (diff) |
add setup_board
Diffstat (limited to 'src/simulation/game.js')
-rw-r--r-- | src/simulation/game.js | 46 |
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; +} |