尚未收集儲存庫資訊。
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
Huarong Road: a Klotski-style sliding-block puzzle with 100 solver-verified levels. It’s a single-file offline PWA in plain HTML/CSS/JS with no dependencies. It has explained hints, a solution viewer, skins, and English/Thai.
翻譯準備中
取自儲存庫 README
正在載入完整 README。
檢視完整 README ↗I saw a physical Huarong Road toy on Shopee, the kind with a battery, and wondered if I should buy one to fidget with. Before spending money I wanted to try the puzzle on my PC or phone first. I couldn't find a free game that also worked offline, so I asked Claude to build one. This is the result: a small, no-nonsense version that I can play on the bus, with no ads and no sign-up.
It is a hobby project, written with Claude Code.
The in-app Update button (bottom of the menu) fetches the newest version without touching your progress.
Plain HTML, CSS and JavaScript. No framework, no runtime dependencies. The build inlines everything into one self-contained dist/index.html.
node gen/gen.js # regenerate src/levels.js (~25 s, deterministic)
node test/test.js # must print "OK: 100 levels verified"
node build.js # produce dist/ (page, manifest, service worker)
python3 gen/icons.py # PWA icons into dist/ (needs Pillow; run after build)
python3 gen/shots.py # store screenshots for the manifest (needs Playwright)
node test/pwa_test.js # manifest, icons, screenshots, service-worker list
python3 test/ui_test.py # end-to-end test at a phone viewport (needs Playwright + Chromium)
To try it locally, serve dist/ over localhost or https so the service worker registers (opening the file directly works too, just without the PWA parts).
| Path | What it is |
|---|---|
src/solver.js | Board model and BFS solver (4×5 board, 20 cells) |
src/daily.js | Date-seeded daily puzzle generator, shared with the tests |
src/levels.js | Generated 100 levels ({id, par, g}), do not hand-edit |
src/game.js | All UI logic: setup, play, hints, solution viewer, settings, design stage |
src/index.html, src/style.css | Templates inlined by the build |
gen/ | Level generator, icon generator, store and README screenshot scripts |
build.js | Builds dist/ and stamps a content-hash build id |
test/ | Level verification, PWA checks, UI end-to-end test |
docs/ | Images used by this README (gen/readme_shots.py regenerates them) |
dist/ | Built site, committed and published by the GitHub Pages workflow |
More detail on conventions and rules for changing things is in CLAUDE.md.
dist/ is committed. Pushing to main runs .github/workflows/pages.yml, which publishes dist/ to GitHub Pages, so rebuild (node build.js) before you push.
docs/social-preview.png is 1280×640, GitHub's recommended size. GitHub cannot take it from the repo, so upload it once under Settings → General → Social preview. Regenerate it (and the other README images) with python3 gen/readme_shots.py after node build.js.
LICENSE.NOTICE.md. The app icon, gear, globe and timer icons are original to this project.third_party/OFL-Anuphan.txt), embedded as a Thai-only subset so the game stays a single offline file.?) panel tells the story.