|
|
本帖最后由 linzihai 于 2026-7-10 11:45 编辑
基于 Cloudflare Workers + D1 的 H5 文字挂机游戏全栈开发实战
一、项目概述
ZYG-h5game 是一款基于 Cloudflare 全栈生态的 H5 文字挂机游戏。玩家可以通过浏览器体验打怪、刷装备、强化、转生、副本挑战、摸金校尉(古墓探险)等经典传奇玩法。项目完全运行在 Cloudflare 全球边缘网络上,无需自建服务器,零运维成本、全球低延迟。
核心特性
- 战斗系统:手动战斗 + 自定义/无限自动战斗,逐回合日志实时展示
- 背包系统:14 类物品、4 种品质(普通/极品/神品/超神品)、随机词缀
- 装备系统:9 个装备槽位、一键装备最佳、强化系统(逐级递减成功率)
- 技能系统:7 种技能、3 个快捷栏位、MP 消耗 + 冷却机制
- 副本系统:4 个常规副本 + 4 个摸金古墓,逐渐解锁(Lv5 ~ Lv85)
- 摸金校尉:风水升级、洛阳铲耐久、6 种陷阱、古董/符咒掉落
- 任务成就:每日任务 + 成就系统,自动重置/累计
- 怪物/装备图鉴:击杀/拾取自动解锁图鉴条目
- 转生系统:60 级后消耗金币永久提升属性,可无限转生
- 消耗品商店:药水、经验符等消耗品购买
- 管理后台:完整的 CRUD 管理面板,支持地图/怪物/物品/副本/玩家管理
二、技术架构
2.1 技术选型
| 层级 | 技术 | 说明 | | 运行时 | Cloudflare Workers | 边缘 Serverless,全球 300+ 节点 | | Web 框架 | Hono | 轻量级、高性能,内置 CORS/Logger | | 数据库 | Cloudflare D1 | 边缘 SQLite,绑定到 Worker | | 前端构建 | Vite | 输出静态资源到 dist/ | | 前端语言 | 原生 HTML/JS | 零依赖,加载极快 | | 类型系统 | TypeScript 5.8 | 全栈类型安全 | | 部署工具 | Wrangler CLI | 一键部署到 Cloudflare | | 认证 | JWT (HS256) | 管理后台 Token 认证 |
2.2 架构总览
- ┌─────────────────────────────────────────────────────┐
- │ 用户浏览器 │
- │ (index.html + game.js) │
- └──────────────────────┬──────────────────────────────┘
- │ HTTP Request
- ▼
- ┌─────────────────────────────────────────────────────┐
- │ Cloudflare Workers (边缘节点) │
- │ ┌─────────────────────────────────────────────┐ │
- │ │ Hono App (index.ts) │ │
- │ │ ┌─────────────┬─────────────┬────────────┐ │ │
- │ │ │ /api/* │/api/admin-* │/health │ │ │
- │ │ │ 游戏 API │ 管理 API │ 健康检查 │ │ │
- │ │ └──────┬──────┴──────┬──────┴────────────┘ │ │
- │ │ │ │ │ │
- │ │ ┌──────▼─────────────▼──────────────────┐ │ │
- │ │ │ Service 层 │ │ │
- │ │ │ PlayerService / CombatService │ │ │
- │ │ │ ItemService / SkillService / ... │ │ │
- │ │ └──────────────────┬───────────────────┘ │ │
- │ │ │ │ │
- │ │ ┌──────────────────▼───────────────────┐ │ │
- │ │ │ D1 Database (SQLite) │ │ │
- │ │ │ 23 张表:users, players, items, │ │ │
- │ │ │ monsters, dungeons, skills, ... │ │ │
- │ │ └──────────────────────────────────────┘ │ │
- │ └─────────────────────────────────────────────┘ │
- └─────────────────────────────────────────────────────┘
复制代码 三、数据库设计
3.1 核心表结构(23 张表)
- -- 用户与角色
- users -- 用户账号
- players -- 角色数据(等级/HP/MP/攻击/防御/金币/转生/地图)
- -- 游戏基础数据
- maps -- 地图(10 张,Lv1~Lv140)
- monsters -- 怪物模板(13 种,含 Boss/世界 Boss)
- items -- 物品模板(41 种:装备/药水/材料/古董/符咒)
- skills -- 技能模板(7 种:攻击/治疗/增益)
- -- 玩家数据关联表
- player_inventory -- 背包(已排除已装备物品)
- player_equipment -- 装备槽位(9 个槽,唯一约束 player_id+slot)
- player_skills -- 技能学习/装备
- player_buffs -- 临时 buff
- combat_logs -- 战斗日志(保留最近 500 条)
- -- 经济系统
- game_config -- 游戏配置(经验公式/掉落倍率/强化参数/转生加成)
- -- 任务成就
- daily_tasks -- 每日任务定义
- player_daily_tasks -- 玩家每日任务进度(按日期重置)
- achievements -- 成就定义
- player_achievements -- 玩家成就进度
- -- 副本与摸金
- dungeons -- 副本/古墓定义(8 个,id≥5 为摸金古墓)
- player_dungeons -- 玩家副本进度
- player_mojin -- 摸金状态(洛阳铲耐久/风水等级/陷阱抗性)
- -- 图鉴
- player_codex -- 怪物/装备发现记录
- -- 管理后台
- admin_users -- 管理员账户
- admin_logs -- 操作审计日志
复制代码 3.2 关键设计亮点
① 装备品质倍率系统
- // ItemService.ts 中的品质倍率计算
- const qualityMultiplier = {
- '普通': 1.0,
- '极品': 1.3, // 30% 额外属性
- '神品': 1.8, // 80% 额外属性
- '超神品': 2.5, // 150% 额外属性
- };
复制代码 ② 随机词缀系统(传奇装备专属)
- // 10 种随机词缀,根据品质决定词缀数量
- // 普通:0-1 条 | 极品:2 条 | 神品:3 条 | 超神品:4 条
- const affixTypes = [
- '力量(+ATK)', '敏捷(+DEF)', '体质(+HP)', '智慧(+MP)',
- '暴击率', '吸血', '穿透', '经验倍率', '金币倍率', '生命回复'
- ];
复制代码 ③ 摸金系统的风水等级
- // 5 级风水,提升金币/经验加成
- const fengShuiLevels = [
- { name: '窥门', bonus: 0.05 },
- { name: '知穴', bonus: 0.10 },
- { name: '寻龙', bonus: 0.15 },
- { name: '点穴', bonus: 0.20 },
- { name: '风水大师', bonus: 0.30 },
- ];
复制代码 ④ 强化系统(逐级递减成功率)
- // 基础成功率 80%,每级衰减 5%
- const baseRate = 0.80;
- const decay = 0.05;
- const successRate = Math.max(0.10, baseRate - enhanceLevel * decay);
- // 强化属性加成:每级 +2 攻击、+1 防御、+5 HP、+3 MP
复制代码 四、核心功能详解
4.1 战斗系统
4.1.1 手动战斗流程
玩家点击怪物卡片 → 调用 combat.start API → 服务端执行回合制战斗 → 返回战斗结果(含每回合日志)→ 前端逐条展示战斗日志。
- // CombatService.ts - killOne() 核心逻辑
- export async function killOne(playerId: number, monsterId: number): Promise<CombatResult> {
- // 1. 获取玩家最终属性(装备+强化+buff+转生加成)
- const player = await PlayerService.calcFinalStats(playerId);
- const monster = await queryOne<Monster>('SELECT * FROM monsters WHERE id = ?', [monsterId]);
- // 2. 装备技能自动释放(攻击技能优先 → HP<50% 治疗 → 开场 buff)
- const equippedSkills = await SkillService.getEquippedSkills(playerId);
- // 3. 回合制战斗(最多 20 回合)
- for (let round = 1; round <= 20; round++) {
- // 玩家普攻/技能攻击
- // 怪物反击
- // 检查胜负条件
- }
- // 4. 结算:金币、经验、掉落、成就进度
- // 5. 记录战斗日志,清理旧日志(保留 500 条)
- }
复制代码 4.1.2 自动战斗(自定义次数 + 无限模式)
前端提供输入框,玩家可输入任意次数(0 表示无限),服务端循环调用 combat.start:
- // 前端 game.js
- document.getElementById('btn-auto-start').addEventListener('click', function () {
- var v = parseInt(document.getElementById('auto-count').value, 10) || 0;
- startAuto(v); // v=0 表示无限
- });
- function startAuto(count) {
- stopAuto();
- var unlimited = count <= 0;
- var remaining = count;
- var killed = 0;
- autoCombatTimer = setInterval(function () {
- if (!unlimited && remaining <= 0) { stopAuto(); return; }
- api('combat.auto', { max_monsters: 1 }).then(function (r) {
- // 显示击杀日志
- killed += r.data.killed;
- document.getElementById('auto-progress').textContent =
- `已击杀 ${killed} 只 | 经验 +${totalExp} | 金币 +${totalGold}`;
- // HP=0 自动停止
- });
- }, 1100); // 1.1 秒间隔
- }
复制代码 4.1.3 技能 AI 释放逻辑
- ┌─────────────────────────────────────────┐
- │ 回合开始 │
- │ ↓ │
- │ ┌─ 有增益技能且冷却完成? ──→ 释放增益 │
- │ │ (狂暴+30%ATK / 铁壁+30%DEF) │
- │ ↓ 否 │
- │ ┌─ HP<50% 且治疗技能冷却完成? → 治疗 │
- │ │ │
- │ ↓ 否 │
- │ ┌─ 有攻击技能且 MP/冷却满足? → 技能 │
- │ │ │
- │ ↓ 否 │
- │ 普通攻击 │
- │ ↓ │
- │ 怪物反击 │
- │ ↓ │
- │ 检查胜负 → 更新 HP/MP → 下一回合 │
- └─────────────────────────────────────────┘
复制代码 4.2 背包与装备系统
4.2.1 背包筛选与批量操作
- // 类型筛选(14 类物品,下拉选择)
- const itemTypes = ['weapon','armor','helmet','necklace','ring','bracelet',
- 'medal','belt','shoes','potion','material','tool','charm','antique'];
- // 按品质批量出售(确认弹窗显示物品清单)
- function showBatchSellPreview(quality) {
- var items = currentItems.filter(i => i.quality === quality);
- // 计算总价:普通×0.5, 极品×0.65, 神品×0.5, 超神品×0.4
- openModal('批量出售预览', html, footer);
- }
复制代码 4.2.2 一键装备最佳
- // ItemService.autoEquipBest() - 自动为所有空槽装备最优物品
- export async function autoEquipBest(playerId: number) {
- // 评分公式:品质×1000 + 强化等级×100 + (攻击max + 防御max + HP×0.5 + MP×0.3)
- const bestBySlot: Record<string, any> = {};
- for (const item of unequippedItems) {
- const slot = typeToSlot(item.type);
- if (!bestBySlot[slot] || itemScore(item) > itemScore(bestBySlot[slot])) {
- bestBySlot[slot] = item;
- }
- }
- // 批量装备(事务处理)
- }
复制代码 4.2.3 已装备物品筛选
背包查询自动排除已装备物品,避免重复显示:
- -- inventory() 和 getInventorySorted() 均包含
- WHERE pi.player_id = ?
- AND pi.id NOT IN (
- SELECT inventory_id FROM player_equipment WHERE player_id = ?
- )
复制代码 4.3 摸金校尉系统(特色玩法)
摸金系统是一个独立于副本的玩法模块,共享 dungeons 表(id ≥ 5 为古墓):
- ┌─────────────────────────────────────────────────────┐
- │ 摸金校尉流程 │
- │ │
- │ 选择古墓 → 进入探索 → 触发陷阱? │
- │ │ │ │
- │ ↓ ↓ 是 │
- │ 探索成功 陷阱类型: │
- │ │ - 毒蛇(10% HP 伤害) │
- │ ↓ - 落石(15% HP 伤害) │
- │ 获得奖励 - 毒气(12% HP 伤害) │
- │ - 金币(×风水) - 机关(20% HP 伤害) │
- │ - 经验(×风水) - 诅咒(25% HP 伤害) │
- │ - 古董掉落 - 尸变(30% HP 伤害) │
- │ - 符咒掉落 │
- │ │ │
- │ ↓ │
- │ 洛阳铲耐久 -1 │
- │ 耐久=0 → 需洛阳铲修复 │
- │ │
- │ ┌──────────────────────────────────────┐ │
- │ │ 风水升级 洛阳铲强化 │ │
- │ │ - 消耗金币提升 - 提升陷阱抗性 │ │
- │ │ - 降低陷阱触发率 - 消耗金币修复耐久 │ │
- │ │ - 提升金币/经验加成 │ │
- │ └──────────────────────────────────────┘ │
- └─────────────────────────────────────────────────────┘
复制代码- // MojinService.ts - 陷阱触发计算
- function shouldTriggerTrap(fengShuiLevel: number, trapResistance: number): boolean {
- const fengShuiBonus = [0.05, 0.10, 0.15, 0.20, 0.30][fengShuiLevel] || 0;
- const baseChance = 0.30;
- const finalChance = baseChance - fengShuiBonus * 0.5 - trapResistance * 0.01;
- return Math.random() < Math.max(0.05, finalChance);
- }
复制代码 4.4 转生系统
- // PlayerService.ts - 转生逻辑
- export async function rebirth(playerId: number) {
- const player = await get(playerId);
- if (player.level < 60) throw new Error('需要达到 60 级才能转生');
- const cost = 1000000 * (player.rebirth + 1);
- if (player.gold < cost) throw new Error(`金币不足(需要 ${cost})`);
- // 扣除金币,重置等级,提升永久属性
- await execute(`
- UPDATE players SET
- gold = gold - ?,
- level = 1,
- exp = 0,
- rebirth = rebirth + 1,
- attack_min = attack_min + 5,
- attack_max = attack_max + 5,
- defense_min = defense_min + 3,
- defense_max = defense_max + 3,
- max_hp = max_hp + 50,
- hp = max_hp + 50
- WHERE id = ?
- `, [cost, playerId]);
- }
复制代码 五、API 接口设计
5.1 接口总览
| 分类 | 接口数 | 说明 | | 认证 | 3 | 注册/登录/Ping | | 玩家 | 2 | 角色信息/属性 | | 地图 | 4 | 列表/详情/切换/怪物 | | 战斗 | 2 | 单次/自动 | | 背包 | 5 | 列表/使用/出售/按品质批量/按类型批量 | | 装备 | 3 | 穿戴/卸下/一键装备 | | 商店 | 2 | 列表/购买 | | 技能 | 4 | 列表/学习/装备/卸下 | | 任务成就 | 4 | 任务列表/领取/成就列表/领取 | | 副本 | 3 | 列表/进入/完成 | | 摸金 | 6 | 列表/进入/完成/数据/修复/风水 | | 图鉴 | 3 | 统计/怪物/装备 | | 转生 | 1 | 转生 | | 管理后台 | 20+ | 完整 CRUD |
5.2 接口响应格式
- // 统一响应结构
- interface ApiResponse<T> {
- success: boolean; // 是否成功
- message: string; // 提示信息
- data: T | null; // 业务数据
- ts: number; // 时间戳
- }
- // 成功示例
- {
- "success": true,
- "message": "ok",
- "data": {
- "win": true,
- "gold": 120,
- "exp": 80,
- "hp": 85,
- "max_hp": 100,
- "rounds": [...]
- },
- "ts": 1719000000
- }
- // 失败示例
- {
- "success": false,
- "message": "HP 为 0,请先使用药水恢复",
- "data": null,
- "ts": 1719000000
- }
复制代码 5.3 关键接口实现
背包列表接口:
- app.get('/inventory.list', async (c) => {
- const playerId = c.get('playerId');
- const sortBy = c.req.query('sort') || 'quality';
- const sortOrder = c.req.query('order') || 'desc';
- const items = await ItemService.getInventorySorted(playerId, sortBy, sortOrder);
- return c.json(ok(items));
- });
复制代码 一键装备最佳接口:
- app.post('/equipment.auto-equip', async (c) => {
- const playerId = c.get('playerId');
- const body = await c.req.json();
- const result = await ItemService.autoEquipBest(playerId);
- return c.json(ok(result, `已自动装备 ${result.equipped.length} 件`));
- });
复制代码 六、管理后台
管理后台是一个纯 SPA 应用(public/admin.html),使用原生 HTML/CSS/JS 实现:
6.1 功能模块
- ┌──────────────┬────────────────────────────────────────┐
- │ 仪表盘 │ 用户/玩家统计 + 排行榜 + 最近登录 │
- ├──────────────┼────────────────────────────────────────┤
- │ 玩家管理 │ 编辑属性/封禁/删除/赐予物品/摸金数据 │
- ├──────────────┼────────────────────────────────────────┤
- │ 副本管理 │ 对所有 8 个副本进行 CRUD │
- ├──────────────┼────────────────────────────────────────┤
- │ 古墓管理 │ 同上(共享副本表,id≥5 为古墓) │
- ├──────────────┼────────────────────────────────────────┤
- │ 游戏配置 │ 键值对编辑(经验/掉落/强化等) │
- ├──────────────┼────────────────────────────────────────┤
- │ 管理员管理 │ 增删改查管理员账户 │
- ├──────────────┼────────────────────────────────────────┤
- │ 操作日志 │ 查看所有管理员操作记录 │
- └──────────────┴────────────────────────────────────────┘
复制代码 6.2 类型中文化
管理后台将所有英文类型码转换为中文显示:
- // 物品类型
- const itemTypeMap = {
- weapon: '武器', armor: '战甲', helmet: '头盔',
- necklace: '项链', ring: '戒指', bracelet: '手镯',
- medal: '勋章', belt: '腰带', shoes: '鞋子',
- potion: '药水', material: '材料', tool: '工具',
- charm: '符咒', antique: '古董'
- };
- // 怪物类型
- const monsterTypeMap = {
- normal: '普通', boss: 'Boss', world_boss: '世界Boss'
- };
- // 品质
- const qualityMap = {
- '普通': '普通', '极品': '极品', '神品': '神品', '超神品': '超神品'
- };
复制代码 七、项目结构
- ZYG-h5game/
- ├── index.html # 游戏前端入口
- ├── package.json # 依赖与脚本
- ├── vite.config.ts # Vite 构建配置
- ├── wrangler.toml # Cloudflare Workers 配置
- ├── tsconfig.json # TypeScript 配置
- │
- ├── public/ # 静态资源
- │ ├── admin.html # 管理后台 SPA
- │ └── assets/
- │ ├── css/style.css # 游戏样式
- │ ├── js/game.js # 游戏前端逻辑
- │ ├── avatars/ # 117 个头像
- │ ├── monsters/ # 怪物图标
- │ └── mp3/ # 28 个音频文件
- │
- ├── scripts/
- │ ├── d1-schema.sql # 数据库结构(23 表)
- │ └── d1-data.sql # 初始数据(地图/怪物/物品/技能/副本)
- │
- └── src/
- ├── types/index.ts # 全栈类型定义(401 行)
- │
- └── server/
- ├── index.ts # Hono 应用主入口
- ├── index.worker.ts # Worker 入口
- │
- ├── shared/
- │ ├── db.ts # D1 数据库抽象层
- │ ├── env.ts # 环境类型定义
- │ └── utils.ts # 工具函数
- │
- ├── routes/
- │ └── game-routes.ts # 游戏 API 路由(885 行)
- │
- ├── services/ # 业务逻辑层
- │ ├── PlayerService.ts # 玩家/属性计算/转生
- │ ├── CombatService.ts # 战斗/自动战斗
- │ ├── ItemService.ts # 背包/装备/强化/商店
- │ ├── SkillService.ts # 技能学习/装备/冷却
- │ ├── TaskService.ts # 每日任务/成就
- │ ├── ConfigService.ts # 游戏配置
- │ ├── DungeonService.ts # 副本系统
- │ ├── MojinService.ts # 摸金校尉
- │ └── CodexService.ts # 图鉴系统
- │
- └── module-admin/ # 管理后台模块
- ├── routes/
- │ ├── admin-auth-routes.ts # 管理员认证
- │ └── admin-routes.ts # 管理 API
- └── services/
- ├── admin-auth-service.ts # JWT 认证
- └── admin-game-service.ts # 管理业务逻辑
复制代码 八、部署指南
8.1 前置条件
- Node.js >= 18
- Cloudflare 账号(免费即可)
- Wrangler CLI:npm install -g wrangler
8.2 部署步骤
- # 1. 克隆项目
- git clone [url]https://github.com/zunyuange/ZYG-h5game.git[/url]
- cd ZYG-h5game
- # 2. 安装依赖
- npm install
- # 3. 登录 Cloudflare
- npx wrangler login
- # 4. 创建 D1 数据库
- npx wrangler d1 create zyg-h5game-db
- # 将返回的 database_id 填入 wrangler.toml
- # 5. 初始化数据库(执行 schema + data)
- npx wrangler d1 execute zyg-h5game-db --remote --file scripts/d1-schema.sql
- npx wrangler d1 execute zyg-h5game-db --remote --file scripts/d1-data.sql
- # 6. 构建并部署
- npm run build
- npx wrangler deploy
- # 7. 访问游戏
- # 打开 https://zyg-h5game.<你的子域>.workers.dev
- # 管理后台 https://zyg-h5game.<你的子域>.workers.dev/admin
- # 默认管理员:admin / admin123
复制代码 8.3 本地开发
- # 启动开发服务器
- npm run dev
- # 本地预览(使用 wrangler)
- npx wrangler dev
复制代码 九、数据库初始化
9.1 初始数据
| 数据类型 | 数量 | 说明 | | 地图 | 10 | 新手村 → 未知暗殿(Lv1~Lv140) | | 怪物 | 13 | 普通/Boss/世界Boss | | 物品 | 41 | 武器/防具/药水/材料/古董/符咒 | | 技能 | 7 | 攻击/治疗/增益 | | 副本 | 8 | 4 常规 + 4 摸金古墓 | | 配置 | 21 | 经验/掉落/强化/转生参数 | | 每日任务 | 8 | 登录/击杀/强化/使用物品 | | 成就 | 15 | 等级/击杀/金币/装备/技能 | | 管理员 | 1 | admin / admin123 |
9.2 关键配置项
- -- 经验公式:100 × 1.25^(level-1)
- level_exp_base = 100
- level_exp_factor = 1.25
- -- 强化参数
- enhance_base_cost = 1000 -- 基础消耗
- enhance_base_rate = 0.80 -- 基础成功率
- enhance_rate_decay = 0.05 -- 每级衰减
- -- 装备掉落品质权重
- quality_weights = 普通:70,极品:25,神品:4.5,超神品:0.5
- -- 转生参数
- rebirth_cost_base = 1000000 -- 基础消耗(×转生次数)
- rebirth_bonus_atk = 5 -- 每次转生 +5 攻击
- rebirth_bonus_def = 3 -- 每次转生 +3 防御
- rebirth_bonus_hp = 50 -- 每次转生 +50 HP
复制代码 十、开发过程中的关键修复记录
10.1 背包筛选器事件丢失
问题:使用 innerHTML += 追加物品时,会销毁已有 DOM 元素的事件监听器,导致筛选/排序按钮失效。
修复:改用 createElement + appendChild 的 DOM API 方式渲染。
- // 错误方式(会销毁事件监听)
- el.innerHTML += itemHtml;
- // 正确方式
- var div = document.createElement('div');
- div.className = 'item-card';
- // ... 设置内容
- el.appendChild(div);
复制代码 10.2 批量出售弹窗无法打开
问题:openModal() / closeModal() 函数在 game.js 中不存在(仅在 admin.html 的 IIFE 中定义)。
修复:新增通用弹窗 #modal2 + openModal() / closeModal() / showConfirm() 函数。
10.3 全站 confirm/prompt 替换
问题:浏览器原生 confirm()/prompt() 会显示 URL 地址栏,体验差。
修复:全站替换为自定义模态弹窗,使用 showConfirm() 统一处理确认操作。
10.4 数据库 DROP TABLE 顺序
问题:D1 执行 DROP TABLE 时因外键约束失败(admin_logs 引用 admin_users,但 admin_users 先被删除)。
修复:调整 DROP 顺序,子表先删、父表后删。
10.5 背包显示已装备物品
问题:背包中同时显示已装备物品,造成混淆。
修复:在 inventory() 和 getInventorySorted() 的 SQL 中添加子查询排除已装备物品。
十一、总结
本项目是一个完整的 Cloudflare 全栈 H5 文字挂机游戏,涵盖了:
- 完整的 RPG 玩法:战斗、装备、技能、强化、转生、副本、摸金、任务、成就、图鉴
- 管理后台:完整的 CRUD 管理面板,支持所有游戏数据管理
- Serverless 架构:零服务器运维,全球边缘部署
- 全栈 TypeScript:前后端类型安全
- 响应式设计:适配手机和桌面端
- 零成本运行:Cloudflare 免费额度足够支撑数千日活
技术亮点:
- 利用 Cloudflare D1 的边缘 SQLite 实现低延迟数据访问
- Hono 框架的轻量级路由 + 中间件设计
- 纯原生 JS 前端,无框架依赖,加载速度极快
- 完整的装备品质 + 随机词缀系统
- 创新的摸金校尉玩法(风水 + 陷阱 + 古董收集)
适用场景:
- 学习 Cloudflare Workers + D1 全栈开发
- 快速搭建 H5 小游戏/挂机游戏
- 了解 Serverless 架构下的游戏后端设计
- 参考管理后台的 CRUD 实现
【助力新梦想 · 创意无限,Token免费!】活动用户,https://bbs.binmt.cc/thread-168535-1-1.html
AiLink API・康哥工作室:https://ai.kggzs.cn/sign-up?aff=rh8g |
|