云顶之弈阵容推荐器

项目概述

本项目是一个基于Python的云顶之弈阵容推荐工具通过Riot官方提供的游戏数据职业、特质、棋子实现自动化的阵容分析与推荐。项目具有灵活的评分机制能够根据用户需求如指定人口、羁绊、棋子等智能推荐最优阵容。

主要功能

  1. 数据提供模块

    • 从官方接口获取最新游戏数据并支持本地缓存
    • 提供丰富的数据查询API如获取羁绊下的棋子、棋子的羁绊详情等
    • 高效的数据处理与缓存机制
  2. 阵容推荐模块

    • 根据用户指定的人口、必须羁绊、必选棋子自动生成阵容
    • 支持多种约束条件组合,如指定多个羁绊、多个棋子等
    • 智能选择最佳棋子组合,最大化羁绊效果
  3. 阵容评分模块

    • 综合考虑羁绊数量、等级、棋子费用等因素
    • 可配置的评分权重,支持自定义评分策略
    • 多维度评估阵容强度,提供量化的阵容分析
    • 支持通过外置配置文件为特定羁绊或棋子设置自定义权重
  4. 接口模块

    • 提供编程接口,方便集成到其他应用中
    • 交互式命令行界面,便于直接使用
    • 支持自定义评分参数

环境与依赖

  • Python版本: Python 3.8+
  • 主要依赖:
    • requests: 用于获取在线数据
    • pandas: 用于数据处理
    • pyyaml: 用于配置文件解析
    • pytest: 用于单元测试

项目安装

  1. 克隆项目代码
git clone https://github.com/username/TFT-Strategist.git
cd TFT-Strategist
  1. 安装依赖
pip install -r requirements.txt

快速开始

数据提供模块演示

运行以下命令启动数据提供模块的演示程序:

python main.py data

演示程序将展示以下功能:

  • 加载最新的游戏数据
  • 显示当前版本职业、特质和棋子的基本信息
  • 提供交互式查询界面,可以查询羁绊的棋子、棋子的羁绊等信息

阵容推荐模块演示

运行以下命令启动阵容推荐模块的演示程序:

python main.py recommend

演示程序将提供以下功能:

  • 指定人口数量生成最佳阵容
  • 指定必选羁绊生成阵容
  • 指定必选棋子生成阵容
  • 综合多种条件生成最优阵容

评分系统演示

运行以下命令启动评分系统的演示程序:

python src/scoring_demo.py

演示程序将展示以下功能:

  • 使用默认权重进行阵容评分
  • 使用配置文件中的自定义权重进行评分
  • 通过代码动态设置特定羁绊和棋子的权重
  • 比较不同权重设置下的评分差异
  • 动态修改配置文件并重新加载

命令行界面

运行以下命令启动交互式命令行界面:

python main.py cli

命令行界面提供以下功能:

  • 指定阵容人口和评分参数
  • 交互式添加必选羁绊和等级
  • 交互式添加必选棋子
  • 展示详细的阵容推荐结果,包括棋子信息和激活的羁绊

您还可以使用命令行参数自定义配置:

python main.py cli --population 8 --results 5 --level-weight 1.2 --count-weight 0.7 --cost-weight 0.2

项目结构

TFT-Strategist/
├── data/                      # 数据存储目录
│   ├── chess.json             # 棋子数据
│   ├── job.json               # 职业数据
│   ├── race.json              # 特质数据
│   └── weights_config.yaml    # 自定义权重配置文件
├── src/                       # 源代码
│   ├── data_provider/         # 数据提供模块
│   │   ├── __init__.py
│   │   ├── data_loader.py     # 数据加载器
│   │   └── data_query_api.py  # 数据查询API
│   ├── recommendation/        # 阵容推荐模块
│   │   ├── __init__.py
│   │   └── recommendation_engine.py  # 阵容推荐引擎
│   ├── scoring/               # 阵容评分模块
│   │   ├── __init__.py
│   │   ├── scoring_system.py  # 阵容评分系统
│   │   └── config_loader.py   # 配置加载器
│   ├── interface/             # 接口模块
│   │   ├── __init__.py
│   │   ├── api.py             # 编程接口
│   │   └── cli.py             # 命令行界面
│   ├── __init__.py
│   ├── data_provider_demo.py  # 数据提供模块演示
│   ├── recommendation_demo.py # 阵容推荐模块演示
│   └── scoring_demo.py        # 评分系统演示
├── tests/                     # 测试代码
│   ├── test_data_provider.py  # 数据提供模块测试
│   ├── test_recommendation.py # 阵容推荐模块测试
│   └── test_interface.py      # 接口模块测试
├── main.py                    # 主程序入口
├── requirements.txt           # 项目依赖
└── README.md                  # 项目文档

