黑马程序员技术交流社区

标题: 地下城与勇士 连发实现方式 非水(实用) [打印本页]

作者: 张益达    时间: 2014-6-29 23:17
标题: 地下城与勇士 连发实现方式 非水(实用)
本帖最后由 张益达 于 2014-7-2 15:10 编辑

上次益达发了一个删除地下城补丁的IO流之后 。现在益达需要连发了 ,所以老规矩 自己动手 丰衣足食 。用别人的不放心 (万一贼人下毒呢。)
什么是连发呢  就是 每当你按下攻击键以后 你按住不放 程序会一直调用攻击键 ,除了省事 还有就是心理爽  = = 。
不说废话 现在开始  
思路是     让系统在键盘按下X的时候就开始捕捉,捕捉到以后  在抬起之前一调用攻击键(益达在游戏中的攻击键是X)但是这有个前提 是要求在任何窗口下,要兼容所有的游戏嘛而且每个人 没个游戏的攻击键很有可能会不一样的伐。因为是全局的所以是没有办法用键盘事件绑定的 绑定的时间一旦没有激活窗口就会失去作用  但是如果要是激活着窗口 那游戏怎么办 擦 = = 。   这就涉及到一个键盘钩子的概念  对于钩子不懂的童鞋自行百度  每一种系统 调用一个输入按键的方式并不一样 所以  要配合examples.jar和JNI    jar包已经打好 随后会放在附近里 大家自行下载查阅= = 。因为主要是为了激发大家的兴趣  就仅仅解释关键的连发实现要点了= = 。
首先要做到   使用程序的人在任何时候   及时同时开着一百个程序也能在按下X的时候 调用自己写的代码   
代码如下
  1.         KBHook keyboy = KBHook.getInstance();
  2.                 keyboy.addKBListener(new KeyBoardListener() {
  3.                         public void acceptEvent(KBEvent e) {
  4.                                 System.out.println(e.keyCode == KeyEvent.VK_X);
  5.                         }
  6.                 });
  7.                 keyboy.install();
复制代码
怎么 代码很简单吧 这段代码  是实现是否X被按下的关键奥= =。只要程序开着 每当按下之后 都会捕捉当前按下的ascii码   x的是88   让按下之后在让他模拟攻击键去不停的猛击 抬起则停下  就要将System.out.println(e.keyCode == KeyEvent.VK_X);改为如下
  1.                 public void acceptEvent(KBEvent e) {
  2.                                 if(e.keyCode == KeyEvent.VK_X){
  3.                                         if(e.state == KeyEvent.VK_ALL_CANDIDATES){
  4.                                                 //按下状态以后要不停的猛击
  5.                                                 DownX.type(KeyEvent.VK_X);
  6.                                         }
  7.                                         if(e.state == KeyEvent.VK_PREVIOUS_CANDIDATE){
  8.                                                 //抬起状态则不在猛击
  9.                                                 DownX.release(KeyEvent.VK_X);
  10.                                         }
  11.                                 }
  12.                                 System.out.println(e.keyCode == KeyEvent.VK_X);
  13.                         }
复制代码





嗯 来一张图  以示清白
代码附上 大家请多多指教 技术分已经凑够数了  还是要点黑币吧   还望版主加精= = ..




20140629231239.png (344.31 KB, 下载次数: 2)

以示清白图

以示清白图

Test.rar

18.81 KB, 下载次数: 126

连发代码


作者: 张益达    时间: 2014-6-29 23:30
这都没人屌我  。。。。。。。。。。。。。。。。。   哎
作者: 张益达    时间: 2014-6-29 23:38
本帖最后由 张益达 于 2014-6-30 01:03 编辑

不过  益达就是喜欢能直接用在生活中的程序     = =
作者: huanglyhf    时间: 2014-6-30 09:14
小白一个,还不懂。视频才看到面对象!
作者: 郑飞    时间: 2014-6-30 14:51
路过......
作者: 天,殇心    时间: 2014-6-30 22:08
我也玩地下城,那连发不会是你做的吧??
作者: 卞新浩    时间: 2014-6-30 22:15
掉渣天   我以前也玩过这个游戏 没自己写过连发




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2