Java实现GTA5自动抽车,提高中奖概率

Java实现GTA5自动抽车,提高中奖概率

GTA5转盘抽奖,最近的奖品是暴君1,笔者很是心动,GTA5萌新的我很想要,所以就写了一个自动抽奖的工具,下载地址:https://github.com/Lmh-java/AutoGTA5Lottery

代码编写

思路

检测键盘输入,当按下enter时延迟6000ms(根据B站up主:江浙沪网戒中心给的数据来的:之后按下s开始旋转,有很大几率就会中奖了。

笔者开始写的时候,想到用python,但是64位的pyhook安装起来实在不友好,又想去用C#,但是C#也需要win API,想来想去还是选用了java。

开始编写

1.快速用myeclipse建立一个java SE项目
2.当我们运行游戏的时候,java程序就会失去焦点,所以键盘监听就会失效。得出的结论是不能用java自带的监听器进行监听。
在网上查询资料发现,需要用java和C联合开发,但是C笔者不是很擅长。但是笔者找到了第三方的java库,支持全局监听,叫做***jintellitype-1.3.9.jar ***
下载地址: download.youkuaiyun.com/download/Lmh_java/12135240

3.使用Robot类模拟键盘输入,具体如下

try {
			robot = new Robot();//此句会抛出异常
			robot.keyPress(KeyEvent.VK_S);//此句不需要try catch
			robot.delay(20);//此句不需要try catch
			robot.keyRelease(KeyEvent.VK_S);//此句不需要try catch
		}  catch (AWTException e) {
			e.printStackTrace();
		}

可以看到keyPress方法模拟键盘按下,keyRelease模拟键盘松手,一按一松就构成了一次点击键盘

热键接收代码:

	//注册热键
	JIntellitype.getInstance().registerHotKey(GLOBAL_HOT_KEY_1, 0, 13);
	//用内部类来对监听器事件作出反应
	JIntellitype.getInstance().addHotKeyListener(new HotkeyListener() {
			public void onHotKey(int markCode) {
				if (markCode == GLOBAL_HOT_KEY_1) {
				  	//你要做的事情
					System.out.println("开始计时");
				}
			}
		});

但是我们经过测试会发现这样会导致程序可以接收到热键按下,然而gta5却不能再同时作出反应。可以理解为enter按下事件被java程序拦截了,所以我们还要再模拟一次点击enter。
4.总体代码
Main.java


import com.melloware.jintellitype.HotkeyListener;
import com.melloware.jintellitype.JIntellitype;

public class Main {
	private static final int GLOBAL_HOT_KEY_1 = 1;
	private static boolean isKeydown = false;

	public static void main(String[] args) {
		JIntellitype.getInstance().registerHotKey(GLOBAL_HOT_KEY_1, 0, 13);
		JIntellitype.getInstance().addHotKeyListener(new HotkeyListener() {
			public void onHotKey(int markCode) {
				if (markCode == GLOBAL_HOT_KEY_1 && isKeydown == false) {
					new KeyboardTask().start();
					JIntellitype.getInstance().unregisterHotKey(GLOBAL_HOT_KEY_1);
					isKeydown = true;
					System.out.println("开始计时");
				}
			}
		});
	}
}

KeyboardTask.java

import java.awt.AWTException;
import java.awt.Robot;
import java.awt.event.KeyEvent;

import com.melloware.jintellitype.JIntellitype;

public class KeyboardTask extends Thread {
	private Robot robot = null;

	public void run() {

		try {
			robot = new Robot();
			robot.keyPress(KeyEvent.VK_ENTER);
			robot.delay(20);
			robot.keyRelease(KeyEvent.VK_ENTER);
			Thread.sleep(7600);
		} catch (InterruptedException e) {
			e.printStackTrace();
		} catch (AWTException e) {
			e.printStackTrace();
		}
		System.out.println("计时结束");

		robot.keyPress(KeyEvent.VK_S);
		robot.delay(10);
		robot.keyRelease(KeyEvent.VK_S);

		JIntellitype.getInstance().cleanUp();
	}
}

最后提醒大家一点,热键注册完之后一定要销毁,不然用几次就会报错。
两个dll文件一定要新建一个包单独存放,不然会报找不到dll的错误。包名一定要为com.melloware.jintellitype,程序只会在这里寻找dll库

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值