# esmok **Repository Path**: ns2250225/esmok ## Basic Information - **Project Name**: esmok - **Description**: 赛博抽烟,心情不好?来一根华子和高希霸 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-08-27 - **Last Updated**: 2026-08-27 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 烧掉它 / Burn It 一款以“情绪释放仪式”为核心体验的轻量网页互动小游戏。 用户可以把当天想放下的烦恼写在虚拟纸张上,亲手将纸张卷起、点燃,通过长按吸入、松开呼出和弹落烟灰,让文字随着燃烧逐渐消失,最终化为灰烬。 > 这不是吸烟模拟器,而是一场把烦恼写下来并亲手烧掉的纸上告别。 ## 功能特性 - 支持中文、英文和 Emoji 输入,最多 150 个字符 - 纸张展示与向上滑动卷纸动画 - 竖直纸卷造型及拖动打火机点火 - 纸卷与高希霸风格雪茄两种外观 - 长按吸入、松开呼出的核心交互 - 根据按住时长生成不同强度的烟雾 - 最佳呼吸节奏与过热反馈 - 纸卷长度、烟头亮度和烟灰随燃烧进度变化 - 用户文字逐字发黄、焦化并消失 - 双击或向下滑动弹落烟灰 - 关键词随灰烬碎裂、烟雾文字彩蛋 - “最后一口”与完整的结束仪式 - 雨夜窗边、深夜阳台、台灯桌面、夏夜微风四种随机场景 - Web Audio API 程序化环境音与互动音效 - 环境音、音效、震动和减少动画设置 - 桌面端与移动端响应式布局,短屏支持纵向滚动 - 今日完成次数、累计次数和总体验时间统计 ## 隐私说明 - 烦恼文字只存在于当前页面内存中 - 文字不会上传服务器,也不会写入本地存储 - 刷新页面后文字立即消失 - `localStorage` 只保存设置项、日期、完成次数和体验时长 ## 技术栈 - Vue 3 - TypeScript - Vite - GSAP - Canvas 2D 粒子系统 - Web Audio API - CSS 2.5D 场景与动画 ## 本地运行 环境要求:Node.js 20 或更高版本。 项目已通过 `.npmrc` 配置 npmmirror 国内镜像,可以直接安装依赖: ```bash npm install npm run dev ``` 打开浏览器访问: ```text http://localhost:5173/ ``` ## 生产构建 ```bash npm run build ``` 构建产物会生成在 `dist/` 目录。 本地预览生产构建: ```bash npm run preview ``` ## 操作说明 | 阶段 | 桌面端 | 移动端 | | --- | --- | --- | | 输入烦恼 | 键盘输入 | 手机键盘输入 | | 卷纸 | 按住纸张向上拖动 | 按住纸张向上滑动 | | 点火 | 拖动打火机至纸卷顶端 | 拖动打火机至纸卷顶端 | | 吸入 | 长按呼吸按钮或空格键 | 长按呼吸按钮 | | 呼出 | 松开鼠标或空格键 | 松开手指 | | 弹灰 | 双击、向下拖动或按 F 键 | 双击或向下滑动 | 推荐单次按住约 1.2~2 秒。按住超过 3 秒会进入过热状态。 ## 项目结构 ```text src/ ├─ audio/ # Web Audio 音频管理 ├─ components/ # 纸张、纸卷、打火机、场景、烟雾等组件 ├─ game/ # 类型、状态数据与工具函数 ├─ App.vue # 游戏状态机与核心交互 ├─ main.ts # 应用入口 └─ styles.css # 全局样式 ``` ## 产品原则 - 所有表达围绕“烧掉烦恼”,不鼓励现实吸烟 - 不包含烟草购买、促销或奖励机制 - 不进行情绪诊断,不替代专业心理支持 - 默认纯前端运行,保护用户输入隐私 ## License 本项目暂未指定开源许可证。