@minicode-dev/chat 0.0.0-stage → 0.1.1

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 (45) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/README.md +163 -2
  3. package/assets/sounds/battleship_audio_pack/assets/cannon_fire.ogg +0 -0
  4. package/assets/sounds/battleship_audio_pack/assets/cruiser_damage_alarm.ogg +0 -0
  5. package/assets/sounds/battleship_audio_pack/assets/defeat.ogg +0 -0
  6. package/assets/sounds/battleship_audio_pack/assets/ocean_ambient_loop.ogg +0 -0
  7. package/assets/sounds/battleship_audio_pack/assets/projectile_flyby.ogg +0 -0
  8. package/assets/sounds/battleship_audio_pack/assets/ship_heavy_hit.ogg +0 -0
  9. package/assets/sounds/battleship_audio_pack/assets/ship_hit.ogg +0 -0
  10. package/assets/sounds/battleship_audio_pack/assets/ship_place.ogg +0 -0
  11. package/assets/sounds/battleship_audio_pack/assets/ship_rotate.ogg +0 -0
  12. package/assets/sounds/battleship_audio_pack/assets/ship_sinking.ogg +0 -0
  13. package/assets/sounds/battleship_audio_pack/assets/sonar_ping.ogg +0 -0
  14. package/assets/sounds/battleship_audio_pack/assets/ui_click.ogg +0 -0
  15. package/assets/sounds/battleship_audio_pack/assets/victory.ogg +0 -0
  16. package/assets/sounds/battleship_audio_pack/assets/water_splash.ogg +0 -0
  17. package/assets/sounds/connect4/close.ogg +0 -0
  18. package/assets/sounds/connect4/draw.ogg +0 -0
  19. package/assets/sounds/connect4/drop.ogg +0 -0
  20. package/assets/sounds/connect4/invite.ogg +0 -0
  21. package/assets/sounds/connect4/lose.ogg +0 -0
  22. package/assets/sounds/connect4/start.ogg +0 -0
  23. package/assets/sounds/connect4/turn.ogg +0 -0
  24. package/assets/sounds/connect4/win.ogg +0 -0
  25. package/assets/sounds/notification.mp3 +0 -0
  26. package/assets/sounds/notification.ogg +0 -0
  27. package/assets/sounds/ting.mp3 +0 -0
  28. package/assets/sounds/ting.ogg +0 -0
  29. package/dist/chunks/BattleshipGameCard-CW_A8Nim.js +958 -0
  30. package/dist/chunks/BattleshipGameCard-CW_A8Nim.js.map +1 -0
  31. package/dist/chunks/BattleshipPrototype-Duz-S1JE.js +373 -0
  32. package/dist/chunks/BattleshipPrototype-Duz-S1JE.js.map +1 -0
  33. package/dist/chunks/battleship-DXKuIZ1I.js +124 -0
  34. package/dist/chunks/battleship-DXKuIZ1I.js.map +1 -0
  35. package/dist/chunks/connect4Sounds-Do3nvVFx.js +1847 -0
  36. package/dist/chunks/connect4Sounds-Do3nvVFx.js.map +1 -0
  37. package/dist/chunks/createBattleScene-HIAvjixn.js +1621 -0
  38. package/dist/chunks/createBattleScene-HIAvjixn.js.map +1 -0
  39. package/dist/chunks/webglSupport-2WjPEPZ_.js +16 -0
  40. package/dist/chunks/webglSupport-2WjPEPZ_.js.map +1 -0
  41. package/dist/index.js +9519 -0
  42. package/dist/index.js.map +1 -0
  43. package/dist/styles.css +2 -0
  44. package/index.d.ts +470 -0
  45. package/package.json +67 -4
