Skip to content

E9C50/trustgame

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

16 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🎮 信任的游戏 (Trust Game)

基于囚徒困境的多人在线策略竞技游戏

Go Version Vue Version TypeScript License

功能特性截图展示快速开始游戏规则技术栈


📖 项目简介

信任的游戏是一个基于经典囚徒困境理论的多人在线策略游戏。玩家通过编写JavaScript策略或使用可视化蓝图编辑器来设计自己的决策算法,在每秒一次的对局中与其他玩家竞争,累积分数,争夺排行榜第一名。

这个项目不仅是一个有趣的游戏,更是一个探索博弈论、策略设计和人工智能的实验平台。

✨ 功能特性

  • 🎯 多人实时对战 - 基于WebSocket的实时匹配系统,每秒自动匹配所有在线玩家
  • 💻 双重编辑模式
    • JavaScript代码编辑器(基于Monaco Editor)
    • 可视化蓝图节点编辑器(无需编程基础)
  • 📊 实时排行榜 - 多维度排名展示(总分、平均分、胜率)
  • 📜 完整对局记录 - 查看历史对局的详细数据和策略表现
  • 实时数据更新 - WebSocket推送,即时显示最新战况
  • 🎨 现代化UI - 基于Element Plus的精美界面设计

📸 截图展示

策略编辑器

策略编辑界面 支持JavaScript代码编辑和可视化蓝图编辑两种模式

排行榜

排行榜界面 实时展示玩家排名、总分、平均分和胜率

对局记录

对局记录界面 查看历史对局的详细回放和数据分析

代码编辑器

代码编辑器界面 可视化节点编辑器,拖拽即可设计策略

🎲 游戏规则

基本规则

游戏采用经典的囚徒困境模型:

你的选择 \ 对手的选择 合作(投币) 背叛(不投币)
合作(投币) 你得 3
对手得 3
你得 0
对手得 5
背叛(不投币) 你得 5
对手得 0
你得 1
对手得 1

对局机制

  • ⏱️ 每秒一次tick - 游戏引擎每秒执行一轮匹配
  • 🔄 自动配对 - 所有在线玩家随机两两配对
  • 🎯 100轮博弈 - 每对玩家进行100轮囚徒困境游戏
  • 📈 分数累积 - 所有对局的分数会累积到你的总分

策略编写

玩家可以通过两种方式创建策略:

  1. JavaScript代码编辑器

    function strategy(history, round, totalRounds) {
      // history: 历史对局记录数组 [{me: 'cooperate'/'defect', opponent: 'cooperate'/'defect'}]
      // round: 当前轮数 (0-99)
      // totalRounds: 总轮数 (100)
      
      if (round === 0) {
        return 'cooperate'; // 第一轮合作
      }
      
      // 以牙还牙策略:模仿对手上一轮的行为
      return history[history.length - 1].opponent;
    }
  2. 可视化蓝图编辑器 - 通过拖拽节点创建决策流程,无需编程知识

🚀 快速开始

环境要求

  • Go 1.21+
  • Node.js 16+
  • npm/yarn

安装与运行

1. 克隆项目

git clone https://github.com/yourusername/trustgame.git
cd trustgame

2. 启动后端

cd backend
go mod tidy
go run main.go

后端服务将在 http://localhost:8080 启动

3. 启动前端

cd frontend
npm install
npm run dev

前端服务将在 http://localhost:5173 启动

4. 开始游戏

在浏览器中打开 http://localhost:5173,注册账号并开始编写你的策略!

🛠️ 技术栈

后端

  • 语言: Go 1.21
  • Web框架: Gin
  • WebSocket: gorilla/websocket
  • 数据库: SQLite + go-sqlite3
  • JavaScript执行引擎: goja(在Go中运行JavaScript策略)

前端

  • 框架: Vue 3 (Composition API)
  • 语言: TypeScript 5.2
  • 构建工具: Vite 5
  • UI组件库: Element Plus
  • 状态管理: Pinia
  • 代码编辑器: Monaco Editor
  • 路由: Vue Router 4
  • HTTP客户端: Axios

📁 项目结构

trustgame/
├── backend/                # Go后端服务
│   ├── main.go            # 入口文件
│   ├── models/            # 数据模型定义
│   │   └── models.go
│   ├── engine/            # 游戏引擎核心逻辑
│   │   └── engine.go      # 匹配系统、策略执行、分数计算
│   ├── api/               # API路由和处理器
│   │   └── api.go         # RESTful API + WebSocket
│   ├── database/          # 数据库操作层
│   │   └── database.go    # CRUD操作
│   ├── go.mod             # Go依赖管理
│   └── trustgame.db       # SQLite数据库文件
│
├── frontend/              # Vue前端应用
│   ├── src/
│   │   ├── views/         # 页面组件
│   │   │   ├── Home.vue          # 首页
│   │   │   ├── Login.vue         # 登录/注册
│   │   │   ├── Strategies.vue    # 策略编辑器
│   │   │   ├── Leaderboard.vue   # 排行榜
│   │   │   └── Matches.vue       # 对局记录
│   │   ├── components/    # 可复用组件
│   │   │   ├── MonacoEditor.vue  # 代码编辑器
│   │   │   └── BlueprintEditor.vue # 蓝图编辑器
│   │   ├── stores/        # Pinia状态管理
│   │   │   └── player.ts
│   │   ├── services/      # API服务
│   │   │   └── api.ts
│   │   ├── router/        # 路由配置
│   │   │   └── index.ts
│   │   ├── App.vue        # 根组件
│   │   └── main.ts        # 入口文件
│   ├── package.json       # npm依赖管理
│   └── vite.config.ts     # Vite配置
│
├── docs/                  # 文档和截图
└── README.md              # 项目说明文档

🎯 核心模块说明

游戏引擎 (engine.go)

  • 匹配系统: 每秒自动配对所有在线玩家
  • 策略执行: 使用goja在Go环境中安全执行JavaScript策略
  • 沙箱机制: 超时控制、内存限制,防止恶意代码
  • 分数计算: 根据囚徒困境规则计算每轮得分
  • 数据持久化: 保存对局记录供后续分析

API服务 (api.go)

  • RESTful API: 用户认证、策略CRUD、排行榜查询
  • WebSocket: 实时推送排行榜更新和对局结果
  • CORS配置: 支持前后端分离开发

前端架构

  • 组件化设计: 模块化、可复用的Vue组件
  • 响应式状态: 使用Pinia进行全局状态管理
  • 类型安全: TypeScript提供完整的类型检查
  • 实时通信: WebSocket自动重连机制

🤝 贡献指南

欢迎提交Issue和Pull Request!

  1. Fork本项目
  2. 创建特性分支 (git checkout -b feature/AmazingFeature)
  3. 提交更改 (git commit -m 'Add some AmazingFeature')
  4. 推送到分支 (git push origin feature/AmazingFeature)
  5. 开启Pull Request

📝 许可证

本项目采用 MIT 许可证 - 查看 LICENSE 文件了解详情

🙏 致谢

  • 灵感来源于 Robert Axelrod 的《合作的进化》
  • 感谢所有开源项目的贡献者

⬆ 回到顶部

Made with ❤️ by [E9C50 & Cursor]

About

《信任的进化》多人在线MMO版

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors