Skip to content

feat(games): Onet Connect tile-matching game - #304

Merged
slaveofcode merged 1 commit into
developfrom
feat/onet-game
Aug 21, 2026
Merged

feat(games): Onet Connect tile-matching game#304
slaveofcode merged 1 commit into
developfrom
feat/onet-game

Conversation

@slaveofcode

Copy link
Copy Markdown
Owner

Adds Onet Connect (/tools/onet) — the classic tile-matching puzzle.

The rule, done properly. Two identical tiles clear when a line joins them with at most two turns, and the line may travel around the outside of the board through a one-cell margin — the border rule that makes edge tiles matchable and the classic source of "why won't these match?" bugs.

Pure lib onet.lib.ts (35 tests):

  • findPath — BFS over (cell, direction, turns) on a padded grid, returning the corner points so the island can draw the exact line it just validated.
  • findHint / hasAnyMove — one function serving both hints and deadlock detection.
  • shuffleBoard — redeals in place, retrying until the result has a legal move, so the player is never handed a dead board.
  • createBoard — only deals playable openings; every symbol placed in pairs.
  • Tests pin the tricky cases: 0/1/2-turn routes, a blocked row, the outside-border route, correct refusal of three-turn paths (incl. opposite corners of a full board), true deadlock, and a full board played to completion.

Island: emoji tiles, three difficulties, relaxed by default with an optional timed countdown bar, hint + shuffle (small score cost), path flash on match, streak scoring, best time per mode in localStorage, useExpand fullscreen.

Bug caught while verifying: dealing the random board in the initial state made the server render differ from the client → React hydration errors (#425) in production. The board is now dealt on mount; browser smoke test confirms no console errors and a working hint→match→clear cycle.

  • Tests: 1731 passing (+36) · Lint: 0 errors · Build: both pages (EN+ID SEO) built · Verified in a real browser

Clear the board by pairing identical tiles joinable by a line with at
most two turns, including routes around the outside of the board — the
border rule that makes edge tiles matchable.

Pure onet.lib (35 tests): findPath does a BFS over (cell, direction,
turns) on a one-cell-padded grid and returns the corner points, so the
island can draw the connecting line it just validated. Plus findHint /
hasAnyMove (one function, used for both hints and deadlock detection),
shuffleBoard that retries until the redeal has a legal move, and board
generation that only deals playable openings. Tests pin the tricky
cases: 0/1/2-turn routes, blocked rows, the outside-border route, the
three-turn refusal, deadlock, and a full board played to completion.

Island: emoji tiles, three difficulties, relaxed by default with an
optional timed countdown, hint/shuffle, path flash on match, streak
scoring, best time per mode in localStorage and useExpand fullscreen.
The board is dealt on mount rather than during render — dealing it in
the initial state produced a different board on the server than the
client and logged React hydration errors. EN + ID SEO.
@cloudflare-workers-and-pages

cloudflare-workers-and-pages Bot commented Aug 21, 2026

Copy link
Copy Markdown

Deploying with  Cloudflare Workers  Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

Status Name Latest Commit Updated (UTC)
✅ Deployment successful!
View logs
goodwebtools bd85c5a Aug 21 2026, 02:03 PM

@slaveofcode
slaveofcode merged commit 1137c3a into develop Aug 21, 2026
1 of 2 checks passed
@slaveofcode
slaveofcode deleted the feat/onet-game branch August 21, 2026 14:01
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant