@journey-to-code/games 0.0.0-stage → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (207) hide show
  1. package/LICENSE +21 -0
  2. package/dist/backgammon.d.ts +146 -0
  3. package/dist/backgammon.js +1221 -0
  4. package/dist/backgammon.js.map +1 -0
  5. package/dist/blackjack.d.ts +66 -0
  6. package/dist/blackjack.js +452 -0
  7. package/dist/blackjack.js.map +1 -0
  8. package/dist/bluff.d.ts +60 -0
  9. package/dist/bluff.js +239 -0
  10. package/dist/bluff.js.map +1 -0
  11. package/dist/board.d.ts +387 -0
  12. package/dist/board.js +105 -0
  13. package/dist/board.js.map +1 -0
  14. package/dist/bridge.d.ts +86 -0
  15. package/dist/bridge.js +494 -0
  16. package/dist/bridge.js.map +1 -0
  17. package/dist/canasta.d.ts +88 -0
  18. package/dist/canasta.js +646 -0
  19. package/dist/canasta.js.map +1 -0
  20. package/dist/checkers.d.ts +108 -0
  21. package/dist/checkers.js +756 -0
  22. package/dist/checkers.js.map +1 -0
  23. package/dist/chess.d.ts +162 -0
  24. package/dist/chess.js +904 -0
  25. package/dist/chess.js.map +1 -0
  26. package/dist/chesscore.d.ts +136 -0
  27. package/dist/chesscore.js +1121 -0
  28. package/dist/chesscore.js.map +1 -0
  29. package/dist/combat.d.ts +102 -0
  30. package/dist/combat.js +772 -0
  31. package/dist/combat.js.map +1 -0
  32. package/dist/contractrummy.d.ts +77 -0
  33. package/dist/contractrummy.js +430 -0
  34. package/dist/contractrummy.js.map +1 -0
  35. package/dist/crazy8.d.ts +65 -0
  36. package/dist/crazy8.js +366 -0
  37. package/dist/crazy8.js.map +1 -0
  38. package/dist/cribbage.d.ts +75 -0
  39. package/dist/cribbage.js +428 -0
  40. package/dist/cribbage.js.map +1 -0
  41. package/dist/cuckoo.d.ts +43 -0
  42. package/dist/cuckoo.js +216 -0
  43. package/dist/cuckoo.js.map +1 -0
  44. package/dist/drinkingpyramid.d.ts +54 -0
  45. package/dist/drinkingpyramid.js +213 -0
  46. package/dist/drinkingpyramid.js.map +1 -0
  47. package/dist/drinks.d.ts +25 -0
  48. package/dist/drinks.js +40 -0
  49. package/dist/drinks.js.map +1 -0
  50. package/dist/dropfour.d.ts +103 -0
  51. package/dist/dropfour.js +577 -0
  52. package/dist/dropfour.js.map +1 -0
  53. package/dist/durak.d.ts +58 -0
  54. package/dist/durak.js +332 -0
  55. package/dist/durak.js.map +1 -0
  56. package/dist/euchre.d.ts +80 -0
  57. package/dist/euchre.js +453 -0
  58. package/dist/euchre.js.map +1 -0
  59. package/dist/fivedraw.d.ts +50 -0
  60. package/dist/fivedraw.js +289 -0
  61. package/dist/fivedraw.js.map +1 -0
  62. package/dist/fivehundred.d.ts +90 -0
  63. package/dist/fivehundred.js +504 -0
  64. package/dist/fivehundred.js.map +1 -0
  65. package/dist/freecell.d.ts +50 -0
  66. package/dist/freecell.js +327 -0
  67. package/dist/freecell.js.map +1 -0
  68. package/dist/fruitsalad.d.ts +69 -0
  69. package/dist/fruitsalad.js +427 -0
  70. package/dist/fruitsalad.js.map +1 -0
  71. package/dist/gin.d.ts +72 -0
  72. package/dist/gin.js +393 -0
  73. package/dist/gin.js.map +1 -0
  74. package/dist/go.d.ts +132 -0
  75. package/dist/go.js +659 -0
  76. package/dist/go.js.map +1 -0
  77. package/dist/goboard.d.ts +218 -0
  78. package/dist/goboard.js +880 -0
  79. package/dist/goboard.js.map +1 -0
  80. package/dist/gofish.d.ts +37 -0
  81. package/dist/gofish.js +235 -0
  82. package/dist/gofish.js.map +1 -0
  83. package/dist/golf.d.ts +64 -0
  84. package/dist/golf.js +343 -0
  85. package/dist/golf.js.map +1 -0
  86. package/dist/handfoot.d.ts +86 -0
  87. package/dist/handfoot.js +515 -0
  88. package/dist/handfoot.js.map +1 -0
  89. package/dist/hearts.d.ts +65 -0
  90. package/dist/hearts.js +390 -0
  91. package/dist/hearts.js.map +1 -0
  92. package/dist/holdem.d.ts +45 -0
  93. package/dist/holdem.js +286 -0
  94. package/dist/holdem.js.map +1 -0
  95. package/dist/horserace.d.ts +49 -0
  96. package/dist/horserace.js +207 -0
  97. package/dist/horserace.js.map +1 -0
  98. package/dist/index.d.ts +65 -0
  99. package/dist/index.js +66 -0
  100. package/dist/index.js.map +1 -0
  101. package/dist/kingscorner.d.ts +59 -0
  102. package/dist/kingscorner.js +374 -0
  103. package/dist/kingscorner.js.map +1 -0
  104. package/dist/kingscup.d.ts +44 -0
  105. package/dist/kingscup.js +185 -0
  106. package/dist/kingscup.js.map +1 -0
  107. package/dist/kit.d.ts +283 -0
  108. package/dist/kit.js +73 -0
  109. package/dist/kit.js.map +1 -0
  110. package/dist/klondike.d.ts +57 -0
  111. package/dist/klondike.js +314 -0
  112. package/dist/klondike.js.map +1 -0
  113. package/dist/liarspoker.d.ts +61 -0
  114. package/dist/liarspoker.js +298 -0
  115. package/dist/liarspoker.js.map +1 -0
  116. package/dist/memory.d.ts +36 -0
  117. package/dist/memory.js +181 -0
  118. package/dist/memory.js.map +1 -0
  119. package/dist/minigolf.d.ts +104 -0
  120. package/dist/minigolf.js +724 -0
  121. package/dist/minigolf.js.map +1 -0
  122. package/dist/minigolfcourse.d.ts +127 -0
  123. package/dist/minigolfcourse.js +470 -0
  124. package/dist/minigolfcourse.js.map +1 -0
  125. package/dist/offers.d.ts +136 -0
  126. package/dist/offers.js +279 -0
  127. package/dist/offers.js.map +1 -0
  128. package/dist/ohhell.d.ts +66 -0
  129. package/dist/ohhell.js +331 -0
  130. package/dist/ohhell.js.map +1 -0
  131. package/dist/oldmaid.d.ts +40 -0
  132. package/dist/oldmaid.js +186 -0
  133. package/dist/oldmaid.js.map +1 -0
  134. package/dist/pinochle.d.ts +94 -0
  135. package/dist/pinochle.js +466 -0
  136. package/dist/pinochle.js.map +1 -0
  137. package/dist/pitch.d.ts +77 -0
  138. package/dist/pitch.js +362 -0
  139. package/dist/pitch.js.map +1 -0
  140. package/dist/poker.d.ts +79 -0
  141. package/dist/poker.js +268 -0
  142. package/dist/poker.js.map +1 -0
  143. package/dist/president.d.ts +56 -0
  144. package/dist/president.js +339 -0
  145. package/dist/president.js.map +1 -0
  146. package/dist/pyramid.d.ts +39 -0
  147. package/dist/pyramid.js +200 -0
  148. package/dist/pyramid.js.map +1 -0
  149. package/dist/registry.d.ts +17 -0
  150. package/dist/registry.js +70 -0
  151. package/dist/registry.js.map +1 -0
  152. package/dist/reversi.d.ts +69 -0
  153. package/dist/reversi.js +584 -0
  154. package/dist/reversi.js.map +1 -0
  155. package/dist/ridethebus.d.ts +48 -0
  156. package/dist/ridethebus.js +257 -0
  157. package/dist/ridethebus.js.map +1 -0
  158. package/dist/rummy500.d.ts +89 -0
  159. package/dist/rummy500.js +474 -0
  160. package/dist/rummy500.js.map +1 -0
  161. package/dist/sevens.d.ts +48 -0
  162. package/dist/sevens.js +221 -0
  163. package/dist/sevens.js.map +1 -0
  164. package/dist/slapjack.d.ts +42 -0
  165. package/dist/slapjack.js +224 -0
  166. package/dist/slapjack.js.map +1 -0
  167. package/dist/speed.d.ts +44 -0
  168. package/dist/speed.js +201 -0
  169. package/dist/speed.js.map +1 -0
  170. package/dist/spider.d.ts +51 -0
  171. package/dist/spider.js +320 -0
  172. package/dist/spider.js.map +1 -0
  173. package/dist/spite.d.ts +75 -0
  174. package/dist/spite.js +372 -0
  175. package/dist/spite.js.map +1 -0
  176. package/dist/sport.d.ts +266 -0
  177. package/dist/sport.js +48 -0
  178. package/dist/sport.js.map +1 -0
  179. package/dist/switch.d.ts +69 -0
  180. package/dist/switch.js +393 -0
  181. package/dist/switch.js.map +1 -0
  182. package/dist/table.d.ts +284 -0
  183. package/dist/table.js +67 -0
  184. package/dist/table.js.map +1 -0
  185. package/dist/talk.d.ts +17 -0
  186. package/dist/talk.js +44 -0
  187. package/dist/talk.js.map +1 -0
  188. package/dist/thirtyone.d.ts +66 -0
  189. package/dist/thirtyone.js +372 -0
  190. package/dist/thirtyone.js.map +1 -0
  191. package/dist/tictactoe.d.ts +68 -0
  192. package/dist/tictactoe.js +541 -0
  193. package/dist/tictactoe.js.map +1 -0
  194. package/dist/tricks.d.ts +21 -0
  195. package/dist/tricks.js +48 -0
  196. package/dist/tricks.js.map +1 -0
  197. package/dist/war.d.ts +44 -0
  198. package/dist/war.js +185 -0
  199. package/dist/war.js.map +1 -0
  200. package/dist/whist.d.ts +52 -0
  201. package/dist/whist.js +218 -0
  202. package/dist/whist.js.map +1 -0
  203. package/dist/yacht.d.ts +96 -0
  204. package/dist/yacht.js +653 -0
  205. package/dist/yacht.js.map +1 -0
  206. package/package.json +41 -4
  207. package/README.md +0 -3
@@ -0,0 +1,470 @@
1
+ export const BALL_RADIUS = 240;
2
+ export const CUP_RADIUS = 440;
3
+ /** A ball crossing the cup faster than this (units/s) skips over it. */
4
+ export const CUP_SPEED = 4500;
5
+ export const GREEN_FRICTION = 6000;
6
+ export const SAND_FRICTION = 26000;
7
+ /** How wide and how high a rail is, unless a hole says otherwise. */
8
+ export const RAIL_WIDTH = 340;
9
+ export const RAIL_HEIGHT = 260;
10
+ /** What every hole shares: how the green plays. A full-power putt on open ground rolls about four metres. */
11
+ const GREEN = { tickRate: 120, maxTicks: 2400, friction: GREEN_FRICTION, restSpeed: 100, restitution: 0.9, wallRestitution: 0.7, maxShotSpeed: 22000 };
12
+ /** Every hole is laid out in the same portrait picture, with room round it for the garden; a wide hole lies on its side. */
13
+ const PORTRAIT = { x: 0, y: 0, w: 10400, h: 14000 };
14
+ const LANDSCAPE = { x: 0, y: 0, w: 14000, h: 10400 };
15
+ const rect = (x1, y1, x2, y2) => [[x1, y1], [x2, y1], [x2, y2], [x1, y2]];
16
+ /** A rectangle with its corners cut off at 45°, which is most of what makes a green look built. */
17
+ const cut = (x1, y1, x2, y2, c) => [[x1 + c, y1], [x2 - c, y1], [x2, y1 + c], [x2, y2 - c], [x2 - c, y2], [x1 + c, y2], [x1, y2 - c], [x1, y1 + c]];
18
+ /** A straight strip of ground from one point to another, so wide. Square root and rounding only: the same points everywhere. */
19
+ function strip(a, b, width) {
20
+ const dx = b[0] - a[0];
21
+ const dy = b[1] - a[1];
22
+ const len = Math.sqrt(dx * dx + dy * dy);
23
+ const nx = Math.round((-dy / len) * (width / 2));
24
+ const ny = Math.round((dx / len) * (width / 2));
25
+ return [[a[0] + nx, a[1] + ny], [b[0] + nx, b[1] + ny], [b[0] - nx, b[1] - ny], [a[0] - nx, a[1] - ny]];
26
+ }
27
+ /** Eight sides round a centre: a flowerpot, a tree stump, a stepping stone. */
28
+ function octagon(cx, cy, r) {
29
+ const k = Math.round(r * 0.4142);
30
+ return [[cx - k, cy - r], [cx + k, cy - r], [cx + r, cy - k], [cx + r, cy + k], [cx + k, cy + r], [cx - k, cy + r], [cx - r, cy + k], [cx - r, cy - k]];
31
+ }
32
+ // The eight compass directions as unit vectors, and the eight directions halfway between them,
33
+ // written out as short decimals so that a mound is the same numbers everywhere.
34
+ const D = 0.7071;
35
+ const COMPASS = [[1, 0], [D, D], [0, 1], [-D, D], [-1, 0], [-D, -D], [0, -1], [D, -D]];
36
+ const A = 0.9239;
37
+ const B = 0.3827;
38
+ const BETWEEN = [[A, B], [B, A], [-B, A], [-A, B], [-A, -B], [-B, -A], [B, -A], [A, -B]];
39
+ /** How high a slope climbs when a hole doesn't say: steeper pulls and longer runs climb further. */
40
+ function riseOf(s) {
41
+ const steep = Math.sqrt(s.pull[0] * s.pull[0] + s.pull[1] * s.pull[1]);
42
+ if (s.rise !== undefined || steep === 0)
43
+ return s.rise ?? 0;
44
+ const points = "points" in s.shape ? s.shape.points : [[s.shape.x - s.shape.r, s.shape.y - s.shape.r], [s.shape.x + s.shape.r, s.shape.y + s.shape.r]];
45
+ const along = points.map((p) => (p[0] * s.pull[0] + p[1] * s.pull[1]) / steep);
46
+ return Math.round(((Math.max(...along) - Math.min(...along)) * steep) / 30000);
47
+ }
48
+ /**
49
+ * A round hill (or with a negative pull, a bowl): a ring of eight wedges from `inner` to `outer`
50
+ * round a centre, each sloping straight away from it. Inside `inner` it is flat.
51
+ */
52
+ function mound(cx, cy, inner, outer, pull, rise) {
53
+ return COMPASS.map(([ux, uy], k) => {
54
+ const [ax, ay] = BETWEEN[(k + 7) % 8];
55
+ const [bx, by] = BETWEEN[k];
56
+ const at = (r, x, y) => [Math.round(cx + r * x), Math.round(cy + r * y)];
57
+ return { shape: { points: [at(inner, ax, ay), at(outer, ax, ay), at(outer, bx, by), at(inner, bx, by)] }, pull: [Math.round(pull * ux), Math.round(pull * uy)], ...(rise !== undefined ? { rise } : {}) };
58
+ });
59
+ }
60
+ /** The flat top of a mound: the ground inside its ring of wedges. */
61
+ const moundTop = (cx, cy, inner) => BETWEEN.map(([x, y]) => [Math.round(cx + inner * x), Math.round(cy + inner * y)]);
62
+ const inside = (points, x, y) => {
63
+ let hit = false;
64
+ for (let i = 0, j = points.length - 1; i < points.length; j = i++) {
65
+ const [xi, yi] = points[i];
66
+ const [xj, yj] = points[j];
67
+ if (yi > y !== yj > y && x < ((xj - xi) * (y - yi)) / (yj - yi) + xi)
68
+ hit = !hit;
69
+ }
70
+ return hit;
71
+ };
72
+ /**
73
+ * Which side of a wall its rail stands on: the side a ball can't be. Looked at once, when the
74
+ * hole is built, by stepping a ball's width to either side of the middle of each piece and
75
+ * asking whether that is grass. Only how the hole is drawn depends on the answer.
76
+ */
77
+ function railSide(points, closed, green) {
78
+ const on = (x, y) => green.some((g) => inside(g, x, y));
79
+ let left = 0;
80
+ let right = 0;
81
+ const n = closed ? points.length : points.length - 1;
82
+ for (let k = 0; k < n; k++) {
83
+ const [ax, ay] = points[k];
84
+ const [bx, by] = points[(k + 1) % points.length];
85
+ const len = Math.sqrt((bx - ax) * (bx - ax) + (by - ay) * (by - ay));
86
+ // With y down the screen, (-ey, ex) points to the right of the way the wall runs.
87
+ const nx = (-(by - ay) / len) * BALL_RADIUS;
88
+ const ny = ((bx - ax) / len) * BALL_RADIUS;
89
+ const mx = (ax + bx) / 2;
90
+ const my = (ay + by) / 2;
91
+ if (on(mx + nx, my + ny))
92
+ right += len;
93
+ if (on(mx - nx, my - ny))
94
+ left += len;
95
+ }
96
+ // Grass on one side: the rail stands on the other. Grass on both: it stands astride the line.
97
+ if (right > 2 * left)
98
+ return "left";
99
+ if (left > 2 * right)
100
+ return "right";
101
+ return "both";
102
+ }
103
+ /** A hole from its parts: the world the physics plays and the description the table draws from. */
104
+ export function hole(spec) {
105
+ const frame = spec.frame ?? PORTRAIT;
106
+ const material = spec.material ?? "timber";
107
+ const rails = spec.rails ?? spec.green.map((points) => ({ points, closed: true }));
108
+ const railWalls = rails.map((r, i) => ({ id: `rail-${i + 1}`, points: r.points, ...(r.closed ? { closed: true } : {}) }));
109
+ const blockWalls = (spec.blocks ?? []).map((b, i) => ({ id: `block-${i + 1}`, closed: true, points: b.points }));
110
+ const ledgeWalls = (spec.ledges ?? []).map((l, i) => ({ id: `ledge-${i + 1}`, oneWay: true, points: l.points }));
111
+ const regions = [
112
+ ...(spec.slopes ?? []).map((s, i) => ({ id: `slope-${i + 1}`, shape: s.shape, slope: s.pull })),
113
+ ...(spec.sand ?? []).map((shape, i) => ({ id: `sand-${i + 1}`, shape, friction: SAND_FRICTION })),
114
+ // Listed after the sand, so that where the two overlap the grass decides how the ball rolls.
115
+ ...(spec.turf ?? []).map((points, i) => ({ id: `turf-${i + 1}`, shape: { points }, friction: GREEN_FRICTION })),
116
+ ...(spec.water ?? []).map((shape, i) => ({ id: `water-${i + 1}`, shape, out: true })),
117
+ ];
118
+ const bumpers = (spec.bumpers ?? []).map((b, i) => ({ id: `toadstool-${i + 1}`, x: b.at[0], y: b.at[1], r: b.r ?? 380, fixed: true, kick: b.kick ?? 7000 }));
119
+ const tunnels = (spec.tunnels ?? []).map(({ from, r, kind: _kind, enter: _enter, path: _path, out: _out, ...t }, i) => ({ id: `tunnel-${i + 1}`, x: from[0], y: from[1], r: r ?? 400, ...t }));
120
+ const grounds = [...spec.green, ...(spec.turf ?? [])];
121
+ return {
122
+ id: spec.id,
123
+ name: spec.name,
124
+ par: spec.par,
125
+ tip: spec.tip,
126
+ tee: spec.tee,
127
+ world: {
128
+ // The rails keep every ball in, or water takes it; the bounds are the net under both.
129
+ bounds: { x: frame.x - 500, y: frame.y - 500, w: frame.w + 1000, h: frame.h + 1000 },
130
+ ...GREEN,
131
+ bodies: bumpers,
132
+ walls: [...railWalls, ...blockWalls, ...ledgeWalls],
133
+ pockets: [{ id: "cup", x: spec.cup[0], y: spec.cup[1], r: CUP_RADIUS, maxSpeed: CUP_SPEED }],
134
+ regions,
135
+ ...(tunnels.length ? { tunnels } : {}),
136
+ },
137
+ look: {
138
+ frame,
139
+ base: spec.base ?? "lawn",
140
+ ground: [
141
+ ...(spec.scenery ?? []),
142
+ ...spec.green.map((points) => ({ shape: { points }, surface: "green", ...(spec.level ? { level: spec.level } : {}) })),
143
+ ...(spec.decks ?? []).map((d) => ({ shape: { points: d.points }, surface: d.surface ?? "green", ...(d.level !== undefined ? { level: d.level } : {}) })),
144
+ ...(spec.sand ?? []).map((shape) => ({ shape, surface: "sand" })),
145
+ ...(spec.turf ?? []).map((points) => ({ shape: { points }, surface: "green" })),
146
+ ...(spec.water ?? []).map((shape) => ({ shape, surface: "water" })),
147
+ ],
148
+ regions: regions.flatMap((r) => (r.out ? [{ id: r.id, surface: "water" }] : r.slope ? [{ id: r.id, surface: "slope", rise: riseOf(spec.slopes[Number(r.id.slice(6)) - 1]) }] : r.id.startsWith("sand") ? [{ id: r.id, surface: "sand" }] : [])),
149
+ rails: rails.map((r, i) => ({ wall: `rail-${i + 1}`, material: r.material ?? material, side: railSide(r.points, r.closed === true, grounds), width: RAIL_WIDTH, height: RAIL_HEIGHT })),
150
+ blocks: (spec.blocks ?? []).map((b, i) => ({ wall: `block-${i + 1}`, kind: b.kind, height: b.height ?? 500 })),
151
+ ledges: (spec.ledges ?? []).map((l, i) => ({ wall: `ledge-${i + 1}`, drop: l.drop, material: l.material ?? "stone" })),
152
+ tunnels: (spec.tunnels ?? []).map((t, i) => ({ id: `tunnel-${i + 1}`, kind: t.kind, enter: t.enter, ...(t.path ? { path: t.path } : {}), ...(t.out ? { out: t.out } : {}) })),
153
+ pockets: "cup",
154
+ decor: [{ kind: "tee", x: spec.tee[0], y: spec.tee[1], angle: spec.teeFacing ?? 27000 }, ...(spec.decor ?? [])],
155
+ },
156
+ fixtures: bumpers.map((b) => ({ id: b.id, owner: null, kind: "toadstool", tone: "red", label: "a toadstool", height: 640 })),
157
+ };
158
+ }
159
+ /** The hole with these balls on it (after its own bumpers), ready for one of them to be struck. */
160
+ export function holeWorld(h, balls) {
161
+ const list = Array.isArray(balls) ? balls : [balls];
162
+ return { ...h.world, bodies: [...h.world.bodies, ...list.map((b) => ({ id: b.id, x: b.x, y: b.y, r: BALL_RADIUS, ...(b.pocketed !== undefined ? { pocketed: b.pocketed } : {}) }))] };
163
+ }
164
+ // ---- The Back Garden ----------------------------------------------------------------------------
165
+ // Nine holes round a family garden, each built round one thing: a straight putt, a bank off a
166
+ // slanted board, a path through the sandpit, a drainpipe under the rockery, a plank bridge to an
167
+ // island in the pond, toadstools that kick, terraces you can only come down, a mole's tunnels, and
168
+ // then most of it at once. The first two are gentle. From the third on, the cup is never a
169
+ // straight putt from the tee: something has to be gone round, through or over.
170
+ //
171
+ // The tee is at the bottom of the picture (large y) and the cup towards the top, except on the
172
+ // one hole that lies on its side.
173
+ const welcomeMat = hole({
174
+ id: "welcome-mat",
175
+ name: "Welcome Mat",
176
+ par: 2,
177
+ tip: "Straight up the middle. Too hard and the ball skips over the cup.",
178
+ tee: [5200, 11700],
179
+ cup: [5200, 3000],
180
+ // A bottle: a neck from the tee that opens out round the cup.
181
+ green: [[[3700, 1200], [6700, 1200], [7700, 2200], [7700, 4700], [6800, 5600], [6800, 12300], [6100, 13000], [4300, 13000], [3600, 12300], [3600, 5600], [2700, 4700], [2700, 2200]]],
182
+ scenery: [
183
+ { shape: { points: rect(4300, 13300, 6100, 14600) }, surface: "gravel" },
184
+ { shape: { points: [[900, 5900], [2900, 5900], [2900, 12600], [1500, 12600], [900, 12000]] }, surface: "soil" },
185
+ { shape: { points: [[7500, 5900], [9500, 5900], [9500, 12000], [8900, 12600], [7500, 12600]] }, surface: "soil" },
186
+ ],
187
+ decor: [
188
+ { kind: "doormat", x: 5200, y: 13650, angle: 0 },
189
+ { kind: "gnome", x: 8600, y: 2500, angle: 13500, tone: "red" },
190
+ { kind: "flowerpot", x: 1800, y: 2300, r: 520, tone: "pink" },
191
+ { kind: "flowerpot", x: 1900, y: 4300, r: 400, tone: "gold" },
192
+ { kind: "flowers", x: 1900, y: 7000, tone: "pink" },
193
+ { kind: "bush", x: 1900, y: 8700, r: 620 },
194
+ { kind: "flowers", x: 1900, y: 10400, tone: "gold" },
195
+ { kind: "flowers", x: 8500, y: 6900, tone: "white" },
196
+ { kind: "bush", x: 8500, y: 8500, r: 560 },
197
+ { kind: "flowers", x: 8500, y: 10100, tone: "purple" },
198
+ { kind: "flowers", x: 8500, y: 11600, tone: "pink" },
199
+ { kind: "steppingstone", x: 8700, y: 4500, r: 430 },
200
+ { kind: "steppingstone", x: 9500, y: 3600, r: 380 },
201
+ { kind: "wateringcan", x: 1700, y: 12950, angle: 33000 },
202
+ ],
203
+ });
204
+ const elbow = hole({
205
+ id: "elbow",
206
+ name: "The Elbow",
207
+ par: 3,
208
+ tip: "The cup is round the corner. Putt straight up: the slanted board at the top turns the ball for you.",
209
+ tee: [2800, 11700],
210
+ cup: [7600, 2150],
211
+ material: "brick",
212
+ // An L, with the outside corner cut off at 45° so a ball sent straight up is turned to the right.
213
+ green: [[[3600, 1000], [8600, 1000], [9300, 1700], [9300, 3400], [8600, 4100], [5100, 4100], [4400, 4800], [4400, 12300], [3700, 13000], [1900, 13000], [1200, 12300], [1200, 3400]]],
214
+ scenery: [
215
+ { shape: { points: [[5300, 5300], [9400, 5300], [9400, 12400], [5300, 12400]] }, surface: "paving" },
216
+ { shape: { points: rect(1900, 13300, 3700, 14600) }, surface: "gravel" },
217
+ ],
218
+ decor: [
219
+ { kind: "bench", x: 7350, y: 6300, angle: 0, length: 2600 },
220
+ { kind: "wheelbarrow", x: 7700, y: 9000, angle: 31000 },
221
+ { kind: "flowerpot", x: 6000, y: 11300, r: 520, tone: "red" },
222
+ { kind: "flowerpot", x: 8700, y: 11500, r: 430, tone: "purple" },
223
+ { kind: "flowerpot", x: 5950, y: 8100, r: 380, tone: "gold" },
224
+ { kind: "tree", x: 1500, y: 1400, r: 1250 },
225
+ { kind: "bricks", x: 8900, y: 7700, angle: 2000 },
226
+ { kind: "gnome", x: 9500, y: 4700, angle: 20000, tone: "blue" },
227
+ { kind: "flowers", x: 600, y: 6000, tone: "white" },
228
+ { kind: "flowers", x: 600, y: 9500, tone: "pink" },
229
+ ],
230
+ });
231
+ const sandpit = hole({
232
+ id: "sandpit",
233
+ name: "The Sandpit",
234
+ par: 3,
235
+ tip: "Sand stops a ball in a hurry. Keep to the grass path, a corner at a time, or blast through and hope.",
236
+ tee: [5200, 11900],
237
+ cup: [5200, 2100],
238
+ green: [cut(1000, 1000, 9400, 13000, 2000)],
239
+ sand: [{ points: cut(1000, 1000, 9400, 13000, 2000) }],
240
+ // The path: three straight runs with a round turning place at each corner.
241
+ turf: [
242
+ octagon(5200, 11900, 1150),
243
+ strip([5200, 11900], [2700, 8700], 1700),
244
+ octagon(2700, 8700, 1150),
245
+ strip([2700, 8700], [7700, 5300], 1700),
246
+ octagon(7700, 5300, 1150),
247
+ strip([7700, 5300], [5200, 2100], 1700),
248
+ octagon(5200, 2100, 1150),
249
+ ],
250
+ blocks: [{ points: [[4750, 6400], [5650, 6400], [5850, 6900], [5650, 7500], [4750, 7500], [4550, 6900]], kind: "castle", height: 700 }],
251
+ decor: [
252
+ { kind: "bucket", x: 7600, y: 9800, tone: "red" },
253
+ { kind: "spade", x: 6500, y: 10600, angle: 4000, tone: "blue" },
254
+ { kind: "shell", x: 2600, y: 4200, angle: 3000 },
255
+ { kind: "shell", x: 7900, y: 2700, angle: 20000 },
256
+ { kind: "shell", x: 3300, y: 11300, angle: 12000 },
257
+ { kind: "bucket", x: 2900, y: 2900, tone: "gold" },
258
+ { kind: "bush", x: 900, y: 1300, r: 700 },
259
+ { kind: "bush", x: 9600, y: 12800, r: 650 },
260
+ { kind: "flowers", x: 9500, y: 1500, tone: "gold" },
261
+ { kind: "flowers", x: 800, y: 12700, tone: "pink" },
262
+ { kind: "gnome", x: 5200, y: 13500, angle: 27000, tone: "green" },
263
+ ],
264
+ });
265
+ const drainpipe = hole({
266
+ id: "drainpipe",
267
+ name: "The Drainpipe",
268
+ par: 3,
269
+ tip: "The rockery is in the way. Roll the ball into the pipe and it comes out on the far side, or take the long way round by the sand.",
270
+ tee: [5200, 11700],
271
+ cup: [6500, 2500],
272
+ material: "stone",
273
+ green: [cut(1200, 1000, 9200, 13000, 1200)],
274
+ // Three rocks shoulder to shoulder from the left-hand rail; the gap is on the right.
275
+ blocks: [
276
+ { points: [[1200, 6000], [2300, 5800], [3100, 6300], [3100, 7700], [2200, 8000], [1200, 7800]], kind: "rock", height: 520 },
277
+ { points: [[3100, 6300], [4100, 6300], [4100, 7700], [3100, 7700]], kind: "rock", height: 600 },
278
+ { points: [[4100, 6300], [5400, 5900], [6900, 6200], [7400, 6900], [6800, 7900], [5300, 8100], [4100, 7700]], kind: "rock", height: 680 },
279
+ ],
280
+ tunnels: [{ kind: "pipe", from: [3600, 7780], r: 400, to: [3600, 6040], angle: 27000, speed: 5200, ticks: 40, enter: 27000, out: [3600, 6220] }],
281
+ sand: [{ points: [[7700, 6500], [9200, 6100], [9200, 8000], [7900, 7900]] }],
282
+ decor: [
283
+ { kind: "rock", x: 600, y: 6700, r: 520 },
284
+ { kind: "rock", x: 9800, y: 6900, r: 450 },
285
+ { kind: "bush", x: 600, y: 5300, r: 520 },
286
+ { kind: "flowers", x: 700, y: 8600, tone: "purple" },
287
+ { kind: "flowers", x: 9750, y: 5600, tone: "gold" },
288
+ { kind: "gnome", x: 9500, y: 1200, angle: 13500, tone: "blue" },
289
+ { kind: "wateringcan", x: 900, y: 12700, angle: 30000 },
290
+ { kind: "tree", x: 9300, y: 13300, r: 1100 },
291
+ { kind: "flowerpot", x: 900, y: 1300, r: 480, tone: "red" },
292
+ ],
293
+ });
294
+ const lilyPond = hole({
295
+ id: "lily-pond",
296
+ name: "Lily Pond",
297
+ par: 3,
298
+ tip: "Over the plank bridge to the island. There is no rail on the bridge: in the water costs a stroke, and you play again from where you were.",
299
+ tee: [5200, 12000],
300
+ cup: [6800, 3700],
301
+ // The bank the tee is on, the bridge, and the island: one piece of ground.
302
+ green: [
303
+ [[2200, 10800], [8200, 10800], [8200, 12300], [7500, 13000], [2900, 13000], [2200, 12300]],
304
+ rect(4400, 7500, 6000, 10900),
305
+ [[4100, 2200], [6300, 2200], [7800, 3700], [7800, 5900], [6300, 7600], [4100, 7600], [2600, 5900], [2600, 3700]],
306
+ ],
307
+ decks: [{ points: rect(4400, 7600, 6000, 10800), surface: "deck", level: 160 }],
308
+ // Rails round the back of the bank and behind the cup. Everything else is open to the pond.
309
+ rails: [{ points: [[2200, 10800], [2200, 12300], [2900, 13000], [7500, 13000], [8200, 12300], [8200, 10800]] }, { points: [[2600, 5900], [2600, 3700], [4100, 2200], [6300, 2200], [7800, 3700], [7800, 5900]] }],
310
+ // The pond is everything inside its bank that isn't the island or the bridge.
311
+ water: [
312
+ {
313
+ points: [
314
+ [2600, 900], [7800, 900], [9500, 2600], [9500, 9200], [8200, 10800], [6000, 10800], [6000, 7600], [6300, 7600], [7800, 5900], [7800, 3700], [6300, 2200], [4100, 2200], [2600, 3700], [2600, 5900], [4100, 7600], [4400, 7600], [4400, 10800], [2200, 10800], [900, 9200], [900, 2600],
315
+ ],
316
+ },
317
+ ],
318
+ blocks: [{ points: octagon(4300, 4700, 420), kind: "stone", height: 350 }],
319
+ decor: [
320
+ { kind: "lilypad", x: 2300, y: 8300, r: 520, angle: 4000 },
321
+ { kind: "lilypad", x: 3200, y: 9400, r: 380, angle: 15000, tone: "pink" },
322
+ { kind: "lilypad", x: 8200, y: 8000, r: 480, angle: 30000, tone: "pink" },
323
+ { kind: "lilypad", x: 7300, y: 9300, r: 340, angle: 9000 },
324
+ { kind: "lilypad", x: 8700, y: 4600, r: 420, angle: 20000 },
325
+ { kind: "lilypad", x: 1700, y: 4300, r: 400, angle: 1000, tone: "white" },
326
+ { kind: "fish", x: 7400, y: 7200, angle: 21000, tone: "orange" },
327
+ { kind: "fish", x: 2000, y: 6400, angle: 3000, tone: "gold" },
328
+ { kind: "fish", x: 8700, y: 2900, angle: 12000, tone: "white" },
329
+ { kind: "duck", x: 3000, y: 1700, angle: 2000 },
330
+ { kind: "reeds", x: 1500, y: 10200 },
331
+ { kind: "reeds", x: 9000, y: 9900 },
332
+ { kind: "reeds", x: 1300, y: 2100 },
333
+ { kind: "rock", x: 9100, y: 1500, r: 480 },
334
+ { kind: "bush", x: 900, y: 12300, r: 650 },
335
+ { kind: "flowers", x: 9300, y: 12300, tone: "gold" },
336
+ { kind: "gnome", x: 1300, y: 11300, angle: 31500, tone: "red" },
337
+ ],
338
+ });
339
+ const toadstools = hole({
340
+ id: "toadstools",
341
+ name: "Toadstool Ring",
342
+ par: 3,
343
+ tip: "Toadstools knock the ball away, hard. There's one right between you and the cup: go round it, or bounce in off a board.",
344
+ frame: LANDSCAPE,
345
+ tee: [2900, 5200],
346
+ teeFacing: 0,
347
+ cup: [11200, 5200],
348
+ green: [cut(1300, 1200, 12700, 9200, 1900)],
349
+ bumpers: [{ at: [7000, 5200] }, { at: [8900, 3300] }, { at: [8900, 7100] }, { at: [5300, 2900] }, { at: [5300, 7500] }, { at: [11000, 3000], r: 320 }, { at: [11000, 7400], r: 320 }],
350
+ decor: [
351
+ { kind: "tree", x: 1200, y: 1300, r: 1300 },
352
+ { kind: "gnome", x: 12900, y: 1500, angle: 13500, tone: "green" },
353
+ { kind: "gnome", x: 13100, y: 8900, angle: 22500, tone: "red" },
354
+ { kind: "flowers", x: 800, y: 8800, tone: "white" },
355
+ { kind: "flowers", x: 5000, y: 600, tone: "purple" },
356
+ { kind: "flowers", x: 9000, y: 9800, tone: "gold" },
357
+ { kind: "bush", x: 13350, y: 5200, r: 480 },
358
+ { kind: "steppingstone", x: 700, y: 4400, r: 420 },
359
+ { kind: "steppingstone", x: 600, y: 5600, r: 380 },
360
+ { kind: "rock", x: 2300, y: 9700, r: 420 },
361
+ ],
362
+ });
363
+ const terraces = hole({
364
+ id: "terraces",
365
+ name: "The Terraces",
366
+ par: 4,
367
+ tip: "You can roll down a step but never up one. Take the ramp on the left to the top, then drop down to the cup.",
368
+ tee: [6600, 11600],
369
+ cup: [7400, 6500],
370
+ material: "stone",
371
+ // The top-left corner is a slanted board: a firm putt up the ramp is turned along the top terrace.
372
+ green: [[[3400, 1000], [8400, 1000], [9200, 1800], [9200, 12200], [8400, 13000], [2000, 13000], [1200, 12200], [1200, 3200]]],
373
+ decks: [
374
+ { points: [[3400, 1000], [8400, 1000], [9200, 1800], [9200, 4400], [1200, 4400], [1200, 3200]], level: 900 },
375
+ // The middle terrace runs on under the fence.
376
+ { points: rect(3600, 4400, 9200, 8600), level: 450 },
377
+ ],
378
+ // The fence between the ramp and the middle terrace.
379
+ blocks: [{ points: rect(3600, 4400, 3900, 8600), kind: "timber", height: 400 }],
380
+ ledges: [
381
+ { points: [[3900, 4400], [9200, 4400]], drop: 450 },
382
+ { points: [[3900, 8600], [9200, 8600]], drop: 450 },
383
+ ],
384
+ slopes: [{ shape: { points: rect(1200, 4400, 3600, 8600) }, pull: [0, 7500], rise: 900 }],
385
+ decor: [
386
+ { kind: "rock", x: 9800, y: 4400, r: 520 },
387
+ { kind: "rock", x: 9750, y: 8600, r: 470 },
388
+ { kind: "rock", x: 600, y: 8700, r: 430 },
389
+ { kind: "bush", x: 600, y: 4700, r: 520 },
390
+ { kind: "flowers", x: 9800, y: 6500, tone: "pink" },
391
+ { kind: "flowers", x: 9800, y: 2600, tone: "gold" },
392
+ { kind: "birdbath", x: 1700, y: 1400, r: 620 },
393
+ { kind: "gnome", x: 9700, y: 12600, angle: 22500, tone: "gold" },
394
+ { kind: "flowerpot", x: 700, y: 12800, r: 460, tone: "purple" },
395
+ ],
396
+ });
397
+ const moleRun = hole({
398
+ id: "mole-run",
399
+ name: "Mole Run",
400
+ par: 3,
401
+ tip: "A ball that drops down a mole's hole pops up from a molehill somewhere else. The hole on the right is the one you want.",
402
+ tee: [6900, 11700],
403
+ cup: [3300, 2700],
404
+ green: [[[2400, 1000], [6200, 1000], [7200, 2000], [7200, 5200], [9200, 7200], [9200, 12000], [8200, 13000], [3800, 13000], [2800, 12000], [2800, 7600], [1400, 6200], [1400, 2000]]],
405
+ slopes: mound(3300, 2700, 600, 1500, 6500, 240),
406
+ decks: [{ points: moundTop(3300, 2700, 600), level: 240 }],
407
+ tunnels: [
408
+ // The decoy, right on the line to the cup: it brings the ball back towards the tee.
409
+ { kind: "burrow", from: [5300, 7600], r: 420, maxSpeed: 14000, to: [4200, 11600], angle: 1500, speed: 2600, ticks: 50, enter: 9000 },
410
+ // The good one: out beside the cup's hill.
411
+ { kind: "burrow", from: [8300, 8300], r: 420, maxSpeed: 14000, to: [5900, 3900], angle: 20500, speed: 3200, ticks: 60, enter: 9000 },
412
+ ],
413
+ blocks: [{ points: octagon(6300, 9300, 430), kind: "pot", height: 600 }],
414
+ scenery: [{ shape: { points: [[7700, 900], [9600, 900], [9600, 5200], [8900, 5900], [7700, 4700]] }, surface: "soil" }],
415
+ decor: [
416
+ { kind: "molehill", x: 1500, y: 9800, r: 560, tone: "black" },
417
+ { kind: "molehill", x: 900, y: 11500, r: 420 },
418
+ { kind: "bush", x: 8600, y: 1700, r: 430 },
419
+ { kind: "bush", x: 8700, y: 2900, r: 430 },
420
+ { kind: "bush", x: 8600, y: 4100, r: 430 },
421
+ { kind: "spade", x: 9400, y: 5300, angle: 24000, tone: "green" },
422
+ { kind: "flowers", x: 600, y: 4200, tone: "white" },
423
+ { kind: "flowers", x: 1700, y: 12800, tone: "gold" },
424
+ { kind: "gnome", x: 9700, y: 13200, angle: 22500, tone: "purple" },
425
+ { kind: "tree", x: 900, y: 900, r: 1050 },
426
+ ],
427
+ });
428
+ const wholeGarden = hole({
429
+ id: "whole-garden",
430
+ name: "The Whole Garden",
431
+ par: 4,
432
+ tip: "Past the paddling pool, then into the end of the hose: it squirts the ball out on the far side. Mind the toadstools, and drop off the step to the cup.",
433
+ tee: [2700, 11900],
434
+ cup: [7700, 10100],
435
+ // A horseshoe: up the left leg, across the top, down the right.
436
+ green: [[[2200, 1000], [8200, 1000], [9200, 2000], [9200, 10600], [8400, 11400], [7000, 11400], [6200, 10600], [6200, 4200], [4200, 4200], [4200, 12200], [3400, 13000], [2000, 13000], [1200, 12200], [1200, 2000]]],
437
+ // The whole green is a raised bed, and the last of it is a step back down to the lawn.
438
+ level: 300,
439
+ decks: [{ points: [[6200, 8600], [9200, 8600], [9200, 10600], [8400, 11400], [7000, 11400], [6200, 10600]], level: 0 }],
440
+ ledges: [{ points: [[6200, 8600], [9200, 8600]], drop: 300, material: "timber" }],
441
+ water: [{ x: 2100, y: 7300, r: 950 }],
442
+ sand: [{ points: octagon(5200, 2600, 1050) }],
443
+ bumpers: [{ at: [8300, 5700] }, { at: [7200, 7500] }],
444
+ tunnels: [{ kind: "hose", from: [3700, 5400], r: 400, to: [6800, 4800], angle: 9000, speed: 4200, ticks: 70, enter: 27000, path: [[3700, 5400], [3800, 4700], [4700, 4500], [5200, 5600], [5900, 6000], [6800, 5400], [6800, 4800]] }],
445
+ scenery: [{ shape: { points: rect(4500, 6600, 5900, 13300) }, surface: "paving" }],
446
+ decor: [
447
+ { kind: "poolring", x: 2100, y: 7300, r: 950, tone: "blue" },
448
+ { kind: "duck", x: 1900, y: 7100, angle: 5000 },
449
+ { kind: "hosereel", x: 5200, y: 7600, angle: 27000 },
450
+ { kind: "wheelbarrow", x: 5200, y: 10200, angle: 9000 },
451
+ { kind: "flowerpot", x: 5200, y: 12500, r: 480, tone: "red" },
452
+ { kind: "gnome", x: 9800, y: 11900, angle: 22500, tone: "red" },
453
+ { kind: "tree", x: 9600, y: 800, r: 1000 },
454
+ { kind: "flowers", x: 600, y: 4000, tone: "pink" },
455
+ { kind: "flowers", x: 600, y: 9800, tone: "white" },
456
+ { kind: "bush", x: 9900, y: 5500, r: 500 },
457
+ { kind: "steppingstone", x: 7300, y: 12400, r: 420 },
458
+ { kind: "steppingstone", x: 8300, y: 13100, r: 400 },
459
+ { kind: "wateringcan", x: 700, y: 12900, angle: 31000 },
460
+ ],
461
+ });
462
+ export const backGarden = {
463
+ id: "back-garden",
464
+ name: "The Back Garden",
465
+ holes: [welcomeMat, elbow, sandpit, drainpipe, lilyPond, toadstools, terraces, moleRun, wholeGarden],
466
+ };
467
+ /** Every course there is. A new course goes here, and the tests play each of its holes. */
468
+ export const COURSES = [backGarden];
469
+ export const courseOf = (id) => COURSES.find((c) => c.id === id) ?? backGarden;
470
+ //# sourceMappingURL=minigolfcourse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"minigolfcourse.js","sourceRoot":"","sources":["../src/minigolfcourse.ts"],"names":[],"mappings":"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"}