1// Small, hand-authored tutorial boards. Words are ordinary pushable objects;2// the engine derives the rules from their current positions on every turn.3export const levels = [4 {5 id: 'break-the-rule',6 title: 'Break the rule',7 hint: 'Push STOP out of ROCK IS STOP, then walk through the rock.',8 width: 12,9 height: 9,10 objects: [11 { kind: 'object', noun: 'MIAU', x: 1, y: 3 },12 { kind: 'object', noun: 'FLAG', x: 10, y: 5 },13 ...Array.from({ length: 12 }, (_, x) => ({ kind: 'object', noun: 'ROCK', x, y: 4 })),14 { kind: 'word', text: 'MIAU', x: 0, y: 0 },15 { kind: 'word', text: 'IS', x: 1, y: 0 },16 { kind: 'word', text: 'YOU', x: 2, y: 0 },17 { kind: 'word', text: 'FLAG', x: 5, y: 0 },18 { kind: 'word', text: 'IS', x: 6, y: 0 },19 { kind: 'word', text: 'WIN', x: 7, y: 0 },20 { kind: 'word', text: 'ROCK', x: 1, y: 2 },21 { kind: 'word', text: 'IS', x: 2, y: 2 },22 { kind: 'word', text: 'STOP', x: 3, y: 2 },23 ],24 },25 {26 id: 'make-room-to-push',27 title: 'Stuck at the end',28 hint: 'Pushed all the way, the rock jams against the edge. Does it have to be pushable?',29 width: 12,30 height: 9,31 objects: [32 { kind: 'object', noun: 'MIAU', x: 1, y: 5 },33 { kind: 'object', noun: 'ROCK', x: 4, y: 5 },34 { kind: 'object', noun: 'FLAG', x: 11, y: 5 },35 ...Array.from({ length: 12 }, (_, x) => x === 1 ? null : ({ kind: 'object', noun: 'WALL', x, y: 4 })).filter(Boolean),36 ...Array.from({ length: 12 }, (_, x) => ({ kind: 'object', noun: 'WALL', x, y: 6 })),37 { kind: 'word', text: 'MIAU', x: 3, y: 0 },38 { kind: 'word', text: 'IS', x: 4, y: 0 },39 { kind: 'word', text: 'YOU', x: 5, y: 0 },40 { kind: 'word', text: 'FLAG', x: 6, y: 0 },41 { kind: 'word', text: 'IS', x: 7, y: 0 },42 { kind: 'word', text: 'WIN', x: 8, y: 0 },43 { kind: 'word', text: 'ROCK', x: 6, y: 2 },44 { kind: 'word', text: 'IS', x: 7, y: 2 },45 { kind: 'word', text: 'PUSH', x: 8, y: 2 },46 // Keep the wall rule in the sealed lower area so it cannot be disabled47 // as a shortcut around the corridor lesson.48 { kind: 'word', text: 'WALL', x: 5, y: 8 },49 { kind: 'word', text: 'IS', x: 6, y: 8 },50 { kind: 'word', text: 'STOP', x: 7, y: 8 },51 ],52 },53 {54 id: 'two-things-can-win',55 title: 'Two things can win',56 allowBypass: true,57 allowHandsOff: true,58 hint: 'Read ROCK AND FLAG IS WIN, then reach the rock.',59 width: 12,60 height: 9,61 objects: [62 { kind: 'object', noun: 'MIAU', x: 1, y: 4 },63 { kind: 'object', noun: 'ROCK', x: 7, y: 4 },64 { kind: 'object', noun: 'FLAG', x: 10, y: 4 },65 { kind: 'word', text: 'MIAU', x: 0, y: 0 },66 { kind: 'word', text: 'IS', x: 1, y: 0 },67 { kind: 'word', text: 'YOU', x: 2, y: 0 },68 { kind: 'word', text: 'ROCK', x: 0, y: 2 },69 { kind: 'word', text: 'AND', x: 1, y: 2 },70 { kind: 'word', text: 'FLAG', x: 2, y: 2 },71 { kind: 'word', text: 'IS', x: 3, y: 2 },72 { kind: 'word', text: 'WIN', x: 4, y: 2 },73 ],74 },75];7677export default levels;