怎么写一个小游戏自动看广告、跳过广告、合成类游戏。

HAMI_8756062473 · 3 天前

回答

Hamibot AI
1
· 3 天前

编写小游戏自动化脚本(自动看广告、跳过广告、合成玩法)需要结合 Hamibot 的 UI 控件识别与图像识别能力。由于广告 SDK 和游戏渲染方式差异较大,脚本需采用模块化设计并预留适配空间。以下为可直接运行的基础框架与实现指南。

// 文档地址 https://docs.hamibot.com/
auto.waitFor();

// 配置参数
var AD_WATCH_TIMEOUT = 30000;
var SKIP_KEYWORDS = ["跳过", "关闭", "X", "跳过广告", "跳过视频"];
var WATCH_KEYWORDS = ["观看广告", "看视频领奖励", "免费获取", "看广告"];
var GAME_CLICK_INTERVAL = 800;

// 主循环
while (true) {
    try {
        handleAds();
        playMergeGame();
        sleep(2000);
    } catch (e) {
        log("运行异常: " + e);
        sleep(3000);
    }
}

// 广告处理模块
function handleAds() {
    // 1. 优先尝试跳过
    for (var i = 0; i < SKIP_KEYWORDS.length; i++) {
        var btn = text(SKIP_KEYWORDS[i]).findOne(800);
        if (btn) {
            log("检测到跳过按钮");
            btn.click();
            sleep(1500);
            return;
        }
    }

    // 2. 尝试触发观看广告
    for (var j = 0; j < WATCH_KEYWORDS.length; j++) {
        var btn = text(WATCH_KEYWORDS[j]).findOne(800);
        if (btn) {
            log("触发观看广告");
            btn.click();
            waitForAdEnd();
            return;
        }
    }
}

// 等待广告结束
function waitForAdEnd() {
    var start = new Date().getTime();
    while (new Date().getTime() - start < AD_WATCH_TIMEOUT) {
        var closeBtn = text("关闭").findOne(500);
        if (closeBtn) {
            closeBtn.click();
            log("广告结束");
            return;
        }
        sleep(1000);
    }
    log("广告超时,返回上一页");
    back();
}

// 合成类游戏模块
function playMergeGame() {
    // 合成类游戏多使用 Canvas 或自定义 View,UI 树通常无法获取元素
    // 方案 A:固定坐标点击(需根据设备分辨率适配)
    var centerX = device.width / 2;
    var centerY = device.height * 0.6;
    click(centerX, centerY);
    sleep(GAME_CLICK_INTERVAL);

    // 方案 B:图像识别(推荐)
    // var target = images.read("./merge_target.png");
    // var point = images.matchTemplate(captureScreen(), target, { threshold: 0.8 }).point;
    // if (point) { click(point.x, point.y); }
}

关键实现说明

  1. 跳过/观看广告:广告按钮文案因 SDK 而异。脚本通过遍历常见关键词匹配 text() 控件,找到后点击并等待。若广告无明确控件,可改用 desc()id() 匹配。
  2. 广告结束检测:采用轮询检测“关闭”按钮或超时机制。部分广告会直接返回游戏界面,可结合 currentActivity() 判断是否已切回主界面。
  3. 合成类游戏自动化
    • 若游戏使用原生控件,可直接用 text()/id() 定位格子并点击。
    • 若为 Canvas 渲染(绝大多数合成游戏),需使用 images 模块进行模板匹配或颜色定位。建议先截取目标格子图片,使用 images.matchTemplate() 获取坐标后点击。
    • 坐标方案需配合 device.width/device.height 做比例换算,避免不同分辨率失效。

稳定性与最佳实践

  • 随机延迟:在 sleep() 中加入随机值(如 sleep(500 + random(0, 300)))降低风控触发概率。
  • 异常恢复:主循环包裹 try...catch,超时或卡死时调用 back()home() 重置状态。
  • 权限要求:确保已开启无障碍服务、悬浮窗权限(用于截图识别)及后台运行权限。
  • 调试工具:使用 Hamibot 客户端的“布局分析”查看控件属性;使用“截图分析”获取图像识别阈值。

适配建议

不同游戏与广告联盟的 UI 结构差异较大。首次运行前,建议:

  1. 打开目标游戏,使用 Hamibot 布局分析器记录广告按钮的 text/desc/id
  2. 对合成界面截图,提取关键格子的颜色特征或模板图片。
  3. 将实际特征替换到脚本的关键词数组或图像识别逻辑中。

如需针对具体游戏提供控件定位策略或图像识别参数调优方法,可提供游戏名称或界面截图特征,我将给出精确的适配代码。

ℹ️ 内容由 AI 生成,可能不准确,请注意核实