# Absolute_Majority
**Repository Path**: v5general/Absolute_Majority
## Basic Information
- **Project Name**: Absolute_Majority
- **Description**: 一款议会政治模拟游戏,拥有199个AI控制的NPC,每个NPC都拥有独特的个性、类似《十字军之王3》的特质、生老病死以及多党政治体系。采用React+TypeScript构建。
- **Primary Language**: TypeScript
- **License**: GPL-3.0
- **Default Branch**: master
- **Homepage**: https://absolute-majority.pages.dev
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-06-14
- **Last Updated**: 2026-06-30
## Categories & Tags
**Categories**: Uncategorized
**Tags**: React, TypeScript, Gamemaker, Game-engine
## README
# 🎮 绝对多数(Absolute Majority)
> *「你不是首相,也不是党首。你只是 200 席中的一名新人议员——而政治,是规则、数字与人心三者碰撞的游戏。」*
[](LICENSE)
[](https://github.com/v5general/political-human-skill)
一款 AI 驱动的回合制议会政治策略游戏,背景设定在 2058 年架空日本的众议院。全部剧情——每一个事件、每一句对话、每一个选项——都由 LLM 实时生成,并由确定性的规则引擎约束议会程序。未配置 LLM 时,游戏回退到规则文本,保证始终可玩。
[English](README.md) | **简体中文** | [日本語](README.ja.md) | [한국어](README.ko.md)
[这是什么](#这是什么) · [🎮 与 Political Human Skill 的关联](#-与-political-human-skill-的关联) · [特性](#特性) · [世界观](#世界观) · [游戏流程](#游戏流程) · [技术栈](#技术栈) · [快速开始](#快速开始) · [LLM 配置](#llm-配置) · [项目结构](#项目结构) · [状态](#状态) · [许可证](#许可证)
---
## 这是什么
**绝对多数**是一款回合制议会政治策略游戏。你扮演一名新当选的众议员,在 48 回合(4 年)中穿行于派阀斗争、联合组阁、委员会博弈、媒体战与密室交易之间。
游戏采用双层架构:
```text
规则引擎(始终启用) LLM 增强(可选)
- 确定性议会程序 - 动态叙事生成
- 席位分配与选举数学 - NPC 对话与推理
- Intent 验证与结算 - 事件与选项产出
- 14 种程序性 Intent 类型 - 上下文感知适配
↓ 两层协作,互不从属 ↓
规则引擎是状态变更的唯一权威。
LLM 在规则约束内生成叙事、对话与选项。
无 LLM 时,规则文本填补所有空缺。
```
游戏中的每个 NPC——从首相到派阀领袖、媒体评论员、利益集团——都通过 agent 引擎感知世界并生成意图。这些意图必须先经过规则引擎验证,才能改变任何游戏状态。
---
## 🎮 与 Political Human Skill 的关联
> 🧩 **本游戏的 NPC 由 [Political Human Skill](https://github.com/v5general/political-human-skill) 驱动** —— 一个用于创建政治人物人格的开源框架,采用双层结构(人层 + 政治层)。
《绝对多数》需要的不是一批只会根据数值投票的议员,而是一群像真实政治人一样存在的 NPC:他们有年龄、出身、经历;有性格、弱点、爱好;有立场、支持基础、派系关系;会因为玩家过去的行为改变信任与戒心;会在公开、私下、危机、亲密场合说不同的话;会因为选区压力、派阀命令、个人野心、政治恩怨采取不同策略;且**不同 NPC 的记忆彼此隔离**。
**[Political Human Skill](https://github.com/v5general/political-human-skill)** 正是为此而生。与本游戏结合时,该 Skill 会:
- 在游戏规则提供的候选行动中做判断并选择
- 输出结构化、可调试、可解释的 NPC 行为 JSON
- 通过独立记忆与关系状态维持人格连续性
- 根据场合切换自我状态(公开 / 私下 / 策略 / 受伤 / 亲密)
```json
{
"selected_action": "negotiate_budget",
"action_scores": { "support_bill": 58, "negotiate_budget": 86, "join_rebellion": 27 },
"public_statement": "政策方向可以理解,但地方经济的承受能力需要更细致的制度设计。",
"private_reason": "支持基础依赖地方公共支出,直接支持会损害选区关系。",
"relationship_delta": { "trust": 1, "respect": 2, "caution": 1 },
"memory_write": ["玩家在财政改革事件中要求该 NPC 支持法案,但未提供地方预算补偿。"]
}
```
> **《绝对多数》**是 Political Human Skill 的首要应用场景,但该 Skill 本身作为一个独立、可复用、可扩展的框架存在。两个项目协同开发,共享同一安全承诺——绝不涉及近现代现实政治人物。
---
## 特性
- **AI 驱动叙事** — 事件、对话、选项由 LLM 实时生成,会根据当前局势、国会会期和角色背景动态适配。
- **完整议会模拟** — 200 席众议院(110 直接席 + 90 比例代表 D'Hondt,并行制)、9 个常任委员会、不信任案、法案决策链,以及多档表决门槛(过半数 / 绝对多数 / 超级多数)。
- **派阀系统** — 党内派阀拥有忠诚度、野心,可挑战党首;联合劳工党实行民主集中制,禁止派阀。
- **国会年度会期** — 一年分为四段,会期决定当月可行动作:预算决战期(1–3 月)、法案攻坚期(4–6 月)、地方维护期(7–9 月,国会闭会)、临时国会(10–12 月)。
- **双轨晋升** — 党内晋升与国会晋升相互独立;当大臣 ≠ 当党首。
- **组阁系统** — 选后联盟谈判、内阁职位分配、首相指名。
- **14 个程序性 Intent** — 完整的意图管线(校验 + 结算):不信任提案、解散决策、法案起草/表决、委员会审查/表决、联盟谈判、内阁改组、党首挑战、政策宣示。
- **Galgame 式对话** — 政治事件以视觉小说式对话呈现,全屏自适应布局,手机和桌面都舒适;带选项与后果。
- **角色创建** — 自定义姓名、年龄、性别、所属政党、性格特质、意识形态、出身背景;背景会影响你遭遇的事件。
- **移动端自适应** — 布局、字号、图片格式(手机 WebP、桌面 PNG)乃至 LLM 并发数都会随屏幕尺寸切换;刷新安全的 URL 路由让你在事务所与国会局势之间切换后,重载页面仍停留在原界面。
---
## 世界观
**设定**:架空日本,2058 年。议会内阁制。众议院为唯一可操作议会。
**任期**:4 年 = 48 回合。1 回合 = 1 个月。游戏从 1 月(预算决战期起始)开始。
**六个原创政党**(不存在现实政党与政治人物):
| 政党 | 简称 | 意识形态 | 基础席位 |
|------|------|---------|---------|
| 改革民主党 | RDP | 中间 | 54 |
| 自由党 | LP | 右翼 | 40 |
| 国民保守党 | NCP | 中右 | 38 |
| 社会联盟 | SA | 中左 | 29 |
| 第一公民阵线 | FCF | 极右 | 24 |
| 联合劳工党 | ULP | 左翼 | 14 |
199 席 NPC 由确定性并行选举系统分配。你是第 200 席——占 1 个比例代表席,加入某党后该党席位 +1。
---
## 游戏流程
1. **主菜单** — 开始新游戏或继续存档。
2. **角色创建** — 定义你的政治角色。
3. **事务所(主界面)** — 你的大本营:推进回合、打开党派一览与个人档案浮层、进入国会局势。
4. **国会局势** — 四大仪表盘(内阁 / 委员会 / 政局 / 关系)+ 实时 AI 推演日志。可通过 `#/game/situation` 直达,刷新页面仍停留在该界面。
---
## 技术栈
- **React 18** + **TypeScript**
- **Vite 6**(构建工具)
- 除 React 外无运行时依赖,全部游戏逻辑手写。
---
## 快速开始
```bash
# 安装依赖
npm install
# 启动开发服务器
npm run dev
# 生产构建
npm run build
# 预览生产构建
npm run preview
```
然后打开 Vite 提示的地址(默认 `http://localhost:5173`)。
---
## LLM 配置
游戏采用双层架构:
- **规则回退(始终启用)** — 纯本地逻辑,无 API 也能玩。
- **LLM 增强(可选)** — 接入任意 OpenAI 兼容 API(DeepSeek、OpenAI、Kimi、通义千问、GLM、硅基流动等),获得更丰富、更动态的叙事与推理。
在游戏内的设置面板配置 LLM:填写 **Base URL**、**API Key**、**模型名**。配置保存在浏览器本地。
调用通过 SSE 流式返回,避免长响应在移动网络上被静默中断;引擎还会在手机上自动串行执行多个 agent 调用,以适应更严格的并发连接限制。若服务商不支持流式,桥接层会自动降级为单次 JSON 响应。
---
## 项目结构
```
src/
├── App.tsx # 路由、表头、导航标签、回合流程
├── App.css # 国会局势样式 + 响应式断点
├── components/ # UI:主菜单、角色创建、对话层、各仪表盘、弹窗
├── engine/ # 游戏逻辑:agent、叙事、规则、选举、委员会、派阀、llmBridge……
├── config/ # 规则常量、选举/选区/背景配置
├── data/ # 初始状态、政党、事件、市场、媒体、世界观
├── hooks/ # useGameState(中央状态管理)
└── types/ # TypeScript 类型定义
```
核心引擎:
- `agentEngine` — AI 角色(首相、党首、派阀领袖、媒体、利益集团)感知局势并生成行动意图。
- `narrativeEngine` — 将意图转换为可玩事件(标题、对话、选项、后果)。
- `rulesEngine` — 修改席位、支持率、资金、关系的唯一合法入口;校验并结算全部 14 种程序性 AI 意图。
- `electionEngine` — 确定性并行选举:110 直接席(11 选区 × 块内 D'Hondt)+ 90 比例代表席(全国 D'Hondt + 5% 阈值)。
- `llmBridge` — OpenAI 兼容客户端,内建移动端流式、超时、重试以及 `debugLLMConfig()` 控制台调试助手。
---
## 状态
个人项目,持续迭代中。419 个确定性单元测试覆盖 11 个测试文件。出于兴趣与 LLM 接地政治模拟的实验而构建。
---
## 许可证
本项目基于 [GNU General Public License v3.0](LICENSE) 授权。
---
*48 回合。200 席位。该你落子了。*