桃源乡 Taoyuan
一款灵感来自《星露谷物语》的文字版田园模拟经营游戏,采用像素与中国风视觉设计,基于 Vue3 + TypeScript 构建,可在浏览器、Docker 或 Electron 桌面端游玩。
爱鲜报评分
0 人评分
577
星数
是
中文
TypeScript
主语言
是
活跃
1
贡献者
人工分析
EDITORIAL推荐理由
桃源乡把星露谷式的种田养成玩法完整搬进了浏览器,且用文字 + 像素中国风的组合做出了差异化。系统深度惊人:四季天气、38 种作物、19 种动物、120 层矿洞、400 种杂交配方、109 个成就,内容量远超一般个人项目。技术栈是当下主流前端组合(Vue3 + TS + Vite + Pinia + TailwindCSS),代码结构清晰,很适合作为大型前端游戏项目的学习范本。
适用场景
- 学习 Vue3 + TypeScript 大型项目架构
- 浏览器端休闲模拟经营游戏体验
- Docker 自建部署个人游戏服务
- Electron 桌面端离线游玩
- 前端状态管理与数据驱动设计参考
优点
- 玩法系统极其丰富,种田、畜牧、钓鱼、挖矿、社交、烹饪一应俱全
- 纯前端实现,无需后端即可运行,部署门槛低
- Vue3 + TypeScript + Pinia 技术栈现代,26 个 store 与 40 个数据模块结构清晰
- 中国风像素美术与五声音阶程序化音乐,文化辨识度高
- 支持存档加密、WebDAV 云同步与导入导出,体验完整
缺点
- 采用 CC BY-NC 4.0 协议,禁止商业使用,二次开发需注意授权
- 文字 + 像素风格偏小众,习惯图形化游戏的玩家可能不适应
- 系统繁多,新手引导与上手成本相对较高
- 仓库未标注常规开源代码许可证,代码复用存在不确定性
桃源乡:浏览器里的中国风种田人生
传说在群山深处,有一处与世隔绝的村落——桃源乡。你收到一封来自已故祖父的信,信中附有一把铜钥匙和一张泛黄的地契……
桃源乡是一款文字版田园模拟经营游戏,灵感来自《星露谷物语》,采用像素 + 中国风的视觉设计。整个游戏运行在浏览器中,也可以打包成 Electron 桌面客户端或通过 Docker 自建部署。
核心玩法
游戏围绕「四季轮回」展开:28 天为一季,昼夜时段从 6:00 持续到次日 2:00,包含晴、雨、雷雨、雪、大风、绿雨六种天气。玩家需要在有限的体力下安排耕作、采集、钓鱼与挖矿。
- 田庄经营:38 种作物四季轮作,地块从 4×4 扩建到 8×8,配合洒水器、肥料与温室
- 畜牧养殖:鸡舍与牧场共 19 种动物,畜舍可三级升级
- 钓鱼系统:6 大钓点、60 种鱼类,实时长按拉线的小游戏
- 矿洞探险:云隐矿洞 120 层,每 20 层一场回合制 BOSS 战
- 乡里社交:34 位村民(12 位可婚)+ 6 位隐藏仙灵 NPC,送礼、心事件、结缘助农
- 育种与加工:400 种杂交配方横跨 10 代谱系,21 种加工机器与 150+ 配方
此外还有烹饪(113 种食谱)、博物馆收集、冒险公会、装备套装、5 章 50 个主线任务与 109 个成就。
技术栈
| 技术 | 用途 |
|---|---|
| Vue 3 + TypeScript | 组合式 API 与严格类型检查 |
| Vite 7 | 构建与开发服务器 |
| Pinia 3 | 状态管理(26 个 store) |
| TailwindCSS 3 | 原子化样式与主题变量 |
| Tone.js 15 | 程序化音频合成(19 首 BGM + 80+ 音效) |
| Electron 39 | 桌面客户端打包 |
音乐部分使用 Tone.js 实时合成,采用中国风五声音阶(宫商角徵羽),并会随天气与时段动态修饰音色和节奏。
快速开始
项目使用 bun 作为包管理器:
bun install
bun dev
也可以直接用 Docker 运行预构建镜像:
docker run -d -p 8080:80 ghcr.io/setube/taoyuan:latest
访问 http://localhost:8080 即可开始游戏。
项目结构
src/
├── views/game/ # 23 个游戏面板
├── components/game/# 小游戏、对话框、状态栏等子组件
├── stores/ # 26 个 Pinia 状态仓库
├── composables/ # 导航、日结算、日志、音频等复用逻辑
├── data/ # 40 个游戏数据模块
└── types/ # TypeScript 类型定义
授权与交流
项目采用 CC BY-NC 4.0 协议,允许自由共享和演绎,但未经作者书面授权禁止用于任何商业目的。作者提供了 QQ 群(920930589)作为中文交流渠道。
评论
- 暂无评论,来写第一条吧。