本文主要是介绍“灯笼高高挂”助手,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
再次献丑。
之前写过一个“穿越福城”助手,感觉是个大失败…参数很难调,稳定性也非常差,不想改进了。然而第二个小游戏好白痴…不打算给它写助手了,就写第三个的吧。
这个“灯笼高高挂”就比较好做了,参数用对了之后,只要不手动停下来,它就永远都不会输。跑到六百多就不想跑了。
主要思想:
先写一个能算周期的程序跑一会儿,能够发现,在最好的情况下(掉下来的房子大小不变),前7个房子的周期都是3s,随后4个是2.6s,随后5个是2s,随后6个是1.6s,剩下的都是1s的。因此估算出下一次房子变成最大的时刻,提前一定时间按下去就好了。注意1s的比较快,要提前得多一点。
如果你想自己尝试一下下面的代码,记得先修改LEFT_X等坐标范围的参数。底下的0.94和0.88根据自己的电脑情况改。鼠标要放在游戏界面里。
刷分一时爽,一直刷分一直爽
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;public class Assistant
{final int LEFT_X = 93, LEFT_Y = 198, RIGHT_X = 264, RIGHT_Y = 217; // 游戏界面的位置,我习惯把它放在电脑屏幕的左侧final int HOUSE_R = 109, HOUSE_G = 63, HOUSE_B = 56; // 房子墙壁最右侧的颜色BufferedImage screenCut; // 游戏截图void getScreenCut() throws AWTException // 截图{Robot robot = new Robot();screenCut = robot.createScreenCapture(new Rectangle(LEFT_X, LEFT_Y, RIGHT_X-LEFT_X, RIGHT_Y-LEFT_Y));}void alwaysGetRGB() throws AWTException, InterruptedException // 最终程序用不到。写程序时用来取颜色,是一个不断显示鼠标指向位置RGB值的死循环{for(;true;){Thread.sleep(100);Robot robot = new Robot();BufferedImage screenCut = robot.createScreenCapture(new Rectangle(0, 0, 2000, 1000));Point point = MouseInfo.getPointerInfo().getLocation();int x = point.x, y = point.y;int RGB = screenCut.getRGB(x, y);int B = RGB & 0xFF, G = RGB >> 8 & 0xFF, R = RGB >> 16 & 0xFF; System.out.println(x + ", " + y + " : " + R + " " + G + " " + B);}}boolean equalRGB(int R1, int G1, int B1, int R2, int G2, int B2) // 容许误差的RGB相等{return Math.abs(R1-R2) + Math.abs(B1-B2) + Math.abs(G1-G2) < 30;}boolean testRGB(int SIDE_X, int SIDE_Y){int RGB = screenCut.getRGB(SIDE_X - LEFT_X, SIDE_Y - LEFT_Y);int B = RGB & 0xFF, G = RGB >> 8 & 0xFF, R = RGB >> 16 & 0xFF;return equalRGB(R, G, B, HOUSE_R, HOUSE_G, HOUSE_B);}void pressAfter(double _time) throws InterruptedException, AWTException // 一定时间后按下鼠标{int time = (int)_time;Robot robot = new Robot();Thread.sleep(time-10);robot.mousePress(InputEvent.BUTTON1_DOWN_MASK);Thread.sleep(50);robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);Thread.sleep(1000);}Assistant(){try{int no = 0;while(true){getScreenCut();if(!testRGB(262, 199) && !testRGB(262, 216)&& !testRGB( 94, 199) && !testRGB( 94, 216)) continue; // 提高灵敏度++no;System.out.println(no);if(no <= 7) pressAfter(3000 * 0.94);else if(no <= 11) pressAfter(2600 * 0.94);else if(no <= 16) pressAfter(2000 * 0.94);else if(no <= 22) pressAfter(1600 * 0.94);else pressAfter(1000 * 0.88);}}catch(Exception e){System.out.println(e);}}public static void main(String[] args){ new Assistant();}}
这篇关于“灯笼高高挂”助手的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!