影刀RPA自动玩游戏之别踩白块【收集想法】
评论
收藏

影刀RPA自动玩游戏之别踩白块【收集想法】

经验分享
x
xxzw
2024-05-16 23:24·浏览量:1510
x
xxzw
发布于 2024-05-16 23:241510浏览

   这个原帖在这呢?

    https://www.yingdao.com/community/detaildiscuss?id=30e6a26a-a892-4939-b73c-2bd2b9b0194a

开发需求:

   使用影刀RPA软件,编写程序来玩别踩白块儿游戏。你的任务是通过影刀RPA来自动完成游戏并尽可能用时最短。

   游戏页面: https://gq-orange.github.io/htmlgame/index.html

想法收集:

1. 普通版——使用纯可视化流程完成

    在可视化流程中,键盘输入指令的按键输入间隙不能设置为0,此时可以直接去更改源码,将对应的方法中的参数改为0即可。

2. MD5版

   这一版其实是通过图片的MD5值来判断按下哪一个键,在本开发中,有三种情况【白白黑】,【白黑白】,【黑白白】,然后通过下面截图方式获取图片,计算图片MD5值,然后根据MD5判断压下哪一个键。

  注意:MD5值可能不止3个,原因是第一次时,有文字,会导致截取的图片不一样。

3. Python——踏实版

    其实影刀可是化流程最后都是转为Python代码执行的,简化了开发,但却牺牲了运行时间,因此可以直接使用python代码来完成开发,可以加快速度。

from xbot import web, win32


def main(args):
    page = web.get(url='https://gq-orange.github.io/htmlgame/index.html', mode="chrome")
    for i in range(13):
        elems = page.find_all_by_xpath("//div[contains(@style, '(0, 0, 0)')]")
        keys = ['jkl'[int(elem.get_attribute('id')[-1])] for elem in elems][::-1]
        win32.send_keys(keys=''.join(keys), delay_after=0, send_key_delay=0)

4. Python——Lambda表达式版

  (lambda web =  xbot.web.get(url="https://gq-orange.github.io/htmlgame/index.html", mode='chrome'): (web.activate(),[xbot.win32.send_keys("J" if "0, 0, 0" in  web.find_by_xpath(r"//*[@id='block-3-0']").get_attribute('style') else "K" if "0, 0, 0" in  web.find_by_xpath(r"//*[@id='block-3-1']").get_attribute('style') else "L", send_key_delay=0, delay_after=0) for _ in range(51)]))()

5. JS代码——踏实版

   执行JS代码,用JS代码执行压下按键操作,速度会更快

function (element, input) {
    for(i=0; i<=50; i++) {
        var element=document.querySelector('.block[id*="-3-"][style*="0, 0, 0"]');
        var id=element.id;
        var key='JKL'[id[id.length-1]];
        pressKey(key);
    }
    function pressKey(key) {
        let pressEvent = new KeyboardEvent('keydown', {
            key: key,
            keyCode: key.charCodeAt(0)
        });
        document.dispatchEvent(pressEvent);
    }
}

改进

function (element, input){
  for(i=0;i<=50;i++){
    document.dispatchEvent(new KeyboardEvent('keydown', {keyCode: 'JKL'[document.querySelector('*[id*="-3-"][style*="0, 0, 0"]').id[8]].charCodeAt(0)}));

}

}

6. JS代码——一步通天版

   在浏览器压下F12,打开开发者工具,可以分析游戏实现的源代码,发现fre整数变量用来存放分数,board数组变量用来进行黑白块的渲染,0值代表白块,1值代表黑块,当fre=50时,isgameover()函数中判断游戏成功,弹出游戏成功面板。

   现在可以直接将fre改为50,然后条用isgameover()函数即可

function (element, input) {
    // 在此处编写您的Javascript代码
    // element表示选择的操作目标(HTML元素)
    // input表示输入的参数(字符串)
    fre=50
    isgameover()
}

   注意:本方法是有限制的

   》变量必须是全局变量,也就是用var声明的变量,否则不能使用

   》有浏览器限制,影刀浏览器可以成功,edge,google浏览器有安全机制,变量不能使用,会报错

7. JS代码——改值版

    在方法5中,获取按哪一个键也是需要时间的,这儿,我们可以将board二维数组的最后一行的某一个值设置为1,这样,就可以一直按下一个键即可,可以节约一些时间。

function (element, input) {
    for(i=0; i<=50; i++) {
        board[3][0]=1
        pressKey('J');
    }
    function pressKey(key) {
        let pressEvent = new KeyboardEvent('keydown', {
            key: key,
            keyCode: key.charCodeAt(0)
        });
        document.dispatchEvent(pressEvent);
    }
}

   

收藏1
全部评论1
最新
发布评论
评论