php使用adb自動刷王者農藥金幣 (冒險模式)

lyxxxh發表於2021-02-28

準備工作

下載adb

https://adbdriver.com/

然後設定全域性變數。

開啟開發者模式

我是用 雷電模擬器 的。
步驟是 設定 -> 點選 關於平板電腦 開啟開發者模式 -> 進入開發者模式 -> 勾選 usb除錯
總之把 ubs除錯 開啟了就可以了。

複製程式碼儲存成檔案

<?php


// 王者農藥
class Wzny 
{

    // 長寬  就是手機畫素
    protected $w,$h;
    protected $next_x,$next_y; // 下一步xy
    protected $start_x,$start_y; // 闖關xy    
    protected $sure_x,$sure_y; // 確定xy
    protected $auto_x,$auto_y; // 自動xy
    protected $again_x,$again_y; // 再次挑戰xy
    protected $back_x,$back_y; // 返回xy
    protected $core_x,$core_y; // 中心xy
    protected $device; // // 那個裝置
    public function __construct($w,$h,$device)
    {
        $this->device = $device; 
        $this->w = $w;
        $this->h = $h;
        $this->next_x = $w * .74786;
        $this->next_y = $h * .87962;

        $this->start_x = $w * .76923;
        $this->start_y = $h * .83333;

        $this->sure_x = $w * .91025;
        $this->sure_y = $h * .9166666;

        $this->auto_x = $w * .94017;
        $this->auto_y = $h * .138888;

        $this->again_x = $w * .8547;
        $this->again_y = $h * .916666;

        $this->back_x = $w * .69017;
        $this->back_y = $h * .916666;

        $this->core_x = $w * .5;
        $this->core_y = $h * .5;



    }

    // 列印xy座標
    public function printfXy()
    {
        $str = "{$this->w}x{$this->h}的座標\n";
        $str .=  sprintf("下一步:%d %d\n",$this->next_x,$this->next_y);
        $str .=  sprintf("闖關:%d %d\n",$this->start_x,$this->start_y);
        $str .=  sprintf("確定:%d %d\n",$this->sure_x,$this->sure_y);
        $str .=  sprintf("自動:%d %d\n",$this->auto_x,$this->auto_y);    
        $str .=  sprintf("再次挑戰:%d %d\n",$this->again_x,$this->again_y);    
        $str .=  sprintf("返回:%d %d\n",$this->back_x,$this->back_y);    
        $str .=  sprintf("中心:%d %d\n",$this->core_x,$this->core_y);    
        echo $str;
    }


    // 開始刷金幣 $num 代表次數
    public function start()
    {
        // 闖關
        $this->click_screen($this->start_x,$this->start_y);

        // 睡20秒
        sleep(20); 

        // 點選螢幕中心 防止是繼續的
        $this->click_screen($this->core_x,$this->core_y);

        // 再次挑戰
        $this->click_screen($this->again_x,$this->again_y);

        // 闖關
        $this->click_screen($this->start_x,$this->start_y);

        sleep(2);
        // 重新再點選 點錯位置也無所謂
        $this->start();
    }



    // 使用adb點選xy座標
    public function click_screen($x,$y)
    {
        system("adb -s {$this->device} shell input tap {$x} {$y}");
        echo "正在點選 {$x} {$y} \n";
    }


}

// 如: 960 540 emulator-5554
//  傳遞解析度 和 adb的裝置名稱
$wzny1 = new Wzny($argv[1],$argv[2],$argv[3]);
$wzny1->printfXy();
$wzny1->start();

開啟adb

adb devices 可以看到一臺裝置。

php使用adb自動刷王者榮耀金幣 (冒險模式)

開啟闖關頁面

php使用adb自動刷王者榮耀金幣 (冒險模式)

php使用adb自動刷王者榮耀金幣 (冒險模式)

檢視下自己的 解析度

php wzny.php 高 寬 裝置名稱

php使用adb自動刷王者榮耀金幣 (冒險模式)

總結

這個刷金幣好慢,沒怎麼看,一局好像才22金幣,(困難模式的)。

php使用adb自動刷王者榮耀金幣 (冒險模式)

比如這些名字,完全是 adb 做的嘛。
只要是個語言,都可以呼叫外部系統命令。
c語言指令碼開發, 王者農藥自動...

解析度計算按鈕xy座標

我先用我手機測試
2340 * 1080 畫素

php使用adb自動刷王者榮耀金幣 (冒險模式)

比如 下一步 按鈕,我的手機位置在 x:1750 y:950 方向。
高: 2340 / 1750 = 0.74786
寬: 1080 / 950 = 0.87962

如果在 960 * 540的手機,那麼 下一步 按鈕所在 xy:
x位置: 960 * 0.74786 = 717
y位置: 540 * 0.87962 = 474

本作品採用《CC 協議》,轉載必須註明作者和本文連結
專心學習不瞎搞

相關文章