|
{Ctl+Enter} to run model
download.zip
copy iframe widget source
| Code Terminal |
function declaration({fn, cell, role}) { let dx = 220; let dy = 140; let X = 'X'; let O = 'O'; function row (n) { return [ cell(n+"0", 1, 1, { x: 1*dx, y: (n+1)*dy}), cell(n+"1", 1, 1, { x: 2*dx, y: (n+1)*dy}), cell(n+"2", 1, 1, { x: 3*dx, y: (n+1)*dy}) ]; } let board = [ row(0), row(1), row(2) ]; let players = { X: { turn: cell(X, 1, 1, { x: 40, y: 200 }), // track turns, X goes first role: role(X), // player X can only mark X's next: O, dx: -60 }, O: { turn: cell(O, 0, 1, { x: 830, y: 370}), // track turns, O moves second role: role(O), // player O can only mark O's next: X, dx: 60 } }; for (let i in board) { for (let j in board[i]) { for (let marking in players) { player = players[marking]; let {position} = board[i][j].place; // use place for relative positioning move = fn(marking+i+j, player.role, { // declare a move x: position.x+player.dx, // position using each player's unique delta y: position.y, }); player.turn.tx(1, move); // take turn board[i][j].tx(1, move); // take board space move.tx(1, players[player.next].turn); // mark next turn } } } }
bitwrap.io petri-net models