最近在玩热血传奇1.76金币版的游戏。这款游戏升级慢,爆率低,打钱慢。适合我这种养老玩家。游戏有个内挂,可以自动挂机。这个挂机功能非常水,只能自己跑到挂机地图,在地图上选好几个点,让人物边跑边打怪。不能自动回城买药,也不能自动卖装备。
后来在游戏里瞎逛时候,发现一个野外地图。地图大,怪物等级低,刷新适中。里面的怪会爆500金币一瓶的药水,爆率还不低。更重要的是地图中就有NPC,可以把药水卖掉,不用回城。因此,萌生了使用按键精灵,自动挂机,自动卖物品的想法。再转念一想,咱是程序员啊,干嘛不自己动手写一个按键精灵。功能满足需要就可以了,不用做的很复杂。说干就干。。。
需求非常简单: 自动挂机检药水;药水检满后,走到NPC卖出药水;卖完药水后继续自动挂机。因为怪物等级低,装备不用考虑。
既然要模拟按键精灵,那么java必须支持键盘和鼠标的操作,基本操作如下
package com.analog.tools;
import java.awt.AWTException;
import java.awt.Color;
import java.awt.MouseInfo;
import java.awt.Point;
import java.awt.Robot;
import java.awt.event.InputEvent;
public class CommonUtil {
private static final int DEFAULT_DELAY = 50;
private static Robot robot ;
static {
try {
robot = new Robot();
} catch (AWTException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 获取鼠标当前位置坐标
* @return
*/
public static Point getCurrentMousePoint(){
Point point= MouseInfo.getPointerInfo().getLocation();
return point;
}
/**
* 获取坐标点对应的屏幕颜色
* @return
*/
public static Color getPointColor(Point point){
Color color = robot.getPixelColor(point.x, point.y);
return color;
}
/**
* 获取坐标点对应的屏幕颜色
* @return
*/
public static Color getPointColor(int x, int y){
Color color = robot.getPixelColor(x, y);
return color;
}
/**
* 移动鼠标到指定坐标
* @return
*/
public static void moveToXY(int x, int y){
robot.mouseMove(x, y);
}
/**
* 单击鼠标
* @return
*/
public static void clickMouse(){
robot.mousePress(InputEvent.BUTTON1_MASK);
delay(DEFAULT_DELAY);
robot.mouseRelease(InputEvent.BUTTON1_MASK);
}
/**
* 双击鼠标
* @return
*/
public static void dobuleCiickMouse(){
clickMouse();
delay(DEFAULT_DELAY);
clickMouse();
}
/**
* 按下键盘上一个按键
* @return
*/
public static void pressOneKey(int key){
robot.keyPress(key);
delay(DEFAULT_DELAY);
robot.keyRelease(key);
}
/**
* 移到指定点,单击一下
* @return
*/
public static void moveToXYAndClick(int x, int y){
moveToXY(x, y);
delay(50);
clickMouse();
}
/**
* 按下键盘上组合按键
* @return
*/
public static void pressKeys(int[] keys){
for (int i = 0; i < keys.length; i++) {
robot.keyPress(keys[i]);
}
delay(DEFAULT_DELAY);
for (int i = keys.length - 1; i >= 0; i--) {
robot.keyRelease(keys[i]);
}
}
/**
* 延迟 单位:毫秒
* @param delay
*/
public static void delay(int delay) {
robot.delay(delay);
}
/**
* 随机延迟 单位:毫秒
* @param delay
*/
public static void delayByRandom(int baseDelay, int range) {
int random = (int) (Math.random() * range) + 1;
int delay = baseDelay + (random - range / 2); //上下浮空
robot.delay(delay);
}
}
可以到Java可以完美模拟键盘和鼠标。鼠标右键功能我没写,因为我的游戏用不到。后面我会把需求细化,然后根据需求开发相应的代码。最后说一下,这个功能我是自己用的,怎么方便怎么来,肯定是很粗糙的,请各位多多包涵!!!