无名杀完全上手指南:在浏览器里跑一套可自由改造的三国杀引擎

发布时间:2026/10/22 1:51:44
无名杀完全上手指南:在浏览器里跑一套可自由改造的三国杀引擎
无名杀完全上手指南在浏览器里跑一套可自由改造的三国杀引擎【免费下载链接】noname项目地址: https://gitcode.com/GitHub_Trending/no/noname我把仓库克隆下来挂到本地服务器上用 Chrome 内核浏览器打开页面就能选武将、发牌、开局一局三国杀更吸引我的是这里每一个武将、每张卡牌、每种模式背后都是一个能直接阅读的 JS 文件。这就是 noname无名杀——一个以纯前端为主的开源三国杀引擎支持浏览器单机、局域网联机以及从零 DIY 新武将与玩法。三条部署路径任选先让游戏跑起来官方在 README 里建议网页端使用 Chrome 系内核浏览器且内核版本不低于 85。启动方式按需求从轻到重分三档纯静态托管。整个游戏本体是静态文件index.html 负责加载 game/ 下的核心脚本最省事的做法# 在项目根目录启动临时静态服务器 python -m http.server 8000 # 8000: 可改为任意空闲端口浏览器访问http://localhost:8000即可单机游玩。Node 服务端。联机大厅依赖一个 WebSocket 服务game/server.js 中监听 8080 端口而 noname-server.js 提供游戏网页与文件读写接口默认 8089 端口。项目用 deno.json 封装了启动任务两条命令都要跑# 启动网页服务--server 表示开启服务端模式 node --experimental-default-typemodule noname-server.js --server # 启动联机大厅 cd game node --experimental-default-typecommonjs server.jsDocker 容器化。docker/docker.md 给出了完整流程Dockerfile 基于node:20安装好ws、express等依赖后由 docker/start.sh 拉起上面两个进程git clone -b master --depth1 https://gitcode.com/GitHub_Trending/no/noname cd noname docker build -t noname . # 构建镜像 docker run -dit --name noname -p 8734:8089 -p 8324:8080 noname # -p 8734:8089 游戏网页 -p 8324:8080 联机大厅容器方案下访问8734是游戏界面8324是联机大厅端口都可以自行调整。部署跑通之后我顺手翻了翻目录想搞清楚改一个武将到底要动几个文件。目录地图武将、卡牌与模式各归其位仓库的结构和内容量本身就说明了很多问题character/ 武将定义按扩展包分目录standard标准包、shenhua神武将、sp、yingbian影之边缘、jsrg等二十余个包每个包下有character.js、skill.js、translate.js、voices.js等分工明确的小文件card/ 卡牌定义除standard.js、extra.js外还有guozhan.js国战等变体mode/ 游戏模式identity.js身份局、guozhan.js国战、versus.js1v1、doudizhu.js斗地主等 12 种image/ 图像资源character/下 2300 多张武将立绘card/下近 500 张卡面audio/ 音频skill/下 5600 余个技能音效die/下近 1300 条阵亡语音background/是背景音乐noname/ 框架内核game/主循环、library/工具库、ui/渲染层docs/ 开发文档目前有 async-guide.md异步技能写法与 audio-guide.md音频配置这种一个扩展包一个目录的组织方式意味着加武将不会碰到别的包下面用标准包当样本拆一遍。最小示例一个新武将由哪几行代码构成翻开 character/standard/character.js武将定义比我预想的更紧凑——每个武将就是一个五元组数组// character/standard/character.js节选 caocao: [male, wei, 4, [jianxiong, hujia], [zhu]], zhangfei: [male, shu, 4, [paoxiao]],五个位置依次是性别、势力wei/shu/wu/qun对应魏蜀吴群、体力上限、技能列表、附加标记zhu表示主公位可选name:诸葛|亮这类条目则用于控制姓名切分显示。技能本体在 character/standard/skill.js 里以标准包潘凤的stdkuangfu为例// character/standard/skill.js节选 stdkuangfu: { trigger: { source: damageSource }, // 作为伤害来源时触发 forced: true, // 强制触发 filter(event, player) { return player.isPhaseUsing() event.card event.card.name sha; }, async content(event, trigger, player) { if (trigger.player.hp player.hp) player.draw(2); else player.loseHp(); }, ai: { halfneg: true }, // 供 AI 评估的权重提示 },技能采用trigger何时触发→filter条件过滤→content执行逻辑的三段式结构事件名如damageSource、recoverEnd由引擎统一派发。这套写法有个实际好处AI 读的是ai字段和牌值评分而不是单独维护一套机器人逻辑docs/async-guide.md 对异步content的等待/回调用法有专门说明。语音则几乎零配置按 docs/audio-guide.md 的约定技能wusheng默认就去audio/skill/wusheng.mp3找文件找不到才需要写audio字段指路audioname还能给不同武将指定专属发音版本。卡牌不只是牌面AI 评分驱动出牌武将会玩牌也要会选。card/standard.js 有 4200 多行但卡牌定义本身很薄大部分篇幅是ai评分// card/standard.js节选 damage: { ai: { result: { target: -1.5 }, // 对目标打出此牌的收益分 tag: { damage: 1 }, }, },引擎把该不该对这个人出这张牌量化成分数选牌阶段按分排序即可所以新卡牌只要给出合理的result值单机 AI 就能直接用。卡牌美术同样走目录约定扩展包卡面放在 image/card/ 下按包名区分。不改一行代码换玩法开关式扩展包与模式文件想换一套武将池我不必写任何代码。game/config.js 里有两张清单sgscharacters: [standard, shenhua, refresh, yijiang, ...], // 武将包 sgscards: [standard, extra, sp, guozhan, zhulu, ...], // 卡牌包删掉数组里的名字对应扩展包就不会加载游戏内选将界面也有勾选入口勾选结果写回配置。模式侧更直接mode/ 下 12 个文件各代表一种玩法身份局、国战、1v1、斗地主甚至五子棋connect.js都是同一个start()步进式流程——用step 0、step 1字符串把流程切成可挂起的步骤这正是引擎能同时支撑单机与联机回放的关键机制。局域网联机一个 WebSocket 大厅撑起多人局单机靠本地状态联机则依赖前面提到的 8080 端口。game/server.js 用ws库起了一个极简房间服务客户端发送create建房、enter按房号加入服务端维护rooms房间表并把消息在房间内转发。没有账号体系也没有持久化数据库——房间随服务存活关闭即散对朋友聚会场景足够。与此同时noname-server.js 暴露了/readFile、/writeFile、/getFileList等文件接口index.html 里能看到前端对应的fetch封装。这让扩展在联网环境下也能落地扩展包本质就是磁盘上的目录服务端能读到浏览器才能加载。想提交代码PR 分支约定与文档索引README 里写得很明确提交 Pull Request 时要推送到PR-Branch分支而不是主开发分支。项目采用 GPL-3.0 协议README 同时用专门章节说明了社区对 Fork 与开源规范的立场。作为新人我建议的切入顺序是先通读 docs/async-guide.md 理解异步技能写法再照着 character/standard/ 复制一个最简武将跑起来最后按 docs/audio-guide.md 补上语音台词。所有资源命名约定技能音效、阵亡语音、立绘路径都是目录加拼音/英文 ID照葫芦画瓢即可出错时控制台也会把文件名与行号直接弹出来index.html 里内置了window.onerror提示。从克隆仓库到开一局身份局不超过五分钟而把一个新武将推进正式包需要的也只是几个遵循约定的 JS 文件。对想深度玩三国杀规则、又不想碰服务端复杂环境的人来说这套静态优先、按需加服务的架构把改造门槛压得很低。【免费下载链接】noname项目地址: https://gitcode.com/GitHub_Trending/no/noname创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考