最近闲来无事在家躺平,玩儿起了一款腾讯的游戏,发现里面一款生活小技能-钓鱼,非常的机械化和重复,于是想到可否实现模拟按键来替换人工完成这个操作。
想来便动手了,之前工作所用java语言较为擅长一点,就决定采用这个语言来实现,java语言所提供的java.awt.robot对象可以方便的实现简单的模拟按键和点击操作。于是开始考虑编码;
需要考虑的方面:出杆鼠标必须对准水面,水面在不同钓鱼点位置不均衡,所以必须做到可以配置,钓到鱼的反应会是屏幕中央出现感叹号,这个可以考虑获取屏幕中央像素颜色来判断,考虑自动化的程度,还应该加上生命气息的判断,和钓鱼装备工具的自动修理判断,最后还有30级钓鱼过后的撒网技能及其产生的小游戏(这个的产量非常大,不撒网的话产量会打对折)。
/**
* 钓鱼主流程
* @param mouseX 钓鱼点X坐标
* @param mouseY 钓鱼点Y坐标
*/
private void fish(int mouseX,int mouseY){
while (open) {
//初始化钓点次数
int count = NumberUtil.random(1, 4);
AtomicInteger x = new AtomicInteger(NumberUtil.random(mouseX-xRange,mouseX+xRange));
AtomicInteger y = new AtomicInteger(NumberUtil.random(mouseY-yRange,mouseY+yRange));
//检查活力
lifeHandle.handle(this::lifeOver,"生命气息检查");
IntStream.range(0, count).forEach(l -> {
//检查耐久
durableHandle.handle(this::fixTool,"工具耐久检查");
//拉网与否判断
castNet.handle(this::castNetGame,netOpen,"钓鱼小游戏开始与否判断",()->{
//开始钓鱼
begin(x.get(), y.get());
AtomicBoolean hit = new AtomicBoolean(true);
int n = 0;//循环计数
while (hit.get()) {
robot.delay(700);
n++;
colorHandle.handle(()->{
hit.set(false);
//收杆
pack();
},"钓鱼命中判断");
if(n>50){
hit.set(false);
}
}
});
});
}
}
这里贴上了主要流程的代码,整个程序代码还是比较简单的,调试多花点时间。为了防止被别有用心的坏人拿去利用,就贴剩余的一点代码了。个人还是很喜欢玩儿这款游戏的,也欢迎同样热爱的朋友一起来玩,欢迎私聊我