Skip to content

nieeeeeeq/dddd

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

DNF 游戏图像识别控制框架

基于图像识别的 DNF (地下城与勇士) 游戏自动化控制 Python 框架。

功能特性

  • 🖥️ 屏幕捕获: 高效的屏幕截图,支持全屏和区域捕获
  • 🔍 图像识别: 模板匹配 + YOLO 深度学习目标检测
  • 🎮 输入控制: 键盘和鼠标模拟,支持组合键和连招
  • 🤖 状态机: 有限状态机管理游戏状态
  • ⚙️ 可配置: YAML 配置文件 + 环境变量支持
  • 🎯 DNF 专用: 完整的 DNF 游戏控制模块

项目结构

dnf/
├── config/
│   ├── config.yaml         # 通用配置文件
│   └── dnf_config.yaml     # DNF 专用配置
├── examples/
│   ├── basic_example.py    # 基础示例
│   ├── advanced_example.py # 高级示例
│   └── dnf_example.py      # DNF 专用示例
├── src/
│   ├── capture/            # 屏幕捕获模块
│   │   └── screen_capture.py
│   ├── recognition/        # 图像识别模块
│   │   ├── image_processor.py
│   │   ├── template_matcher.py
│   │   └── object_detector.py
│   ├── control/            # 游戏控制模块
│   │   ├── input_controller.py
│   │   └── action_executor.py
│   ├── core/               # 核心引擎
│   │   ├── game_engine.py
│   │   └── state_machine.py
│   ├── dnf/                # DNF 专用模块 ⭐
│   │   ├── dnf_config.py   # DNF 配置
│   │   ├── dnf_controller.py # DNF 控制器
│   │   ├── dnf_detector.py # DNF 检测器
│   │   ├── dnf_state.py    # DNF 状态机
│   │   └── dnf_bot.py      # DNF 自动化机器人
│   └── utils/              # 工具模块
│       ├── logger.py
│       └── config.py
├── templates/              # 模板图像目录
├── models/                 # 模型文件目录
├── main.py                 # 主程序入口
├── requirements.txt        # 依赖列表
└── README.md

快速开始

1. 安装依赖

# 创建虚拟环境(推荐)
python -m venv venv
source venv/bin/activate  # macOS/Linux
# venv\Scripts\activate  # Windows

# 安装依赖
pip install -r requirements.txt

2. 运行测试

# 测试模式
python main.py --test

# 截图模式
python main.py --screenshot screenshot.png

3. 基础使用

from src.core.game_engine import GameEngine

# 创建引擎
engine = GameEngine()

# 查找模板
if engine.template_exists("enemy"):
    result = engine.find_template("enemy")
    print(f"发现敌人: {result.center}")

# 执行动作
engine.attack()
engine.move("right", duration=0.5)
engine.use_skill("a")

模块说明

屏幕捕获 (ScreenCapture)

from src.capture.screen_capture import ScreenCapture

# 全屏捕获
capture = ScreenCapture()
frame = capture.capture()

# 区域捕获
capture = ScreenCapture(region=(100, 100, 800, 600))
frame = capture.capture()

# 保存截图
capture.save_screenshot("screenshot.png")

图像处理 (ImageProcessor)

from src.recognition.image_processor import ImageProcessor

# 灰度转换
gray = ImageProcessor.to_grayscale(frame)

# 边缘检测
edges = ImageProcessor.edge_detection(frame)

# 颜色过滤
mask = ImageProcessor.color_filter(
    frame,
    lower_bound=(0, 100, 100),
    upper_bound=(10, 255, 255),
    color_space="HSV"
)

模板匹配 (TemplateMatcher)

from src.recognition.template_matcher import TemplateMatcher

matcher = TemplateMatcher(templates_dir="templates")

# 单个匹配
result = matcher.match(frame, "button", threshold=0.8)
if result:
    print(f"位置: {result.center}, 置信度: {result.confidence}")

# 多个匹配
results = matcher.match_all(frame, "enemy", threshold=0.7)
for r in results:
    print(f"敌人位置: {r.center}")

目标检测 (ObjectDetector)

from src.recognition.object_detector import ObjectDetector

detector = ObjectDetector(model_path="models/yolov8n.pt")

# 检测所有目标
detections = detector.detect(frame)
for det in detections:
    print(f"{det.class_name}: {det.center}, 置信度: {det.confidence}")

# 检测特定类别
enemies = detector.detect_class(frame, "enemy")

输入控制 (InputController)

from src.control.input_controller import InputController

controller = InputController()

# 键盘
controller.press_key("space")
controller.hotkey("ctrl", "c")
controller.hold_key("shift", duration=1.0)

# 鼠标
controller.click(500, 300)
controller.double_click(500, 300)
controller.drag((100, 100), (500, 500))

动作执行器 (ActionExecutor)

from src.control.action_executor import ActionExecutor, GameAction, ActionType

executor = ActionExecutor()

# 注册技能
executor.register_action(GameAction(
    name="ultimate",
    action_type=ActionType.KEY_PRESS,
    params={"key": "r"},
    cooldown=60.0,
))

# 创建连招
executor.create_combo("basic_combo", ["attack", "attack", "skill_1"])

# 执行
executor.execute("ultimate")
executor.execute("basic_combo")

