Underground 2 Revived
Play Need for Speed: Underground 2 (2004) in Chrome and Firefox with WebGPU graphics, Web Audio, up to 120 fps widescreen, controller support, free roam and Online races with friends. Fan project, not
翻译准备中
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证正在加载完整 README。 以下为已保存的摘录。
🎮 Responsive 2048 browser game built with HTML, modular CSS, vanilla
JavaScript, and Vite.
This project implements the classic 2048 puzzle as a compact static web game.
The source stays intentionally small and framework-free, but keeps production
habits from larger projects: a Vite build pipeline, modular CSS, hashed assets,
HTML/CSS/JavaScript minification, autoprefixing, linting, a bundle size budget,
CI on GitHub Actions, and a clear AI-agent rule set for future maintenance.查看完整 README ↗🎮 Responsive 2048 browser game built with vanilla JavaScript, modular CSS, and Webpack.
The classic 2048 puzzle as a compact static web game, written without a UI framework. The code is split into small object-oriented layers: a model with the rules, views, input, storage and controllers. It keeps production habits from larger projects: a Webpack build, size budgets, CI, linting hooks, and accessibility.
+N score pop and a New record! badge| Action | Keyboard | Touch |
|---|---|---|
| Move the tiles | Arrow keys or WASD | Swipe anywhere on the page |
| New game, switch theme, open settings | Tab to a toolbar button, then Enter or Space | Tap a toolbar button |
| Close settings, cancel, continue after a win | Escape | Tap Close, Cancel or Continue playing |
src/
index.html Page markup, metadata and the four dialogs
favicon.svg SVG favicon
fonts/ Self-hosted Rubik (Latin woff2)
scripts/
main.js Composition root: finds the DOM, creates and wires the objects
constants.js Board sizes, win tiles, timings, storage keys, settings table
themeHead.js Plain script inlined into <head>: sets the theme before the first paint
game/ Model: Board, Game, Settings, Statistics (rules and values, no DOM)
ui/ Views: grid, score, dialogs, settings, theme switch, footer
input/ Keyboard and swipe input
storage/ Safe localStorage wrapper
controllers/ Use cases and flow state: game, high score, saved game, settings, statistics, theme
styles/
main.css CSS entry, imports the rest
theme.css Scales and every UI colour for both themes, the theme reveal
base.css Font face, reset, page base, focus ring
layout.css Page layout, the short landscape layout, footer
header.css Header: logo, score boxes, score pop, record badge
board.css Board, cells, tiles and their animation classes
tiles.css Tile palette, one rule per tile value
overlays.css Dialogs: win, game over, confirmation, settings
controls.css Buttons, segmented control, toolbar, icon buttons
animations.css Every @keyframes
motion.css Reduced-motion overrides
public/ Files with an unhashed URL, copied as they are: link preview image, robots.txt, llms.txt
webpack/ Webpack config in parts: paths, browser targets, loaders, plugins
assets/ The gameplay GIF shown above
ai/ Agent docs: repo map, rules, decisions, skills, prompts, plans
Install dependencies, which also installs the pre-commit hook (needs Node.js 20.19+, 22.13+ or 24+, and Yarn 1):
yarn install
Run the development server at http://localhost:8080:
yarn dev
Build the production version into dist/:
yarn build
Preview the production build locally (run yarn build first):
yarn preview
Lint the code (yarn lint:fix also fixes what it can):
yarn lint
Format the code with Prettier (yarn format:check only checks):
yarn format
Check the bundle sizes against their budgets (run yarn build first):
yarn size
Every push runs lint, the format check, the build and the size budgets from .size-limit.json on GitHub Actions.
The pre-commit hook runs ESLint and Prettier on the staged files through Husky and lint-staged.
main is deployed to Vercel, and other branches get preview deployments.
main.js (rules)<dialog> elements, with one shared confirmation that answers a Promise (decision)data-theme, set by a head script before the first paint (decision)The game is built and maintained by AI agents (Claude Code) under the author's review. Everything they need lives in the repo, written for any agent rather than one tool:
| Part | What it gives an agent |
|---|---|
AGENTS.md | The entry point: project defaults and the rules that never bend |
ai/map.md | Where every file, class and storage key lives |
ai/rules/ | How to write the code and the docs, and the Definition of Done |
ai/decisions/ | Why things are the way they are, so nothing settled gets "fixed" back |
ai/skills/ | Playbooks: adding a feature, self-review, remaking the link preview |
ai/prompts/ | Session prompts: one task, or an orchestrator running several in parallel |
ai/superpowers/ | The plan (and spec) of every past task |
Every change follows one workflow: a Linear issue → a plan → the code on its own branch → checks and a run in the browser → self-review → the author's approval → a local merge into main.