Initial commit
This commit is contained in:
81
README.md
Normal file
81
README.md
Normal file
@@ -0,0 +1,81 @@
|
||||
# 本草牌局
|
||||
|
||||
三人实时浏览器牌局。服务端负责发牌、回合、规则验证和信息隔离,客户端通过
|
||||
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分。出现正确猜测后本局结束并公开隐藏牌。
|
||||
|
||||
## 数据说明
|
||||
|
||||
房间和牌局保存在服务内存中。容器重启会清空所有房间,适合当前的简单部署版本。
|
||||
Reference in New Issue
Block a user