Skip to content

About

地震逃生模拟器

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

21 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

地震灾害逃生模拟器

基于科学地震学计算的交互式地震逃生模拟游戏,参加 Trae AI 创造力大赛。

快速开始

环境要求

  • Node.js >= 14
  • Python >= 3.8(编辑器可选)

启动游戏服务器

node server/server.js

浏览器打开 http://localhost:3000

启动事件编辑器

pip install flask
python editor/editor.py

浏览器打开 http://localhost:5000

项目结构

eqgame/
├── server/              # 游戏服务器(原生 Node.js HTTP)
│   ├── server.js        # 主服务器:API、存档、AI 生成
│   └── db.js            # SQLite 用户数据库
├── start/               # 科学管道与开局数据
│   ├── Start_process_function/  # 7 步地震学计算模块
│   ├── landform.json    # 地貌数据(6 种)
│   ├── career.json      # 职业数据(6 种)
│   ├── hobby.json       # 爱好数据(4 种)
│   ├── building_structure.json  # 建筑结构(7 种,含倒塌/伤亡率)
│   ├── venues.json      # 场所数据(8 种)
│   └── start.js         # 客户端状态初始化
├── event/               # 事件系统
│   ├── event.json       # 事件库(含开局事件)
│   ├── event.js         # 事件引擎(过滤/选择/效果/疾病/建筑判定)
│   ├── eew.js           # 地震预警引擎(P/S 波倒计时)
│   ├── ai_generated.json # AI 生成事件缓存
│   └── disease/         # 疾病系统(6 种疾病 + tick 结算)
├── achievement/         # 成就系统
│   ├── achievement.json # 41 个成就
│   └── achievement.js   # 成就运行时检查引擎
├── history/             # 历史模拟模式
│   └── 20080512/        # 汶川地震数据
├── editor/              # 事件编辑器(Flask + 可视化连线)
│   ├── editor.py        # Flask 后端
│   ├── ai_agent.py      # AI 代理调试模式
│   └── templates/editor.html  # 可视化连线编辑器
├── plot/               # 剧情设计文档
│   ├── phases/          # 分阶段剧情(预警→震中→逃生→灾后→结局)
│   ├── chains/          # 事件链设计
│   └── drafts/          # 草稿与灵感
├── save/                # 存档目录(按用户名分目录)
├── game.html / game.js  # 游戏主界面
├── index.html / script.js  # 登录注册页
└── style.css            # 全局样式

核心功能

科学管道(7 步)

  1. 震级生成 → 2. 震源深度 → 3. 震中距 → 4. Vs30 → 5. 断层/地貌/天气 → 6. 持时/烈度 → 7. 断层距

地震预警(EEW)

  • P 波 5.5km/s、S 波 3.5km/s 倒计时
  • 盲区判断(震中距 < 16.5km 无预警时间)
  • 15 条实时决策,颜色闪烁按烈度分级

事件引擎

  • 多维过滤:前置事件/互斥/地形/地点/职业/爱好/天气/地貌/建筑
  • 开局事件分"接到预警/没接到预警"两类
  • 链式跳转、效果应用、疾病 tick 结算、建筑倒塌判定

AI 事件生成

  • 接入智谱 GLM-4.7-flash API
  • 根据当前游戏状态和历史事件生成上下文相关事件
  • 支持撤回/重试,生成事件缓存到 ai_generated.json

成就系统

  • 41 个成就,运行时自动检查(烈度/回合/速度/预警/极限等)
  • 剧情成就通过事件选项手动授予

API 端点

方法 路径 功能
POST /api/register 注册
POST /api/login 登录
GET/POST /api/check Token 验证
POST /api/game/start 开始新游戏
GET/POST /api/game/state 获取状态
POST /api/game/update 更新状态
POST /api/game/save 保存存档
POST /api/game/load 加载存档
GET/POST /api/game/saves 存档列表
GET/POST /api/game/has-save 检查存档
GET/POST /api/game/save-info 存档信息
POST /api/game/complete 结档
POST /api/game/delete-save 删除存档
POST /api/game/clear-session 清空会话
POST /api/game/ai-generate AI 生成事件
GET/POST /api/game/ai-cache 读取 AI 缓存

文档

Git 部署

首次设置(在服务器上执行一次)

# 安装依赖
apt-get install -y nodejs git python3 python3-pip
pip3 install flask

# 创建裸仓库(作为推送目标)
mkdir -p /eqgame
git init --bare /eqgame.git

# 配置 post-receive 自动部署钩子
cat > /eqgame.git/hooks/post-receive << 'EOF'
#!/bin/bash
GIT_DIR=/eqgame.git
WORK_TREE=/eqgame
cd $WORK_TREE || { git clone /eqgame.git $WORK_TREE && cd $WORK_TREE; }
git --git-dir=$GIT_DIR --work-tree=$WORK_TREE fetch --all
git --git-dir=$GIT_DIR --work-tree=$WORK_TREE reset --hard origin/master
echo "[Git] 部署完成! $(date)"
EOF
chmod +x /eqgame.git/hooks/post-receive

本地推送(每次更新代码时执行)

# 首次推送(设置上游分支)
git remote add origin root@你的服务器IP:/eqgame.git
git push -u origin master

# 日常推送只需一行
git push

启动服务(在服务器上执行)

cd /eqgame

# 游戏服务器(需后台运行,推荐用 PM2 或 screen)
nohup node server/server.js > server.log 2>&1 &

# 编辑器(可选)
nohup python3 editor/editor.py > editor.log 2>&1 &

注意:上传脚本 _upload.py 中包含服务器密码,已在 .gitignore 中排除,不会推送到 Git 仓库。

版权声明

本项目(代码、成就图标、事件文本、剧情设计)采用 CC BY-NC 4.0 许可协议。

  • BY(署名):使用或分享本项目时需标明原作者
  • NC(非商业性使用):禁止将本项目用于商业目的
  • 文档/ 目录下的参考学术资料仅作开发参考,不进入生产环境

About

地震逃生模拟器

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages