火影忍者手游的自动化玩法思路(适合其他养成类游戏)

作为一个编程人员,不论是花费时间还是money去玩一款养成类手游,都不是值得骄傲的事情。

利用闲暇时间,让电脑来完成这类的重复性工作,也是一个不错的选择;下面普及一下思路。

需要提前准备:

1.JDK1.8+MAVEN

2.Android模拟器(我用的是夜神)

3.mousexy(小工具:鼠标在屏幕上的位置坐标)

4.TESSERACT-OCR

前两个我们都很熟悉,第4个是图像识别技术的Java实现。接下来,就可以实现在游戏中自动的做任务啦。

简单说明一下思路:

1.打开安卓模拟器,下载打开游戏后,通过mousexy选取点坐标;

2.通过类Robot,来实现对于鼠标的click;

3.同样可以操作使用Robot类来操作键盘上的按键,实现角斗场的击打,技能等动作;

4.通过TESSERACT-OCR来确定当前属于哪一个界面状态,进而采取哪一个操作方案。

涉及到的技术点:

1)通过Java实现选点截屏:

BufferedImage bImage = robot.createScreenCapture(new Rectangle(x, y, width, height));

2)图像识别(作为‘开关’的作用),实为拼接cmd命令执行,并非Java提供了相应的API:

/*设置输出文件的保存的文件目录*/
File outputFile = new File(imageFile.getParentFile(), "output");
StringBuffer strB = new StringBuffer();
List<String> cmd = new ArrayList<String>();
/*tesseract的安装路径*/
cmd.add(tessPath + "\\tesseract");
cmd.add("");
cmd.add(outputFile.getName());
cmd.add(LANG_OPTION);
/*利用简体中文字典*/
cmd.add("chi_sim");
ProcessBuilder pb = new ProcessBuilder();
pb.directory(imageFile.getParentFile());
cmd.set(1, imageFile.getName());
pb.command(cmd);
pb.redirectErrorStream(true);
/*执行cmd*/
Process process = pb.start();
                    

3)多线程 - 角斗场

package demo.scene;

import demo.thread.DoThread;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;

import static demo.utils.BooleanExp.*;
import static demo.utils.MouseKvUtils.kvPressOne;
import static demo.utils.MouseKvUtils.mousePressOne;
import static java.awt.event.KeyEvent.*;

public class ArenaScene {

    public static final Logger logger = LoggerFactory.getLogger(ArenaScene.class);

    public static void battle(){
        /*等待角斗场加载10s*/
        stop(10000);

        //创建线程池
        ScheduledExecutorService executor = Executors.newScheduledThreadPool(5);

        //奥义 - I//密卷 - N//通灵 - M//2s
        Thread thread1 = new DoThread(2000,() -> {  logger.info("释放奥义/密卷/替身");kvPressOne(VK_I);kvPressOne(VK_N);kvPressOne(VK_M); });

        //一技能 - J//二技能 - U//替身 - H//4s
        Thread thread2 = new DoThread(4000,() -> { logger.info("释放技能");kvPressOne(VK_J);kvPressOne(VK_U);kvPressOne(VK_H); });

        //普攻//0.2s
        Thread hit = new DoThread(200,() -> { logger.info("攻击...");kvPressOne(VK_K); });

        executor.execute(thread1);
        executor.execute(thread2);
        executor.execute(hit);

        //由进程负责监听 20s截屏校验确定一次状态
        while (true){
            stop(20000);
            if(isJBPage()) break;
            if(isRZDSPage()) break;
            //进入大蛇丸试炼 - 单独处理
            if(isDSWGZPage() || isDSWZBJXPage()){
                //结束各线程动作
                executorIsOver(executor);
                //等待30s
                stop(30000);
                //点击返回
                mousePressOne(134,689);
                break;
            }
        }
        executorIsOver(executor);
    }
}

源码地址:https://github.com/top37/mineroot/tree/master/mytest-robot

===========================

后记:

关于以上提到的mousexy和TESSERACT-OCR两款软件,网上即可下载;若嫌麻烦或者有需要改进之处,可以加我微信,欢迎指正。

 

posted @ 2018-09-14 15:41  单强  阅读(931)  评论(1编辑  收藏  举报