@@ -0,0 +1,124 @@
1
+ var e = Object.freeze([
2
+ Object.freeze({
3
+ id: "carrier",
4
+ size: 5
5
+ }),
6
+ Object.freeze({
7
+ id: "battleship",
8
+ size: 4
9
+ }),
10
+ Object.freeze({
11
+ id: "cruiser",
12
+ size: 3
13
+ }),
14
+ Object.freeze({
15
+ id: "submarine",
16
+ size: 3
17
+ }),
18
+ Object.freeze({
19
+ id: "destroyer",
20
+ size: 2
21
+ })
22
+ ]), t = () => Array.from({ length: 10 }, () => Array(10).fill(null)), n = (e) => ({
23
+ ok: !1,
24
+ reason: e
25
+ });
26
+ function r(e) {
27
+ return e != null && Number.isInteger(e.row) && Number.isInteger(e.col) && e.row >= 0 && e.row < 10 && e.col >= 0 && e.col < 10;
28
+ }
29
+ function i() {
30
+ return {
31
+ grid: t(),
32
+ shots: t(),
33
+ ships: []
34
+ };
35
+ }
36
+ function a(t, i) {
37
+ if (!i || typeof i != "object") return n("invalid_placement");
38
+ let { shipId: a, row: o, col: s, orientation: c } = i, l = e.find((e) => e.id === a);
39
+ if (!l) return n("unknown_ship");
40
+ if (t.ships.some((e) => e.id === a)) return n("already_placed");
41
+ if (c !== "horizontal" && c !== "vertical") return n("invalid_orientation");
42
+ if (!r({
43
+ row: o,
44
+ col: s
45
+ })) return n("out_of_bounds");
46
+ let u = Array.from({ length: l.size }, (e, t) => ({
47
+ row: o + (c === "vertical" ? t : 0),
48
+ col: s + (c === "horizontal" ? t : 0)
49
+ }));
50
+ return u.some((e) => !r(e)) ? n("out_of_bounds") : u.some((e) => t.grid[e.row][e.col] !== null) ? n("overlap") : {
51
+ ok: !0,
52
+ ship: {
53
+ id: a,
54
+ size: l.size,
55
+ orientation: c,
56
+ cells: u
57
+ }
58
+ };
59
+ }
60
+ function o(e, t) {
61
+ let n = a(e, t);
62
+ if (!n.ok) return n;
63
+ let r = e.grid.map((e) => e.slice()), { ship: i } = n;
64
+ for (let e of i.cells) r[e.row][e.col] = i.id;
65
+ return {
66
+ ok: !0,
67
+ board: {
68
+ ...e,
69
+ grid: r,
70
+ ships: [...e.ships, i]
71
+ },
72
+ ship: i
73
+ };
74
+ }
75
+ function s(e, t) {
76
+ let r = e.ships.find((e) => e.id === t);
77
+ if (!r) return n("unknown_ship");
78
+ if (e.shots.some((e) => e.some((e) => e !== null))) return n("battle_started");
79
+ let i = e.grid.map((e) => e.slice());
80
+ for (let e of r.cells) i[e.row][e.col] = null;
81
+ return {
82
+ ok: !0,
83
+ board: {
84
+ ...e,
85
+ grid: i,
86
+ ships: e.ships.filter((e) => e.id !== t)
87
+ }
88
+ };
89
+ }
90
+ function c(t) {
91
+ return t.ships.length === e.length && e.every((e) => {
92
+ let n = t.ships.find((t) => t.id === e.id);
93
+ return n?.size === e.size && n.cells.length === e.size;
94
+ });
95
+ }
96
+ function l(e, t) {
97
+ let n = e.ships.find((e) => e.id === t);
98
+ return !!(n && n.cells.every((t) => e.shots[t.row][t.col] === "hit"));
99
+ }
100
+ function u(e) {
101
+ return c(e) && e.ships.every((t) => l(e, t.id));
102
+ }
103
+ function d(e, t) {
104
+ if (!r(t)) return n("out_of_bounds");
105
+ if (e.shots[t.row][t.col] !== null) return n("repeat_shot");
106
+ if (u(e)) return n("battle_finished");
107
+ let i = e.grid[t.row][t.col], a = i === null ? "miss" : "hit", o = e.shots.map((e) => e.slice());
108
+ o[t.row][t.col] = a;
109
+ let s = {
110
+ ...e,
111
+ shots: o
112
+ };
113
+ return {
114
+ ok: !0,
115
+ board: s,
116
+ result: a,
117
+ shipId: i,
118
+ sunk: i !== null && l(s, i),
119
+ defeated: u(s)
120
+ };
121
+ }
122
+ export { c as a, s as c, r as i, a as l, i as n, l as o, d as r, o as s, e as t };
123
+
124
+ //# sourceMappingURL=battleship-DXKuIZ1I.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"battleship-DXKuIZ1I.js","names":["FLEET","matrix","fail","isCell","cell","createBoard","validatePlacement","placement","definition","ship","shipId","board","orientation","cells","row","index","col","placeShip","validation","grid","removeShip","item","shot","isFleetComplete","isShipSunk","isFleetSunk","fireShot","result","shots","nextBoard"],"sources":["../../src/games/battleship/logic/board.js"],"sourcesContent":["/** Pure board rules. Coordinates are zero-based { row, col }. Ships may touch. */\nexport const BOARD_SIZE = 10;\nexport const RULES_VERSION = 1;\nexport const FLEET = Object.freeze([\n Object.freeze({ id: 'carrier', size: 5 }),\n Object.freeze({ id: 'battleship', size: 4 }),\n Object.freeze({ id: 'cruiser', size: 3 }),\n Object.freeze({ id: 'submarine', size: 3 }),\n Object.freeze({ id: 'destroyer', size: 2 }),\n]);\nconst matrix = () => Array.from({ length: BOARD_SIZE }, () => Array(BOARD_SIZE).fill(null));\nconst fail = (reason) => ({ ok: false, reason });\n\nexport function isCell(cell) {\n return cell != null && Number.isInteger(cell.row) && Number.isInteger(cell.col)\n && cell.row >= 0 && cell.row < BOARD_SIZE && cell.col >= 0 && cell.col < BOARD_SIZE;\n}\n\nexport function createBoard() {\n return { grid: matrix(), shots: matrix(), ships: [] };\n}\n\nexport function validatePlacement(board, placement) {\n if (!placement || typeof placement !== 'object') return fail('invalid_placement');\n const { shipId, row, col, orientation } = placement;\n const definition = FLEET.find((ship) => ship.id === shipId);\n if (!definition) return fail('unknown_ship');\n if (board.ships.some((ship) => ship.id === shipId)) return fail('already_placed');\n if (orientation !== 'horizontal' && orientation !== 'vertical') return fail('invalid_orientation');\n if (!isCell({ row, col })) return fail('out_of_bounds');\n const cells = Array.from({ length: definition.size }, (_, index) => ({\n row: row + (orientation === 'vertical' ? index : 0),\n col: col + (orientation === 'horizontal' ? index : 0),\n }));\n if (cells.some((cell) => !isCell(cell))) return fail('out_of_bounds');\n if (cells.some((cell) => board.grid[cell.row][cell.col] !== null)) return fail('overlap');\n return { ok: true, ship: { id: shipId, size: definition.size, orientation, cells } };\n}\n\nexport function placeShip(board, placement) {\n const validation = validatePlacement(board, placement);\n if (!validation.ok) return validation;\n const grid = board.grid.map((row) => row.slice());\n const { ship } = validation;\n for (const cell of ship.cells) grid[cell.row][cell.col] = ship.id;\n return { ok: true, board: { ...board, grid, ships: [...board.ships, ship] }, ship };\n}\n\nexport function removeShip(board, shipId) {\n const ship = board.ships.find((item) => item.id === shipId);\n if (!ship) return fail('unknown_ship');\n if (board.shots.some((row) => row.some((shot) => shot !== null))) return fail('battle_started');\n const grid = board.grid.map((row) => row.slice());\n for (const cell of ship.cells) grid[cell.row][cell.col] = null;\n return { ok: true, board: { ...board, grid, ships: board.ships.filter((item) => item.id !== shipId) } };\n}\n\nexport function isFleetComplete(board) {\n return board.ships.length === FLEET.length && FLEET.every((definition) => {\n const ship = board.ships.find((item) => item.id === definition.id);\n return ship?.size === definition.size && ship.cells.length === definition.size;\n });\n}\n\nexport function isShipSunk(board, shipId) {\n const ship = board.ships.find((item) => item.id === shipId);\n return Boolean(ship && ship.cells.every((cell) => board.shots[cell.row][cell.col] === 'hit'));\n}\n\nexport function isFleetSunk(board) {\n return isFleetComplete(board) && board.ships.every((ship) => isShipSunk(board, ship.id));\n}\n\nexport function fireShot(board, cell) {\n if (!isCell(cell)) return fail('out_of_bounds');\n if (board.shots[cell.row][cell.col] !== null) return fail('repeat_shot');\n if (isFleetSunk(board)) return fail('battle_finished');\n const shipId = board.grid[cell.row][cell.col];\n const result = shipId === null ? 'miss' : 'hit';\n const shots = board.shots.map((row) => row.slice());\n shots[cell.row][cell.col] = result;\n const nextBoard = { ...board, shots };\n return {\n ok: true, board: nextBoard, result, shipId,\n sunk: shipId !== null && isShipSunk(nextBoard, shipId),\n defeated: isFleetSunk(nextBoard),\n };\n}\n"],"mappings":"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"}