Files
MateriaMedica/README.md
2026-06-11 22:13:55 +08:00

82 lines
2.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 本草牌局
三人实时浏览器牌局。服务端负责发牌、回合、规则验证和信息隔离,客户端通过
Socket.IO 使用同源连接。
## 本地部署测试
本地版本绑定 `127.0.0.1:17979`,不会暴露到外部网卡:
```bash
docker compose -f compose.local.yml up --build
```
浏览器打开 <http://127.0.0.1:17979>。使用三个浏览器配置文件或三个无痕窗口加入同一
房间,即可测试完整流程。
运行自动测试:
```bash
docker compose -f compose.local.yml run --rm game npm test
```
停止本地版本:
```bash
docker compose -f compose.local.yml down
```
## 实际部署
生产版本同样只绑定宿主机回环地址,由反向代理提供公网访问:
```bash
docker compose -f compose.prod.yml up -d --build
```
反向代理目标为:
```text
http://127.0.0.1:17979
```
以 Nginx 为例WebSocket 所需配置如下:
```nginx
server {
server_name materiamedica.maths79.site;
location / {
proxy_pass http://127.0.0.1:17979;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
```
浏览器使用 `https://materiamedica.maths79.site`,不需要填写端口。
## 当前规则约定
- 牌组包含2张数字2、3张数字3、4张数字4和5张数字5。
- 随机隐藏2张其余12张平均发给3名玩家。
- 公开记录会显示“取一张”或“取同号全部”请求及被询问的两个数字,并显示实际转移数量;
最终交出的是哪个数字只向转移双方私下显示。
- 同一玩家不能在连续两个自己的回合请求相同的两种牌;数字顺序、目标玩家和请求类型不同
也视为同一组。中间选择猜隐藏牌后不受上一组请求限制。
- 首位玩家提出猜测后,其余玩家按座位顺序选择认同某一份公开猜测、另猜或放弃。
- 另猜不会覆盖已有猜测;后续玩家可以选择认同任意一位猜牌者。
- 两位后续玩家完成操作后,如果恰好一人放弃,该玩家必须再次选择认同或另猜,不能继续
放弃。
- 如果两位后续玩家都放弃且首位玩家猜错,只淘汰首位猜牌者,其余玩家继续游戏。
- 猜对者加3分认同正确猜测者加1分猜错者减1分。出现正确猜测后本局结束并公开隐藏牌。
## 数据说明
房间和牌局保存在服务内存中。容器重启会清空所有房间,适合当前的简单部署版本。