5分钟在浏览器跑起三国杀:开源桌游引擎从入门到DIY指南
5分钟在浏览器跑起三国杀开源桌游引擎从入门到DIY指南【免费下载链接】noname项目地址: https://gitcode.com/GitHub_Trending/no/noname周末约朋友来家里想搓一局三国杀却懒得装客户端、注册账号、更新补丁——其实打开浏览器就行。无名杀noname是一个纯浏览器运行的三国杀实现兼开源桌游引擎一个 Git 仓库就是全部服务端无需数据库克隆下来启动本地服务器摸牌、出牌、喊台词的完整游戏体验开箱即用。零门槛本地启动一条命令跑起完整服务器启动它不需要任何构建步骤整个过程就三件事# 克隆项目仓库约含数千个武将、卡牌、音频资源文件 git clone https://gitcode.com/GitHub_Trending/no/noname cd noname # 启动内置服务器默认端口 8089 deno task startdeno task start等价于deno run --allow-read --allow-net --allow-env noname-server.js本质上是一个 Express 静态服务器把整个仓库目录作为网站根目录发布。启动后访问http://localhost:8089即可开玩。如果手头没有 Deno也可以用 Node 直接运行node noname-server.js支持--port、--maxAge等参数。几个实用参数值得记一下浏览器要求推荐 Chrome 系内核浏览器且内核版本 ≥ 85低版本 Firefox 可能表现不佳见 README.md联机大厅[game/server.js](https://link.gitcode.com/i/212a056570765dab840bf149e4b961f1)提供 WebSocket 联机能力docker/start.sh里两条命令正好对应静态游戏服务器 联机服务器的完整组合Docker 部署[Dockerfile](https://link.gitcode.com/i/a0c29c38f7ee2aaa7bdff91686fd0747)基于node:20在仓库根目录执行docker build -t noname .再docker run -p 8734:8089 -p 8324:8080 noname游戏界面走 8734联机大厅走 8324详见 docker/docker.md对只想玩游戏的人来说到这里已经结束了。下面看看这个项目到底内置了多少能玩的内容。功能全景拆解12种模式、完整AI与语音系统先回答一个问题它能玩什么mode/ 目录下每个 JS 文件对应一种游戏模式一共 12 种模式文件玩法mode/identity.js经典身份场主公/忠臣/反贼/内奸mode/guozhan.js国战双将、阴阳鱼mode/doudizhu.js斗地主mode/chess.js棋类对战mode/single.js单机闯关mode/versus.js1v1 决斗mode/boss.js、mode/brawl.js 等Boss 战、混战等其余模式身份场之外能玩斗地主、下棋这正是桌游引擎而不是三国杀皮肤的含义——模式是数据不是写死在界面里的。再说说让对局像样的两个系统内置 AI 决策。翻牌时你可能注意到每张牌的定义里都带着一段ai配置damage: { ai: { result: { target: -1.5 }, tag: { damage: 1 } } }——意思是杀对目标的权重是 -1.5攻击性而桃是 1。电脑玩家就是靠这套权重表决定出牌、出杀还是留桃的所以单机模式随时可开。完整语音体系。audio/skill/ 里有 5600 多个技能语音文件audio/die/ 是阵亡台词audio/card/female/ 和 audio/card/male/ 按性别存放摸牌、出牌语音。配置一个技能时写audio: 2就表示自动播放skill/技能名1.mp3和skill/技能名2.mp3规则在 docs/audio-guide.md 里写得很细。另外两件事一局结束后的对局回放、个人配置偏好都存在浏览器 localStorage / IndexedDB 里不注册账号也有存档而 game/config.js 的extension配置则定义了扩展包加载机制——社区扩展会以extension/扩展名/extension.js的形式被自动发现资源引用时带ext:扩展名前缀。这为下一节的 DIY 打下了地基。进阶定制实战改一个文件刷新即见新武将加一个武将要动几个文件答案是两个character/下的配置和skill.js里的技能逻辑。看 character/standard/character.js每个武将就一行数组五个位置依次是性别、势力、体力值、技能名列表、立绘/语音来源const characters { caocao: [male, wei, 4, [jianxiong, hujia], [zhu]], guanyu: [male, shu, 4, [wusheng]], // 你新增的武将按同样格式追加到这里即可 };技能定义在 character/standard/skill.js每个技能是一个对象核心是三个部分trigger什么事件触发、cost发动代价、content结算流程。比如小果技能挂在phaseJueshuBegin全局事件上cost里让你弃一张基本牌content里让目标在弃装备和受伤害之间二选一。把这条链路串起来就是完整的定制流程加武将在character/xxx/character.js追加一行格式如上写技能在同目录的skill.js里加技能对象audio字段配好语音名放资源立绘放进image/character/技能语音放进audio/skill/看效果刷新浏览器即可如果你不想动核心文件更推荐扩展包方式新建extension/你的扩展名/extension.js游戏会自动加载它资源路径统一用ext:你的扩展名/...前缀引用机制见 noname/init/import.js。核心仓库保持干净你的创作独立存在这是社区协作时最常用的姿势。技术设计速览事件驱动与双写法技能理解了改哪里再用几句话理解为什么能这么改模块化注册。卡牌、武将、技能、模式各自成文件启动时通过game.import(character, ...)之类的入口统一注册进全局。文件之间互不依赖加内容就是加文件事件驱动技能。武将技能不是写流程而是挂监听trigger: { global: phaseJueshuBegin }相当于订阅游戏循环广播的事件引擎播到哪个阶段、谁受到伤害相关技能自动被唤起。技能之间因此可以任意组合新技能不会破坏旧逻辑Step 与 Async 双写法。旧技能用step 0 / step 1的字符串分步推进新技能直接写async contentawait读起来和普通 JS 一样。v1.10.6 引入的这套 Async Content 已成为新武将的官方写法AI 权重表。前面提到的ai: { result, tag }是给每个卡牌效果标态度分电脑玩家据此做全局决策——AI 不需要单独写逻辑它复用的就是卡牌和技能的元数据参与贡献指南四种参与渠道无名杀是 GPL-3.0 协议的开源项目贡献渠道比想象的多你想做怎么做放到哪里提代码Fork 后建特性分支Pull Request 需推送到PR-Branch分支docs/async-guide.md 等开发文档可先读写扩展独立extension/目录不改核心社区扩展仓库分发贡献美术武将立绘、卡牌图、场景背景image/character/、image/card/、image/background/贡献音效技能语音、BGM、阵亡台词audio/skill/、audio/background/、audio/die/反馈问题Bug 报告、功能建议仓库 Issue 区不需要会写代码也能参与——配一段阵亡语音、画一张卡牌图都会进入几千玩家的游戏流程。一个仓库里装着 12 种游戏模式、数千个可编辑的武将配置和一套完整的事件驱动引擎这就是开源桌游引擎的完整含义。现在克隆下来deno task start五分钟之内你会摸到你的第一张牌。【免费下载链接】noname项目地址: https://gitcode.com/GitHub_Trending/no/noname创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考