Files
httprunner/examples/game/llk
2025-06-15 00:47:20 +08:00
..
2025-06-15 00:47:20 +08:00
2025-06-15 00:47:20 +08:00

LianLianKan (连连看) Game Bot

基于 HttpRunner @/uixt 模块实现的连连看小游戏自动游玩机器人。

功能特性

核心功能

  • 智能界面分析: 使用 AI 模型分析游戏界面,自动识别游戏元素类型和位置
  • 完整求解算法: 实现符合连连看规则的完整求解算法,支持直线、一次转弯、两次转弯连接
  • 静态分析求解: 基于初始游戏状态进行静态分析,预先计算所有有效配对
  • 跨平台支持: 支持 Android、iOS、HarmonyOS、Browser 等多种平台

连连看算法

  • 直线连接: 检测水平和垂直直线连接0次转弯
  • L形连接: 支持一次转弯的 L 形路径连接1次转弯
  • Z形连接: 支持两次转弯的 Z 形路径连接2次转弯
  • 路径验证: 确保连接路径无阻挡
  • 游戏规则验证: 严格按照连连看游戏规则验证配对有效性

项目结构

examples/game/llk/
├── main.go          # 主要实现文件,包含游戏机器人
├── solver.go        # 连连看求解器实现
├── main_test.go     # 游戏机器人测试
├── solver_test.go   # 求解器测试
├── testdata/        # 测试数据
├── results/         # 运行结果
├── cmd/             # 命令行工具
└── README.md        # 项目说明

主要组件

数据结构

  • GameElement: 游戏元素信息,包含维度、元素列表等
  • Element: 单个游戏元素,包含类型和位置信息
  • Position: 网格位置,包含行列坐标
  • Dimensions: 网格维度,包含行数和列数
  • LLKGameBot: 游戏机器人,集成 XTDriver 和 AI 服务
  • LLKSolver: 连连看求解器,实现完整的游戏求解逻辑

核心方法

LLKGameBot 方法:

  • NewLLKGameBot(): 创建游戏机器人实例
  • AnalyzeGameInterface(): 分析游戏界面,提取游戏元素
  • TakeScreenshot(): 截取屏幕截图
  • SolveGame(): 求解整个游戏
  • Play(): 执行游戏操作
  • Close(): 关闭机器人并清理资源

LLKSolver 方法:

  • NewLLKSolver(): 创建求解器实例
  • FindAllPairs(): 查找所有有效的匹配对
  • canConnect(): 检查两个位置是否可以连接
  • canConnectDirect(): 检查直线连接
  • canConnectWithOneTurn(): 检查一次转弯连接
  • canConnectWithTwoTurns(): 检查两次转弯连接

环境配置

需要配置 AI 服务密钥:

# doubao-1.6-seed-250615用作分析游戏界面
DOUBAO_SEED_1_6_250615_BASE_URL=https://ark.cn-beijing.volces.com/api/v3
DOUBAO_SEED_1_6_250615_API_KEY=<your_api_key>

# doubao-1.5-ui-tars-250328用作执行游戏操作
DOUBAO_1_5_UI_TARS_250328_BASE_URL=https://ark.cn-beijing.volces.com/api/v3
DOUBAO_1_5_UI_TARS_250328_API_KEY=<your_api_key>

使用示例

基本使用

// 创建游戏机器人
bot, err := NewLLKGameBot("android", "")
if err != nil {
    log.Fatal(err)
}
defer bot.Close()

// 分析游戏界面
gameElement, err := bot.AnalyzeGameInterface()
if err != nil {
    log.Fatal(err)
}

// 创建求解器并查找配对
solver := NewLLKSolver(gameElement)
pairs := solver.FindAllPairs()

// 求解完整游戏
solution, err := bot.SolveGame(gameElement)
if err != nil {
    log.Fatal(err)
}

// 执行游戏
err = bot.Play()
if err != nil {
    log.Fatal(err)
}

求解器独立使用

// 直接使用求解器
solver := NewLLKSolver(gameElement)
allPairs := solver.FindAllPairs()

// 打印解决方案
for i, pair := range allPairs {
    fmt.Printf("Pair %d: (%d,%d) -> (%d,%d) [%s]\n",
        i+1,
        pair[0].Position.Row, pair[0].Position.Col,
        pair[1].Position.Row, pair[1].Position.Col,
        pair[0].Type)
}

测试

运行测试

# 运行所有测试
go test -v

# 运行游戏机器人测试
go test -v -run TestLLKGameBot

# 运行求解器测试
go test -v -run TestLLKSolver

# 运行基准测试
go test -v -bench=.

测试覆盖

  • AI 分析测试: 测试 AI 模型的界面分析能力
  • 求解器测试: 测试连连看算法的正确性和性能
  • 连接规则测试: 验证各种连接规则的实现
  • 完整集成测试: 测试游戏机器人的完整流程

测试数据

项目包含完整的测试数据集,包括:

  • 14x8 游戏板,共 112 个元素
  • 25 种不同的游戏元素类型
  • 完整的求解路径验证

技术特点

AI 集成

  • 使用先进的 AI 模型进行图像分析
  • 支持结构化输出 Schema
  • 自动提取游戏元素的类型、位置、坐标信息
  • 支持多种 AI 服务提供商

算法优化

  • 静态分析: 基于初始游戏状态进行分析,避免动态状态管理的复杂性
  • 完全遵循游戏规则: 严格按照连连看规则验证连接有效性
  • 高效路径检测: 支持 0-2 次转弯的路径连接算法
  • 智能配对查找: 预先计算所有有效配对,提高执行效率

代码质量

  • 完整的单元测试覆盖
  • 详细的英文代码注释
  • 清晰的错误处理和日志记录
  • 完善的资源管理和清理
  • 模块化设计,职责分离

许可证

本项目遵循 HttpRunner 项目的许可证。