basin / commit
Improve readme: add Play/Source links and a Deploy section
readme.md | 31 ++++++++++++++++++++++++++++--- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/readme.md b/readme.md index 50d0ecb..817a862 100644 --- a/readme.md +++ b/readme.md @@ -1,6 +1,15 @@ # basin -A puzzle game about water basins. +A browser puzzle game about water basins — read a coastline and deduce where the +rivers begin. + +- **▶ Play:** <https://pavelsafronov.gitlab.io/basin/> +- **Source:** <https://gitlab.com/PavelSafronov/basin> + +Built with Vite + vanilla TypeScript + Canvas2D; no framework, no backend. Every +board is a seed, so a board is just a link. + +## How it works Each board has a heightmap that falls to the sea at its **ocean** sides. Water released from a *spring* flows downhill, branching to every strictly-lower @@ -13,12 +22,20 @@ a **mountain wall** (high ground that blocks water). Walls make canyons: e.g. north + south walls with east + west oceans is a valley that drains sideways. Water can never leave through a wall. +## How to play + **Goal:** find the positions of the hidden springs that reproduce that signature. Tap cells to explore the terrain — a wrong tap just previews its flow (and marks any edges it wrongly wets in red), while landing on a real spring **locks it in** (green, numbered). Find them all to solve the board. -## Configuring boards +Generation guarantees the puzzle is **unambiguous**: the hidden springs are the +*only* set of that size whose combined flow produces the target signature, so the +gold-edge hint always pins down a single answer (no redundant or interchangeable +springs). Boards that can't be made unique fall back to the richest signature +found, so a board is always produced. + +## Configuring & sharing boards Every axis of a board is a control in the panel: **size**, **spring count**, which sides are **walls**, and the **terrain seed**. All of it is captured in a single @@ -41,6 +58,13 @@ npm run build # type-check + production build npm test # run the model tests (Vitest) ``` +## Deploy + +`.gitlab-ci.yml` builds the app and publishes it to **GitLab Pages** on every push +to the default branch. Vite is configured with `base: '/basin/'` and builds into +`public/` (the dir Pages serves), so the live site is +<https://pavelsafronov.gitlab.io/basin/>. + ## Architecture The model (typed arrays) is decoupled from the renderer so a tiled/WebGL renderer @@ -51,6 +75,7 @@ can replace Canvas2D for large boards later. edge, seeded only from ocean sides). - `src/model/flow.ts` — the branching watershed flood (single- and multi-spring). - `src/model/puzzle.ts` — the board `Config`, its shareable code (encode/decode), - config-driven puzzle generation, and the solution check. + config-driven puzzle generation (with an unambiguous-solution check), and the + solution check. - `src/render/renderer.ts` — Canvas2D board + puzzle overlay. - `src/game.ts` — puzzle state: exploration probe, locked springs, win detection.