数据提供模块详解

数据提供模块是整个阵容推荐系统的基础,负责从官方接口获取最新的游戏数据,并提供丰富的查询功能。

主要组件

  1. DataLoader: 负责数据获取与缓存

    • 支持从本地或网络加载数据
    • 实现数据缓存机制,避免频繁请求
    • 自动处理数据更新
  2. DataQueryAPI: 提供丰富的数据查询接口

    • 获取所有职业/特质/棋子数据
    • 根据ID或名称查询具体数据
    • 查询羁绊下的棋子、棋子的羁绊
    • 获取羁绊等级信息
    • 查询棋子费用分布

使用示例

from src.data_provider import DataQueryAPI

# 初始化API
api = DataQueryAPI()

# 获取所有职业
jobs = api.get_all_jobs()

# 查询特定羁绊的棋子
heavy_warrior = api.get_job_by_name("重装战士")
if heavy_warrior:
    chess_list = api.get_chess_by_job(heavy_warrior['jobId'])
    print(f"重装战士棋子: {[chess['displayName'] for chess in chess_list]}")

# 查询棋子的羁绊
brand = api.get_chess_by_name("布兰德")
if brand:
    synergies = api.get_synergies_of_chess(brand['chessId'])
    print(f"布兰德的羁绊: {[synergy['name'] for synergy in synergies]}")

阵容推荐模块详解

阵容推荐模块是系统的核心,能够根据用户需求生成最优阵容。

主要组件

  1. RecommendationEngine: 阵容推荐引擎

    • 支持多种约束条件组合(人口、羁绊、棋子)
    • 智能选择最佳棋子组合
    • 内置多种推荐策略
  2. TeamComposition: 阵容组合类

    • 表示一个完整的云顶之弈阵容
    • 包含棋子列表、羁绊统计等信息
    • 提供阵容分析功能

使用示例

from src.data_provider import DataQueryAPI
from src.recommendation import RecommendationEngine
from src.scoring import TeamScorer

# 初始化API和推荐引擎
api = DataQueryAPI()
engine = RecommendationEngine(api=api)

# 指定人口推荐
teams = engine.recommend_team(population=9)

# 指定羁绊推荐
required_synergies = [
    {'name': '刺客', 'level': 4},
    {'name': '忍者', 'level': 1}
]
teams = engine.recommend_team(
    population=8,
    required_synergies=required_synergies
)

# 指定棋子推荐
required_chess = [
    {'name': '阿卡丽'},
    {'name': '劫'}
]
teams = engine.recommend_team(
    population=7,
    required_chess=required_chess
)

# 查看推荐结果
for team in teams:
    print(f"推荐阵容评分: {team.score}")
    print(f"阵容棋子: {[chess['displayName'] for chess in team.chess_list]}")

阵容评分模块详解

阵容评分模块提供了对阵容进行综合评分的功能,考虑多个因素。

主要组件

  1. TeamScorer: 阵容评分系统

    • 综合考虑羁绊数量、等级、棋子费用等因素
    • 提供可配置的评分权重
    • 多维度评估阵容强度
  2. ScoringConfig: 评分配置类

    • 定义各项评分权重
    • 支持自定义评分策略
  3. ConfigLoader: 配置加载器

    • 从外部YAML或JSON文件加载自定义权重设置
    • 支持修改和重新加载配置

评分因素

  1. 羁绊等级评分:基于羁绊等级和额外激活的羁绊单位数量
  2. 羁绊种类数量评分:基于激活的羁绊种类数量
  3. 棋子费用评分:基于阵容中棋子的费用分布
  4. 自定义权重评分:基于配置文件中设置的特定羁绊和棋子权重

