`
sunnymoon
  • 浏览: 89304 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

和Sun一起开源(武林外传游戏外挂Java源代码) - 论坛版

阅读更多

      以下是我在大三时,武林外传游戏还在公测时写的一个外挂,辅助玩游戏。以前在大学时用着很好用,和大家共享出来。希望有朋友能够进行重构,发布一些更好用的JAVA实现的外挂程序。

 

      由于这是本人的处女做,所以代码结构有些乱,但由于程序本身并不是很复杂,有心人是一定会看懂的,此外还有一些简单的注释。

 

      由于当时不会使用IDE,仅用记事本写的,所以写得比较辛苦,也花费了较长时间。希望对大家能够有所帮助。

 

package game;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.event.*;
import java.lang.*;
import java.io.*; 

//主类
public class Action
{
 static int TimeNumber=0;
 public static void main(String[] args)
 {
  ViewFlow vf=new ViewFlow();
  vf.addActionlistener();
  }
 }

 

  

package game;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.event.*;
import java.lang.*;
import java.io.*;


class MyActionListener2 implements ActionListener//核心类(实现主要功能)
 {
  static int ip=0;
  public void actionPerformed(ActionEvent e2)
  {
    try
    {
      Robot robot=new Robot();
     int x=73,y=23,
         x2=ViewFlow.slider1.getValue(),
             y2=23,
         x3=228,y3=26,
         x4=0,y4=0;
/*
int i=ViewFlow.slider1.getValue(),j=23,k=0;
    {
      try
      {
       Robot rb=new Robot();
       while(k<1)
         { 
          rb.mouseMove(i,j);
         rb.getPixelColor(i,j);
         System.out.print((k++)+": "+rb.getPixelColor(i,j)+": ");
         System.out.println("(i="+(i++)+",j="+j+");");
           }
          }
          catch(AWTException e3){}
    }
*/
   if(robot.getPixelColor(x,y).equals(new Color(255,75,53))&&MyActionListener2.ip==1)//自动打怪
         {
       robot.keyPress(KeyEvent.VK_5);//捡东西
          if(  robot.getPixelColor(x3,y3).equals(new Color(255,107,87))
                                                   ||robot.getPixelColor(x3,y3).equals(new Color(255,107,86)))
          {
           robot.keyPress(KeyEvent.VK_1);//技能1
           //robot.keyPress(KeyEvent.VK_2);//技能2
           //robot.keyPress(KeyEvent.VK_3);//技能3
           //robot.keyPress(KeyEvent.VK_4);//打怪1
           }
          else
          {
           robot.keyPress(KeyEvent.VK_TAB);
           robot.keyRelease(KeyEvent.VK_TAB);
           }
          }
          
          
              //System.out.println(MyActionListener.myTimer.getDelay());//改变加血速度测试
   if(!robot.getPixelColor(x,y).equals(new Color(255,75,53)))
   {
    ViewFlow.setText1("提示:请启动游戏");
    //System.out.println(ViewFlow.slider1.getValue());//测试1
    //System.out.println(ViewFlow.slider2.getValue());//测试2
    }                                        
   else if(  robot.getPixelColor(x2,y2).equals(new Color(255,75,53))       //加血位置与血的颜色相等
             ||robot.getPixelColor(x,y).equals(robot.getPixelColor(x2,y2))   //加血位置与指定的理想的血的位置的颜色相等
           /*
           ||robot.getPixelColor(x2,y2).equals(new Color(255,159,147))     //加血位置与指血的颜色1比较 
              ||robot.getPixelColor(x2,y2).equals(new Color(247,193,186))     //加血位置与指血的颜色2比较 
              ||robot.getPixelColor(x2,y2).equals(new Color(228,103,88))      //加血位置与指血的颜色3比较 
              ||robot.getPixelColor(x2,y2).equals(new Color(245,72,51))       //加血位置与指血的颜色4比较 
              ||robot.getPixelColor(x2,y2).equals(new Color(255,183,174))     //加血位置与指血的颜色5比较 
              ||robot.getPixelColor(x2,y2).equals(new Color(228,91,75))       //加血位置与指血的颜色6比较 
              ||robot.getPixelColor(x2,y2).equals(new Color(248,73,52))       //加血位置与指血的颜色7比较 
              ||robot.getPixelColor(x2,y2).equals(new Color(225,195,188))     //加血位置与指血的颜色8比较 
              ||robot.getPixelColor(x2,y2).equals(new Color(235,141,130))     //加血位置与指血的颜色9比较 
              ||robot.getPixelColor(x2,y2).equals(new Color(235,69,49))       //加血位置与指血的颜色10比较
              ||robot.getPixelColor(x2,y2).equals(new Color(239,154,144))     //加血位置与指血的颜色11比较
              */
           )
   {
    ViewFlow.setText1("不需加血");
    }
    
   else if(  robot.getPixelColor(x,y).equals(new Color(255,75,53))//加血
             &&!robot.getPixelColor(x,y).equals(robot.getPixelColor(x2,y2))
           )
    {
       robot.keyPress(KeyEvent.VK_F8);//加血的键位
       //ViewFlow.setText1("自动加血开始");   
       }
   
   }
    catch(AWTException eException1){}
   
   }
  
  }

 

 

   

package game;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.event.*;
import java.lang.*;
import java.io.*;

class MyActionListener3 implements ActionListener
   {
    public void actionPerformed(ActionEvent e3)
    {
       MyActionListener.myTimer.stop();
       ViewFlow.setText1("       外挂程序已停止");
     }
    }

 

 

 

   

package game;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.event.*;
import java.lang.*;
import java.io.*;

class MyActionListener4 implements ActionListener
    {
     public void actionPerformed(ActionEvent e7)
     {
       if(e7.getSource()==ViewFlow.helpMenuItem1)//打开使用帮助网页
       {
         try
        {
          Runtime.getRuntime().exec("\"C:\\Program  Files\\Internet  Explorer\\iexplore.exe\"http://blog.csdn.net/sunnyjavamoon/archive/2006/10/27/1352772.aspx");  
         }
         catch(IOException eIO){}
        }
       
       else if(e7.getSource()==ViewFlow.helpMenuItem2)//打开在线更新网页
       {
         try
        {
          Runtime.getRuntime().exec("\"C:\\Program  Files\\Internet  Explorer\\iexplore.exe\"http://blog.csdn.net/sunnyjavamoon/archive/2006/11/04/1366552.aspx");  
         }
         catch(IOException eIO){}
        }
        
       else if(e7.getSource()==ViewFlow.helpMenuItem3)//打开作者主页网页
       {
         try
        {
          Runtime.getRuntime().exec("\"C:\\Program  Files\\Internet  Explorer\\iexplore.exe\"http://blog.csdn.net/SunnyJavaMoon/");  
         }
         catch(IOException eIO){}
        }
       
       else if(e7.getSource()==ViewFlow.helpMenuItem4)//打开关于网页
       {
         try
        {
          Runtime.getRuntime().exec("\"C:\\Program  Files\\Internet  Explorer\\iexplore.exe\"http://blog.csdn.net/sunnyjavamoon/archive/2006/10/27/1352772.aspx");  
         }
         catch(IOException eIO){}
        }
        
       else if(e7.getSource()==ViewFlow.exchangeItem1)//论坛交流
       {
         try
        {
          Runtime.getRuntime().exec("\"C:\\Program  Files\\Internet  Explorer\\iexplore.exe\"http://vip3.getbbs.com/Board/TList.aspx?BID=5177");  
         }
         catch(IOException eIO){}
        }
       
       else if(e7.getSource()==ViewFlow.exchangeItem2)//论坛主页
       {
         try
        {
          Runtime.getRuntime().exec("\"C:\\Program  Files\\Internet  Explorer\\iexplore.exe\"http://ljf365.getbbs.com");  
         }
         catch(IOException eIO){}
        }
       else if(e7.getSource()==ViewFlow.jbt3)//论坛主页
       {
         try
        {
          Runtime.getRuntime().exec("\"C:\\Program  Files\\Internet  Explorer\\iexplore.exe\"http://blog.csdn.net/sunnyjavamoon/archive/2006/11/04/1366552.aspx");  
         }
         catch(IOException eIO){}
        }
       }
      }

 

 

 

   

package game;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.event.*;
import java.lang.*;
import java.io.*;

class MyActionListener implements ActionListener
 {
  static Timer myTimer=new Timer(1500,new MyActionListener2());//速度控制    
  public void actionPerformed(ActionEvent e)
  {
   ViewFlow.setText1("        外挂程序启动中......");                               
   MyActionListener.myTimer.start();                      
   }
  }

 

 

 

   

package game;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.event.*;
import java.lang.*;
import java.io.*;

class MyChangeListener1 implements ChangeListener
   {
    public void stateChanged(ChangeEvent e4)
    {
     ViewFlow.setText2("加血位置:"+ViewFlow.slider1.getValue()+"/170");
     }
    }

 

 

 

   

package game;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.event.*;
import java.lang.*;
import java.io.*;

class MyChangeListener2 implements ChangeListener
   {
    public void stateChanged(ChangeEvent e5)
    {
     ViewFlow.setText3("加血速度:"+ViewFlow.slider2.getValue()+" 毫秒/次");
     MyActionListener.myTimer.setDelay(ViewFlow.slider2.getValue());
     }
    }

 

 

   

package game;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.event.*;
import java.lang.*;
import java.io.*;

//界面类
class ViewFlow
{
 Container jfContainer=null;
 JButton jbt1=null;
 JButton jbt2=null;
 static JButton jbt3=null;
 JPanel jp1=null;
 JPanel jp2=null;
 JPanel jp3=null;
 JPanel jp4=null;
 static JSlider slider1=null;
 static JSlider slider2=null;
 static JTextField jf1=new JTextField("请启动游戏",15);
 static JTextField jf2=new JTextField("加血位置:100"+"/170",15);
 static JTextField jf3=new JTextField("加血速度:1500"+" 毫秒/次",15);
 static JRadioButton jrb1=null;
 static JRadioButton jrb2=null;
 
 JMenuBar jmb=null;
 JMenu helpMenu=null;
 static JMenuItem helpMenuItem1=null;
 static JMenuItem helpMenuItem2=null;
  static JMenuItem helpMenuItem3=null;
  static JMenuItem helpMenuItem4=null;
  JMenu hightSet=null;
  static JMenuItem hightSetItem1=null;
  static JMenuItem hightSetItem2=null;
  static JMenuItem hightSetItem3=null;
  JMenu exchangeMenu=null;
  static JMenuItem exchangeItem1=null;
  static JMenuItem exchangeItem2=null;

 ButtonGroup bg=null;
 ViewFlow()
 {
  JFrame jf=new JFrame("武林外挂1.0");
  jf.setSize(218,490);
  jf.setLocation(550,70);
  
  jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  jfContainer=jf.getContentPane();
  jfContainer.setLayout(new GridLayout(4,1,10,15));
  //面版
  jp1=new JPanel();
  jp2=new JPanel();
  jp3=new JPanel();
  jp4=new JPanel();
  
  //jp1.setSize(20,5);
  //jp2.setSize(30,30);

  jp1.setLayout(new FlowLayout(FlowLayout.CENTER,20,5));
  jp2.setLayout(new FlowLayout(FlowLayout.CENTER,20,5));
  jp3.setLayout(new FlowLayout(FlowLayout.CENTER,20,5));
  
  jp1.setBorder(BorderFactory.createTitledBorder("主控制区"));
  jp2.setBorder(BorderFactory.createTitledBorder("加血位置调整"));
  jp3.setBorder(BorderFactory.createTitledBorder("加血速度调整"));
  jp4.setBorder(BorderFactory.createTitledBorder("打怪模式设定"));
  
  jbt1=new JButton("开启");
  jbt2=new JButton("停止");
  jbt3=new JButton("在线升级");
  jbt3.setSize(10,20);
  
   jfContainer.add(jp1);//框架加入面版1
   jfContainer.add(jp2);//框架加入面版2
   jfContainer.add(jp3);//框架加入面版3 
   jfContainer.add(jp4);//框架加入面版4
   //滑杆1
   
   slider1=new JSlider(75,170,100);
  slider1.setPaintTicks(true);
  slider1.setMajorTickSpacing(20);
  slider1.setMinorTickSpacing(2);
  slider1.setSnapToTicks(true);
  //slider1.setPaintLabels(true);//显示刻度数字
  slider1.setPaintTrack(true);
  
  //滑杆2
  slider2=new JSlider(300,3000,1500);
  slider2.setPaintTicks(true);
  slider2.setMajorTickSpacing(300);
  slider2.setMinorTickSpacing(50);
  slider2.setSnapToTicks(true);
  //slider2.setPaintLabels(true);//显示刻度数字
  slider2.setPaintTrack(true);
  //单选按键
  jrb1=new JRadioButton("手动打怪");
  jrb2=new JRadioButton("自动打怪");
  bg=new ButtonGroup();
  //菜单
  jmb=new JMenuBar();
  jmb.setOpaque(true);
  jf.setJMenuBar(jmb);
  
  hightSet=buildHeightFileNenu();//生成高级选项菜单
  jmb.add(buildHeightFileNenu());//加载菜单
  
  exchangeMenu=builExchangeFileNenu();//生成问题交流菜单
  jmb.add(exchangeMenu);//加载菜单
  
  helpMenu=buildHelpFileMenu();//生成帮助菜单
  jmb.add(helpMenu);//加载菜单
 
  //面版
  jp1.add(jbt1);//面版1加入按键
   jp1.add(jbt2);//面版1加入按键
   jp1.add(jf1);
   bg.add(jrb1);
    bg.add(jrb2);
    jp2.add(slider1);
   jp2.add(jf2);
   jp3.add(slider2);   
   jp3.add(jf3);
   jp4.add(jrb1);
   jp4.add(jrb2);
   jp4.add(jbt3);
   jf.setVisible(true);
  }
  //  
  public JMenu buildHeightFileNenu()
  {
   JMenu file2=new JMenu("高级设置");//菜单1
   hightSetItem1=new JMenuItem("加血速度");//菜单2_菜单项1   
   hightSetItem2=new JMenuItem("加血位置");//菜单2_菜单项2
   hightSetItem3=new JMenuItem("打怪模式");//菜单3_菜单项3
   file2.add(hightSetItem1);
   file2.addSeparator();
   file2.add(hightSetItem2);
   file2.addSeparator();
   file2.add(hightSetItem3);
   return file2;
   } 
  public JMenu builExchangeFileNenu()
  {
   JMenu file2=new JMenu("问题交流");//菜单2
   exchangeItem1=new JMenuItem("论坛交流");//菜单2_菜单项1   
   exchangeItem2=new JMenuItem("龙旋风论坛");//菜单2_菜单项2
   file2.add(exchangeItem1);
   file2.addSeparator();
   file2.add(exchangeItem2);
   return file2;
   } 
  public JMenu buildHelpFileMenu()//菜单内容生成
  {
   JMenu file1=new JMenu("帮助");//菜单3
   helpMenuItem1=new JMenuItem("使用帮助");//菜单1_菜单项1   
   helpMenuItem2=new JMenuItem("在线更新");//菜单1_菜单项2
   helpMenuItem3=new JMenuItem("作者主页");//菜单1_菜单项2
   helpMenuItem4=new JMenuItem("关于");//菜单1_菜单项3
   file1.add(helpMenuItem1);
   file1.addSeparator();
   file1.add(helpMenuItem2);
   file1.addSeparator();
   file1.add(helpMenuItem3);
   file1.addSeparator();
   file1.add(helpMenuItem4);
   return file1;
   }
 public void addActionlistener()
 {
  jbt1.addActionListener(new MyActionListener());      
  jbt2.addActionListener(new MyActionListener3());
  jbt3.addActionListener(new MyActionListener4());
  
  slider1.addChangeListener(new MyChangeListener1());
  slider2.addChangeListener(new MyChangeListener2());
  
  jrb1.addItemListener(new MyItemListener1());
  jrb2.addItemListener(new MyItemListener1());
  
  MyActionListener4 MenuItemListener=new MyActionListener4();//菜单监视器
  //帮助菜单
  helpMenuItem1.addActionListener(MenuItemListener);
  helpMenuItem2.addActionListener(MenuItemListener);
  helpMenuItem3.addActionListener(MenuItemListener);
  helpMenuItem4.addActionListener(MenuItemListener);
  //高级设置
   hightSetItem1.addActionListener(MenuItemListener);
   hightSetItem2.addActionListener(MenuItemListener);
   hightSetItem3.addActionListener(MenuItemListener);
   //问题交流
   exchangeItem1.addActionListener(MenuItemListener);   
  exchangeItem2.addActionListener(MenuItemListener);
  }
  
 public static void setText1(String str)
 {
  jf1.setText(str);
  }
  
 public static void setText2(String str)
 {
  jf2.setText(str);
  }
  
 public static void setText3(String str)
 {
  jf3.setText(str);
  }
  
  }

 

   

package game;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.event.*;
import java.lang.*;
import java.io.*;
class MyItemListener1 implements ItemListener
    {
     public void itemStateChanged(ItemEvent e6)
     {
      if(e6.getSource()==ViewFlow.jrb1)
      {
       MyActionListener2.ip=0;//手动
       //System.out.println(ViewFlow.ip);//测试单选键1
       }
      else if(e6.getSource()==ViewFlow.jrb2)
      {
       MyActionListener2.ip=1;//自动
       //System.out.println(ViewFlow.ip);//测试单选键2
       }
      }
     }

 

 

分享到:
评论
75 楼 sunnymoon 2008-12-21  
flamefox 写道
色彩对比模拟按键的外挂,在按键精灵里面已经被封装了。。

谢谢支持,当时按键的精灵就有被封的了,但是这个一直很好用。也是很多朋友当时一直用它的原因。
74 楼 ReaiJava 2008-12-21  
哥们 代码贴出来了  顺便打个包呀!
73 楼 ReaiJava 2008-12-21  
哥们 代码贴出来了  顺便打个包呀!
72 楼 flamefox 2008-12-21  
色彩对比模拟按键的外挂,在按键精灵里面已经被封装了。。
71 楼 sunnymoon 2008-12-21  
对了,哪个哥们有空帮我点个良好贴啊,还有几个就到了,谢了!~
70 楼 sunnymoon 2008-12-21  
大猫汤姆 写道

dracularking 写道
感谢楼主分享的精神 但我总感觉java写的不能契合入游戏 总只能做些表面功夫 只是纯探讨 没其他意思

‘狠’同意你的说法,JAVA对系统底层的支持很弱,
某些功能我曾经在JE问问上 求&nbsp; 助,大量GOOGLE BAIDU过,但都没有相关解决办法,而搜索出使用C来解决的不少。

用纯Java确实有对低层的问题。如果真的想用低层的东西可以混合编程。Java本身也提供了这样的途径。JNI,哥们有空研空一下吧。当然这样做一定程序上对Java的跨平台有一定的破坏。
69 楼 sunnymoon 2008-12-21  
大猫汤姆 写道

嘿嘿,同道中人,前段时间我也做过一个,挑战外挂,辅助程序,有些心得,但用JAVA做弊病是非常大的,因为JAVA不支持底层的功能,也许我不知道(没找到相关的API)。比如:这种外挂很多时候需要图片模糊对比,即找怪,动态抓取区域截图与副本图片对比,如果大约相同就把鼠标移动过去。判断鼠标形状,而不仅仅只取一个像素的颜色,当模糊找到怪物以后,鼠标移动过去,一般网游的鼠标形状会有变化,如果有变化就点击,然后按技能键12345....这是其中的两个核心功能,楼主要是研究过的话我们可以交流一下,后来我使用VB实现就很容易了,VB对WINDOWS的支持非常好,所以很方便。使用这个挂升到了90级,两个星期吧,一般人手工练的话需要两个月时间,其中还是非常有乐趣的,定制杀怪路线加速刷怪等。

Java对低层支持不太好我同意,比如对存储器的读取。
但仁兄说的这种情况我觉得和Java这种缺限没有太大关系。、
对图片的分析依实现的技术手断有关,比如,像我在文章中写的程序那样,属于最简单的情况,是只对比不同区域的颜色。如果需要有更高的需要更高的图片处理的要求的,我觉得首先设计一个算法。这个算法用来专门处理两个不同图片之间的区别了对比。既然到了算法这样的程序那么就与具体的语言无关了。问题的关键是怎么去实现这样的算法,不应该责怪Java语言本身。你说呢?
68 楼 sunnymoon 2008-12-21  
donnki 写道

真想和LZ握个手。。。
哈哈,我大学时代也写过这么个外挂~~也是武林外传!代码在以前的机器上!
那会挂机用法师挂到60级三转,后觉得没意思了就没挂了,后来把外挂把包,用开源的工具打成EXE的文件去给网友用,他们老说有BUG~~哈哈,外挂还认主的~~

话说写代码的过程比玩游戏有意思多了~~

嘿嘿,同志啊,你说有Bug我估计可能是分辨率的问题。我本人不玩网游,对战游戏比哪3C之类的经常玩,都是给寝室人写的,后来整个班至整个系都在用了。当时用得还得,但总是提出各种要求。人的欲望是无究的,我就没有进一步加功能,玩嘛。
一点很同意你,看着同学们用挂玩游戏比自已玩还爽,特别是当看到同学们出去干别的事儿情支了,外挂还在运行,游戏人物还在不知疲卷的打,,,,
67 楼 大猫汤姆 2008-12-20  
dracularking 写道

感谢楼主分享的精神 但我总感觉java写的不能契合入游戏 总只能做些表面功夫 只是纯探讨 没其他意思

‘狠’同意你的说法,JAVA对系统底层的支持很弱,
某些功能我曾经在JE问问上 求  助,大量GOOGLE BAIDU过,但都没有相关解决办法,而搜索出使用C来解决的不少。
66 楼 大猫汤姆 2008-12-20  
xixixi8899 写道
模拟鼠标键盘操作只能针对一个窗口进行,现在想挂机赚钱的外挂,都必须要一台机子开很多游戏窗口,也就是多开。模拟鼠标键盘在多开情况下就没用了。做挂一般都是找CALL的方式。不要游戏客户端的是脱机挂,那个难度更大,收入也更很可观。JAVA做那样的挂是不行的。现在做挂要过NP,多开,防封,答题,麻烦着呢。


楼主已经说了嘛,是辅助外挂。
现在想做某些游戏的脱机挂确实是很难的,不但需要破解数据,更难的是游戏公司为防止外挂在游戏外面加了一层非常有名的“神盾反外挂程序”。
65 楼 大猫汤姆 2008-12-20  
嘿嘿,同道中人,前段时间我也做过一个,挑战外挂,辅助程序,有些心得,
但用JAVA做弊病是非常大的,因为JAVA不支持底层的功能,也许我不知道(没找到相关的API)。

比如:

这种外挂很多时候需要图片模糊对比,即找怪,动态抓取区域截图与副本图片对比,如果大约相同就把鼠标移动过去。

判断鼠标形状,而不仅仅只取一个像素的颜色,当模糊找到怪物以后,鼠标移动过去,一般网游的鼠标形状会有变化,如果有变化就点击,然后按技能键12345....

这是其中的两个核心功能,楼主要是研究过的话我们可以交流一下,
后来我使用VB实现就很容易了,VB对WINDOWS的支持非常好,所以很方便。
使用这个挂升到了90级,两个星期吧,一般人手工练的话需要两个月时间,
其中还是非常有乐趣的,定制杀怪路线加速刷怪等。
64 楼 yollywu 2008-12-20  
哈哈,有没有梦幻西游的挂代码。。
63 楼 落花虽有意 2008-12-20  
汗...
第一次知道还有 java.awt.Robot 这个类,看了下很强大
62 楼 nova 2008-12-19  
恩,用Robot去写个魔兽3的外挂,去浩方虐人。
61 楼 donnki 2008-12-19  
真想和LZ握个手。。。
哈哈,我大学时代也写过这么个外挂~~也是武林外传!代码在以前的机器上!
那会挂机用法师挂到60级三转,后觉得没意思了就没挂了,后来把外挂把包,用开源的工具打成EXE的文件去给网友用,他们老说有BUG~~哈哈,外挂还认主的~~

话说写代码的过程比玩游戏有意思多了~~
60 楼 dracularking 2008-12-19  
你们谈到的都是按键里有的 按键精灵实现这些功能很容易 就是一些后台的有些难度 支持不很好 按键貌似是用vbscript写的 用按键本身与盗号也没啥直接关系 那是没有从官网下载原版的被挂马了的软件了 用任何软件只要不小心都会中招
感谢楼主分享的精神 但我总感觉java写的不能契合入游戏 总只能做些表面功夫 只是纯探讨 没其他意思
59 楼 sunnymoon 2008-12-12  
mayday85 写道

其实很多外挂里的思路还是很值得学习的

有血条的游戏作起来简单了

我还写过用名字搜的

x=1 y=4 搜一个 y=1 x=4 搜一个
相距10以内应该就是怪

再比如怎么实现随机乱走?以人为圆心画圆,生成0到360的随机数

很有思想,其实这个地方可以用高级数学思想去分析。
58 楼 mayday85 2008-12-12  
其实很多外挂里的思路还是很值得学习的

有血条的游戏作起来简单了

我还写过用名字搜的

x=1 y=4 搜一个 y=1 x=4 搜一个
相距10以内应该就是怪

再比如怎么实现随机乱走?以人为圆心画圆,生成0到360的随机数
57 楼 sunnymoon 2008-12-12  
mosheo 写道

貌似只能支持定点打怪哦

有机会自己试一下就知道了,呵
56 楼 mosheo 2008-12-12  
貌似只能支持定点打怪哦

相关推荐

    JAVA 实例源代码-java

    "JAVA 实例源代码-java"这个资源提供了这样一个机会,让你能够在实践中探索和理解Java编程。 首先,让我们深入了解一下Java的基本概念。Java由Sun Microsystems(现为Oracle Corporation)于1995年发布,设计目标是...

    java程序设计-慕课版 +课后源代码+ppt+课后题答案

    总的来说,"java程序设计-慕课版 +课后源代码+ppt+课后题答案"这套资源为Java初学者提供了一个全面的学习路径。从理论到实践,从基础到进阶,覆盖了Java编程的各个重要方面。通过系统学习和不断实践,读者可以逐步...

    sun.misc.BASE64Decoder(Android Base64Jar包以及Java源代码)

    以及Java源代码 sun.misc.BASE64Decoder 其中包括 Android Base64Jar包 以及Java源代码 sun.misc.BASE64Decoder 其中包括 Android Base64Jar包 以及Java源代码 sun.misc.BASE64Decoder 其中包括 ...

    Java源代码下载

    Java源代码下载通常指的是获取Java开发工具包(JDK)中的源码,这对于开发者来说是一项重要的活动,因为源代码能够帮助他们深入理解Java语言的工作原理,进行调试和学习。Java作为一个开源项目,Oracle公司提供了源...

    SUN公司官网JAVA源代码

    这个名为"SUN公司官网JAVA源代码"的压缩包很可能包含了一些Java编程的基础到高级的示例,让我们来深入探讨一下Java源代码中的关键知识点。 1. **Java语法**:Java的语法基础是任何程序员入门的起点。它包括变量声明...

    Ubuntu下安装sun-java6-jdk和eclipse

    在深入探讨如何在Ubuntu下安装sun-java6-jdk和eclipse之前,我们先来了解一些基础知识,这将有助于更好地理解整个安装过程。 ### Java在Linux系统中的重要性 Java是一种广泛使用的编程语言,它以其“一次编写,...

    java源代码.zip

    Java源代码主要由Java平台标准版(Java SE)、企业版(Java EE)和微型版(Java ME)组成,涵盖了大量的类库和框架。 1. **Java SE**:Java标准版是Java开发的基础,包括核心类库如集合、I/O、多线程、网络编程、...

    课程设计java程序源代码

    本课程设计的Java程序源代码提供了一个学习和实践Java编程的宝贵资源。 首先,让我们深入理解Java程序的组成部分。一个Java程序通常由以下几个部分构成: 1. **主类(Main Class)**:Java程序的入口点,通过`...

    java jdk源代码

    通过阅读和理解这些源代码,开发者不仅可以学习到Java的设计原则,还能发现性能优化的技巧,甚至可以参与到开源社区,为Java的发展贡献自己的力量。对于有志于成为Java专家的人来说,这份源代码无疑是一本开放的教科...

    拼图游戏Java版源代码

    学习这个Java拼图游戏源代码,可以帮助初学者深入理解Java编程基础,尤其是面向对象编程、GUI设计和算法实现。通过阅读和分析代码,你可以了解到如何将现实世界的游戏规则转化为计算机语言,这对于提升编程思维和...

    JAVA学习源代码

    【JAVA学习源代码】这个主题涵盖了Java编程语言的学习资源,特别是包含了"JAVA程序设计教程(附源码)"这本书的PDF格式。这是一本全面的教材,旨在帮助初学者和有经验的开发者深入理解和掌握Java语言。Java是一种广泛...

    Java 第1章 了解java含源代码

    在“Java 第1章 了解java含源代码”中,我们将会探讨Java的基础知识,包括它的历史、特性、语法以及如何阅读和理解Java源代码。 1. **Java的历史**:Java的诞生源于C++,由James Gosling领导的团队开发,旨在创造一...

    mysql-connector-java-5.1.37-bin.jar

    JDBC 是 Sun Microsystems(现已被 Oracle 收购)为 Java 平台定义的标准 API,用于规范数据库访问,让开发者可以编写与数据库无关的代码。 首先,我们来详细了解一下 MySQL Connector/J 的功能和工作原理。这个 ...

    java-7-openjdk-amd64.tar.gz

    从前面介绍的Java发展史中我们了解到OpenJDK是Sun在2006年末把Java开源而形成的项目,这里的“开源”是通常意义上的源码开放形式,即源码是可被复用的,例如IcedTea、UltraViolet都是从OpenJDK源码衍生出的发行版。...

    mysql-connector-java-5.1.28-bin.jar

    JDBC 是由 Sun Microsystems 提供的一组 Java API,用于在 Java 应用程序和各种数据库之间建立连接,执行 SQL 查询以及处理结果。它提供了一种标准的方法来访问不同的数据库系统,使得开发人员无需关注底层数据库的...

    mysql-connector-java-5.1.40-bin.jar连接器

    在这个特定的版本——mysql-connector-java-5.1.40-bin.jar中,我们找到了这个连接器的5.1系列的一个稳定版本。 首先,让我们了解JDBC的作用。JDBC是Sun Microsystems(现为Oracle公司)为Java编程语言设计的一套...

    mysql-connector-java-gpl-5.1.36

    "mysql-connector-java-gpl-5.1.36"是MySQL Connector/J的一个特定版本,发布于GPL(GNU General Public License)许可下,意味着它是开源且可自由分发的。 MySQL Connector/J 5.1.36是针对MySQL 5.1系列数据库...

    java源代码,jdk里面的源代码

    Java JDK中的源代码是学习和理解Java编程语言及其运行机制的关键资源。这些源文件包含了Java开发工具集(Java Development Kit)的核心类库,涵盖了从基本的语法结构到高级特性的实现。下面我们将深入探讨这些源代码...

    java-1.7.0-openjdk

    Java 1.7.0 开源版 OpenJDK 是一个广泛使用的开源 Java 开发和运行环境,由 OpenJDK 社区维护。OpenJDK 是 Java Development Kit (JDK) 的一个实现,遵循 GNU General Public License (GPLv2) 许可协议,允许开发者...

    sun-java6-jdk

    【标题】"sun-java6-jdk" 是Oracle公司(前身为Sun Microsystems)为Java开发环境提供的一个关键组件,它包含了Java Development Kit(JDK),是Java编程语言的基础工具集。这个压缩包文件提供了用于开发、编译、...

Global site tag (gtag.js) - Google Analytics