日期:2014-05-20  浏览次数:20730 次

请原谅我用这样的问题影响你挑战难题的兴致!
再次声明,请高人们原谅我用这样的问题影响你挑战难题的兴致,如果时间允许还请给在下一点提示
我想知道用现有的技术是否可以实现这样一个应用程序。背景是这样的。
首先, 我把一个网络游戏的区号,账号,密码存在记事本里,下以《热血传奇》为列。
然后, 我想写这样一个软件, 在我双击《热血传奇》.exe 的快捷图标后,它可以打开登录控件TfrmMain中窗口类名TComboBox的下拉菜单,选取与记事本中所存区号相吻合的区号选项并激活“进入游戏”botton,再把记事本里的账号和密码输入对应的Edit里,激活“确定”然后血还没冷的人就可以打宝PK了。(TfrmMain,TComboBox,botton,Edit是用spy++看到的,意思我不懂)
问:如果只针对〈传奇〉肯定可以写出来,但是把范围扩大到〈魔兽〉,QQ ,呢?各个游戏的登录方式不同,再如QQ中没有区号但是有隐身登录,自动登录等选项。也就是说我要一个可以自动输入所有需要区号,账号,密码,登录模式等选项的软件(在我合法拥有密码的条件下),现在的编程技术可以实现吗?
请大家指点迷津,解我困惑顺便再给点提示。我大学是学经济类专业的,现在想以制作这个软件为目标学习编程。有乐意晦人不倦的朋友请加我QQ346600686或者E-mail:zhizhuo04@sina.com


------解决方案--------------------
up
------解决方案--------------------
你就要要一个可以自动登陆的东东是不是,如果是的话说怎么麻烦干什么啊
1,首先你的登陆界面是什么设计的,如果是C++的,这样建立C++ -> SQL(或者自己日志文件) -> java程序 -> sql(自己的日志文件) -> c++ , 这个做起来麻烦,不考虑
2,最好是自己用java.swing设计登陆界面,按自己的规则配置登陆的文件,通过自动读取配置文件后,将数据到包发到游戏服务器,但是难点是游戏的服务器的数据是怎么封装的,你要清楚,如果不知道,基本上是无法实现,(1也无法实现)
我现在在你清楚你知道服务器的数据是如何封装的来进行设计:
假设服务器的数据是这样封装的
1,游戏服务器地址
2,区号
3,游戏ID
4,游戏密码
5,登陆模式
6,。。。

我就假定以QQ为例吧
先建立一个登陆的配置文件login.txt
loginServerIP=www.qq.com.cn
ID=zhangsan
passWord=1234
loginMode=hermitlogin(不清楚QQ影身登陆是什么东西代表的可能是个Byte类型的如Byte choose= 0xxxxxxx,最高位为符号号,其他x位为模式位,如果是最低位代表影身登陆,就应该是00000001,到数据发到服务器后,我猜测是通过这样一个for循环
for(int i = 0 ; i < 7;i++){
byte n = 1<<i;
if((choose&n)) != 0)//将n与choose进行按位与{
则是什么模式
}else{
则不是什么模式
}
}
TypeClass=java.lang.String
所以你必须清楚游戏的数据封装,不然我们这里也就只能纸上谈兵而已


Java code

//先封装一个数据封装的类,Player.java
package test02;

public class Player {
    private String ID;
    private String passWord;
    private String loginMode;
    
    public Player(){
        
    }

    public Player(String id, String passWord,
            String loginMode) {
        super();
        ID = id;
        this.passWord = passWord;
        this.loginMode = loginMode;
    }

    public String getID() {
        return ID;
    }

    public void setID(String id) {
        ID = id;
    }

    public String getPassWord() {
        return passWord;
    }

    public void setPassWord(String passWord) {
        this.passWord = passWord;
    }

    public String getLoginMode() {
        return loginMode;
    }

    public void setLoginMode(String loginMode) {
        this.loginMode = loginMode;
    }
    
    public String toString(){
        return this.ID+" " + this.passWord + " " + this.loginMode;
    }
    
    //写一个发送到服务器的信息
    public void send(String serverip){
        //具体的服务器IP,和数据
        String s = this.toString(); 
        //将s转换为服务器所接受的字节码,或者其他编码类型
        //根据数据的封装,服务器的IP来发送,我这是根据对象的toString来发送
        //假定服务器是通过解析String来执行操作的;
    }
    
}

//通过反射机制来动态加载文件和player.class
package test02;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Properties;

public class LoginPlayer {
    private static Properties  p;
    static{
        p = new Properties();
        try {
            p.load(new FileInputStream("login.txt"));
        } catch (FileNotFoundException e) {
            
            e.printStackTrace();
        } catch (IOException e) {
            
            e.printStackTrace();
        }
        String loginServerIP = p.getProperty("loginServerIP");
        String ID = p.getProperty("ID");
        String passWord =p.getProperty("passWord");
        String loginMode = p.getProperty("loginMode");
        String TypeClass = p.getProperty("TypeClass");        
        try {
            Class<?> c = Class.forName("test02.Player");
            Class<?> cc = Class.forName(TypeClass);
            Constructor<?> con = null;
            try {
                con = c.getConstructor(cc,cc,cc,cc);
                Object obj = null;
                try {
                    obj = con.newInstance(ID,passWord,loginMode);
                    Method m = c.getDeclaredMethod("send", cc);
                    m.invoke(obj,loginServerIP);
                } catch (IllegalArgumentException e) {
                    
                    e.printStackTrace();
                } catch (InstantiationException e) {
                    
                    e.printStackTrace();
                } catch (IllegalAccessException e) {
                    
                    e.printStackTrace();
                } catch (InvocationTargetException e) {
                    
                    e.printStackTrace();
                }
                
            } catch (SecurityException e) {
                
                e.printStackTrace();
            } catch (NoSuchMethodException e) {
                
                e.printStackTrace();
            }
        } catch (ClassNotFoundException e) {
            
            e.printStackTrace();
        }
    }    
    
}