自定义权重配置

你可以通过编辑 data/weights_config.yaml 文件来自定义评分权重:

# 基础权重配置
base_weights:
  synergy_level_weight: 1.0    # 羁绊等级权重
  synergy_count_weight: 0.5    # 羁绊种类数量权重
  chess_cost_weight: 0.1       # 棋子费用权重

# 羁绊权重配置(值越大,该羁绊在评分中的权重越高)
synergy_weights:
  重装战士: 1.5
  魔法师: 1.2
  # 可以添加更多羁绊...

# 棋子权重配置(值越大,该棋子在评分中的权重越高)
chess_weights:
  亚索: 1.5
  艾希: 1.2
  # 可以添加更多棋子...

使用示例

from src.scoring import TeamScorer

# 使用默认权重初始化评分器
scorer = TeamScorer()

# 从配置文件加载自定义权重
scorer_with_config = TeamScorer(config_path="data/weights_config.yaml")

# 动态设置特定羁绊的权重
scorer.set_synergy_weight("狙神", 2.0)
scorer.set_synergy_weight("刺客", 1.8)

# 动态设置特定棋子的权重
scorer.set_chess_weight("艾希", 2.0)
scorer.set_chess_weight("薇恩", 1.8)

# 评分阵容
score = scorer.score_team(team)

接口模块详解

接口模块提供了便捷的方式与阵容推荐器进行交互,包括编程接口和命令行界面。

主要组件

  1. TFTStrategistAPI: 编程接口类

    • 提供完整的数据查询功能
    • 提供阵容推荐和评分功能
    • 支持自定义评分参数
  2. TFTCommandLine: 命令行界面类

    • 交互式用户界面
    • 支持添加必选羁绊和棋子
    • 详细展示阵容推荐结果

编程接口使用示例

from src.interface import TFTStrategistAPI, get_api

# 使用单例模式获取API实例
api = get_api()

# 或者创建新的API实例
# api = TFTStrategistAPI(use_local_data=True)

# 获取游戏版本
version = api.get_version()
print(f"当前游戏版本: {version}")

# 自定义评分参数
api.customize_scoring(
    synergy_level_weight=1.2,
    synergy_count_weight=0.6,
    chess_cost_weight=0.15
)

# 获取职业和特质信息
jobs = api.get_all_jobs()
races = api.get_all_races()

# 推荐阵容
required_synergies = [{'name': '超频战士', 'level': 3}]
required_chess = [{'name': '薇古丝'}]

teams = api.recommend_team(
    population=8,
    required_synergies=required_synergies,
    required_chess=required_chess,
    max_results=3
)

# 处理推荐结果
for i, team in enumerate(teams, 1):
    print(f"\n推荐阵容 #{i} (评分: {team['score']:.2f})")
    print(f"棋子: {[chess['displayName'] for chess in team['chess_list']]}")

命令行界面使用

直接通过main.py运行命令行界面

python main.py cli [参数]

可选参数:

  • --population: 阵容人口数量默认为9
  • --results: 返回结果数量默认为3
  • --level-weight: 羁绊等级权重默认为1.0
  • --count-weight: 羁绊数量权重默认为0.5
  • --cost-weight: 棋子费用权重默认为0.1

在交互界面中,您可以:

  1. 添加必选羁绊并指定等级
  2. 添加必选棋子
  3. 获取详细的阵容推荐结果

开发计划

  • 数据提供模块
  • 阵容推荐模块
  • 阵容评分模块
  • 接口模块

未来展望

  • 图形用户界面(GUI)开发
  • 基于历史数据的胜率分析
  • 支持装备推荐
  • 多语言支持
  • 基于机器学习的个性化推荐

贡献指南

欢迎贡献代码、报告问题或提出新功能建议请先fork本仓库然后提交拉取请求。

许可证

MIT

联系方式

如有任何问题或建议请提交issue或联系项目维护者。

Description
No description provided
Readme 229 KiB
Languages
Python 72.5%
JavaScript 19%
HTML 4.3%
CSS 4.2%