Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

myluke/Goats

Repository files navigation

Mountain Goats 🐐🏔️

2-4 人回合制掷骰桌游网页版 - 基于经典桌游 Mountain Goats 规则实现

功能特性

  • 完整的 Mountain Goats 桌游规则实现
  • 2-4 人本地 Hotseat 模式(同屏轮流操作)
  • 骰子分组交互(拖拽/点击)
  • 多个 1 的特殊规则处理(可变换点数)
  • 山顶争夺与击落机制
  • 分数筹码收集系统
  • 奖励筹码(集齐六山得分)
  • 游戏存档与恢复(自动保存到 localStorage)
  • 新手教程引导(首次访问自动显示)
  • 中英文双语支持
  • 响应式设计(桌面/移动端适配)

技术栈

  • 框架: Vue 3.5 + TypeScript
  • 状态管理: Pinia
  • 样式: Tailwind CSS 4
  • 国际化: vue-i18n
  • 构建工具: Vite 7
  • UI 组件: Radix Vue

快速开始

# 安装依赖
npm install
# 启动开发服务器
npm run dev
# 构建生产版本
npm run build
# 预览生产版本
npm run preview

开发服务器运行在 http://localhost:3000

Docker 部署

# 构建镜像
docker build -t mountain-goats .
# 运行容器
docker run -d -p 4000:3000 --name goats mountain-goats
# 访问
http://localhost:4000
# 其他命令
docker logs goats # 查看日志
docker stop goats # 停止容器
docker restart goats # 重启容器
docker rm goats # 删除容器
# 强制更新(重新构建镜像并启动)
docker stop goats && docker rm goats
docker build --no-cache -t mountain-goats .
docker run -d -p 4000:3000 --name goats mountain-goats

项目结构

src/
├── components/ # Vue 组件
│ ├── GameBoard.vue # 游戏主界面
│ ├── DiceArea.vue # 骰子操作区
│ ├── SetupScreen.vue # 玩家设置界面
│ ├── RulesModal.vue # 规则说明弹窗
│ ├── TutorialOverlay.vue # 新手教程
│ └── LanguageSwitcher.vue # 语言切换
├── stores/
│ └── game.ts # Pinia 游戏状态管理
├── lib/ # 纯游戏逻辑(无 Vue 依赖)
│ ├── gameState.ts # 状态工厂与分数计算
│ ├── rules.ts # 核心规则引擎
│ ├── turnFlow.ts # 回合状态机
│ └── endGame.ts # 结束条件与排名
├── types/
│ └── game.ts # TypeScript 类型定义
├── i18n/ # 国际化配置
│ ├── index.ts
│ └── locales/
│ ├── zh.ts # 中文翻译
│ └── en.ts # 英文翻译
├── App.vue # 根组件
└── main.ts # 入口文件

游戏规则

基本设置

  • 6 座山,编号 5-10,高度分别为 3-8 格
  • 每位玩家在每座山脚放置一只山羊
  • 每座山有对应分值的筹码堆

回合流程

  1. 掷骰: 投掷 4 颗骰子
  2. 处理多个 1: 如果掷出多个 1,保留第一个,其余可变为任意点数(1-6)
  3. 分组: 将骰子分成若干组,每组点数之和对应一座山(5-10 有效)
  4. 移动: 有效分组对应的山上,你的山羊前进一格

得分规则

  • 登顶得分: 山羊到达山顶时,获得该山一枚分数筹码
  • 击落对手: 登顶时如有其他玩家山羊在顶,将其击落至山脚
  • 已在山顶: 再次触发该山移动时,不移动但仍拿一枚筹码
  • 奖励筹码: 集齐 6 座山的筹码后,获得奖励筹码(15/12/9/6 分)

游戏结束

满足以下任一条件后,完成当前轮次:

  • 所有奖励筹码被拿光
  • 3 座或更多山的筹码堆为空

胜负判定: 总分最高者获胜。平分时比较山顶山羊数量,仍平则比较最高编号山的占领情况。

架构说明

用户交互 (Components)
 ↓
Pinia Store (stores/game.ts)
 ↓
纯游戏逻辑 (lib/*.ts)
 ↓
不可变状态更新 → 组件重新渲染

游戏逻辑与 UI 完全解耦,所有 lib 函数为纯函数,便于测试和未来扩展(如 AI 对战、在线模式)。

添加新语言

  1. src/i18n/locales/ 下创建新语言文件(如 ja.ts)
  2. 参照 zh.ts 结构翻译所有文本
  3. src/i18n/index.ts 中注册新语言
  4. 更新 LanguageSwitcher.vue 添加切换选项

浏览器支持

  • Chrome(推荐)
  • Safari
  • Edge
  • Firefox

License

MIT

About

桌游 Mountain Goats

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

Contributors

AltStyle によって変換されたページ (->オリジナル) /