尚未检测到更新。GitHub 发布版本后会显示在这里。
lets hide !
翻译准备中
正在加载完整 README。
查看完整 README ↗Hide and seek for your phone. Make a room, share the 6-letter code, and play with up to 8 friends. Hiders turn into furniture and kitchen stuff; one seeker has 3 minutes to find them all.
| Phase | Time | Seeker | Hiders |
|---|---|---|---|
| Get ready | 10 s | Sees their role | See their role |
| Hide | 1 min (30 s to 1.5 min) | Eyes closed (black screen) | Walk around, Swap into an object, Lock in place |
| Seek | 3 min (2 to 5 min) | Tap a suspicious object, press Tag | Stay still, or sneak and re-swap |
| Results | 15 s | Scores | Scores |
Scoring: seeker +100 per find, +50 per 30 s left if they find everyone. Hiders +10 per 10 s survived, +150 for never being found, +25 per taunt.
| Action | Phone | Keyboard |
|---|---|---|
| Move | Joystick (push gently to sneak) | WASD or arrows (Shift to sneak) |
| Pick an object | Tap it (nearest one is picked for you) | Click it |
| Swap / Lock / Rotate / Taunt | Buttons | E / F / R / T |
| Tag (seeker) | Tag button | Space |
You need Node.js 20 or newer.
npm install
npm run dev
Open http://localhost:5173. To play from phones on the same Wi-Fi, open http://<your-computer's-IP>:5173 on each phone (Vite prints the address as "Network").
To run it the way it runs online:
npm run build
npm start # http://localhost:3000
The website goes on Vercel and the game server on Render. Vercel can't keep a game server running between requests, so the two work together. Both are free.
render.yaml and starts a service called fyenseek-server.https://fyenseek-server.onrender.com. If Render gave a different one, put it in .env.production (VITE_SERVER_URL=wss://<that address>) and push.The free server sleeps after about 15 minutes without players. The website wakes it when someone opens the page, and the first visitor waits up to a minute.
vercel.json already sets the build command and output folder.https://fyenseek.vercel.app. Room links look like https://fyenseek.vercel.app/r/K7QF2M.Every push to main redeploys both.
The Render service also serves the website itself, so https://fyenseek-server.onrender.com works on its own. For a server that never sleeps, use an Oracle Cloud Always Free VM with the included Dockerfile:
docker build -t fyenseek .
docker run -d --restart unless-stopped -p 80:3000 fyenseek
src/shared/ rules shared by server and browser
constants.ts timers, ranges, scoring
props.ts every object, its size and whether you can turn into it
map.ts Cozy House floor plan and prop placement
movement.ts movement and collision (same code on both sides)
protocol.ts messages between browser and server
src/server/ Node server (Express + WebSocket)
room.ts lobby, phases, swapping, tagging, scoring
index.ts room codes, connections, 20 ticks per second
src/client/ browser game (Vite + Three.js)
main.ts screens, HUD, game loop
world.ts isometric 3D scene
controls.ts joystick and keyboard
src/client/public/models KayKit models (CC0)
tests/ rule tests and a 3-phone browser test
The server decides everything (movement, swaps, tags, timers). The seeker's browser never receives which object is which player: hiders get a new random id each round in the seeker's view.
npm test # map and game-rule tests
npm run build && npm start # then, in another terminal:
npm run e2e # 3 simulated phones play through a round (needs Playwright)
Add a MapDef to src/shared/map.ts (rooms, walls with door gaps, props), add it to MAPS, and add an option to the map list in src/client/index.html. npm test checks that props don't overlap walls and that every hiding spot can be reached. New models go in src/client/public/models/; run npm run props to measure them.
3D models: KayKit Furniture Bits and Restaurant Bits by Kay Lousberg, CC0 (see src/client/public/models/LICENSE-KayKit.txt).