状态机 (StateMachine)

from src.core.state_machine import StateMachine, GameState

sm = StateMachine(GameState.IDLE)

# 注册状态
sm.add_state(
    GameState.IN_BATTLE,
    on_enter=lambda: print("进入战斗"),
    on_exit=lambda: print("退出战斗"),
)

# 添加转换
sm.add_transition(
    GameState.IDLE,
    GameState.IN_BATTLE,
    condition=lambda: detect_enemy(),
)

# 更新
sm.update()

配置说明

编辑 config/config.yaml:

capture:
  region: null        # 捕获区域 [x, y, w, h]
  fps: 30

recognition:
  templates_dir: "templates"
  threshold: 0.8

control:
  backend: "auto"     # auto/pynput/pyautogui
  key_delay: 0.05

actions:
  attack: "x"
  jump: "c"

macOS 权限设置

在 macOS 上运行需要授予以下权限:

  1. 屏幕录制权限: 系统偏好设置 → 安全性与隐私 → 屏幕录制
  2. 辅助功能权限: 系统偏好设置 → 安全性与隐私 → 辅助功能

DNF 专用模块

DNF 控制器 (DNFController)

from src.dnf import DNFController, DNFConfig

# 创建控制器
config = DNFConfig()
controller = DNFController(config)

# 移动
controller.move("right", duration=0.5)
controller.dash("right")  # 冲刺

# 攻击
controller.attack(3)  # 攻击3次
controller.jump_attack()  # 跳跃攻击

# 技能
controller.use_skill("skill_a")
controller.use_skill("skill_s", direction="right")  # 向右释放技能
controller.use_skill_combo(["skill_a", "skill_s", "skill_d"])

# 物品
controller.pickup()
controller.use_hp_potion()
controller.use_mp_potion()

DNF 检测器 (DNFDetector)

from src.dnf import DNFDetector

detector = DNFDetector()

# 玩家状态
hp = detector.get_hp_percent()  # 获取血量百分比
mp = detector.get_mp_percent()  # 获取蓝量百分比

# 敌人检测
enemies = detector.detect_enemies()
nearest = detector.get_nearest_enemy()

# 物品检测
items = detector.detect_items()

# 房间状态
room_info = detector.get_room_info()
is_clear = detector.is_room_clear()

# 游戏状态
state = detector.detect_game_state()

DNF 状态机 (DNFStateMachine)

from src.dnf import DNFStateMachine, DNFState

state_machine = DNFStateMachine(DNFState.IN_TOWN)

# 注册回调
state_machine.register_on_enter(DNFState.IN_BATTLE, on_battle_start)
state_machine.register_on_enter(DNFState.ROOM_CLEAR, on_room_clear)

# 状态检查
state_machine.is_in_town()
state_machine.is_in_battle()
state_machine.is_room_clear()

# 副本数据
state_machine.enter_dungeon(total_rooms=8)
state_machine.enter_room(room_number=1)
state_machine.clear_room()

DNF 自动化机器人 (DNFBot)

from src.dnf import DNFBot, DNFConfig

# 配置
config = DNFConfig()
config.set_skill_priority(["skill_a", "skill_s", "skill_d", "skill_f"])
config.set_skill_cooldown("skill_a", 5.0)

# 创建机器人
bot = DNFBot(config=config, templates_dir="templates/dnf")

# 设置回调
bot.on_battle_start(lambda: print("战斗开始"))
bot.on_room_clear(lambda: print("房间清理完成"))
bot.on_dungeon_complete(lambda: print("副本完成"))

# 运行
bot.run()

# 查看统计
bot.print_stats()

完整 DNF 刷图示例

from src.dnf import DNFBot, DNFConfig

# 1. 创建配置
config = DNFConfig()

# 2. 设置技能优先级
config.set_skill_priority([
    "skill_a",  # 一觉主动
    "skill_s",  # 大技能
    "skill_d",  # 中技能
    "skill_f",  # 小技能
])

# 3. 设置技能冷却
config.set_skill_cooldown("skill_a", 60.0)
config.set_skill_cooldown("skill_s", 15.0)
config.set_skill_cooldown("skill_d", 10.0)
config.set_skill_cooldown("skill_f", 5.0)

# 4. 自动吃药设置
config.auto_potion_hp_threshold = 0.4  # 血量<40%吃药
config.auto_potion_mp_threshold = 0.3  # 蓝量<30%吃药

# 5. 创建并运行机器人
bot = DNFBot(config=config)
bot.run()

模板图像

为了更好的识别效果,请在 templates/ 目录下添加以下模板图像:

templates/
├── enemy/              # 敌人模板
│   ├── monster_1.png
│   └── boss.png
├── items/              # 物品模板
│   ├── gold.png
│   └── equipment.png
├── ui/                 # UI元素模板
│   ├── room_clear.png
│   ├── dungeon_select.png
│   ├── result_screen.png
│   └── loading.png
└── town/               # 城镇模板
    └── town_indicator.png

注意事项

  • ⚠️ 请合理使用,遵守游戏用户协议
  • ⚠️ 本框架仅供学习和研究使用
  • ⚠️ 使用自动化工具可能导致账号被封禁
  • ⚠️ DNF 有反外挂检测,请谨慎使用

License

MIT License

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages