java:神武防掉线挂机小程序

需求

游戏中一段时间不操作,会自动掉线,本程序模拟鼠标点击操作,实现自动挂机、自动刷怪、副本挂机三个功能。

实现

定时点击屏幕固定位置,实现自动加血、自动打开副本宝箱、自动移动等功能。由于点击位置固定,所以需要将游戏窗口放在屏幕左上角。

程序分为四个小模块:

RobotUtils:鼠标点击工具类,模拟鼠标点击操作。

Show:用于显示操作窗口。

GuajiService:主要模块,根据不同模式使用不同策略定时点击不同位置。

GuajiControler:程序启动入口。

代码实现

RobotUtils

package com.wzx.shenwu.utils;

import java.awt.*;
import java.awt.event.InputEvent;

import static java.lang.Thread.sleep;

public class RobotUtils {
    //点击左键
    static public void leftClick(Robot robot){
        // 模拟鼠标按下左键
        robot.mousePress(InputEvent.BUTTON1_MASK);
        try {
            sleep(100);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        // 模拟鼠标松开左键
        robot.mouseRelease(InputEvent.BUTTON1_MASK);
    }

    //点击右键
    static public void rightClick(Robot robot){
        robot.mousePress(InputEvent.BUTTON3_MASK);
        robot.mouseRelease(InputEvent.BUTTON3_MASK);
    }
}

Show

package com.wzx.shenwu.ui;

import com.wzx.shenwu.service.GuajiService;

import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Show {
    static JButton randomBt;
    static JButton fixedBt;
    static JButton fubenBt;
    static JButton endBt;
    private int flag ;
    private ActionListener actionListener;
    JDialog dialog = null;

    //创建监听器
    private void initActionListener(){
        final GuajiService service = GuajiService.getService();
        actionListener = new ActionListener(){

            public void actionPerformed(ActionEvent e) {
                //点击固定选项
                if (e.getSource() == fixedBt) {
                    showMsg("即将开始挂机,请将自动战斗窗口放在左下角");
                    flag = 1;
                    service.setFlag(flag);
                    service.setIfRun(true);
                    service.getThread().start();
                }

                //点击随机选项
                if (e.getSource() == randomBt){
                    showMsg("即将开始挂机,请将自动战斗窗口放在左下角");
                    flag = 2;
                    service.setFlag(flag);
                    service.setIfRun(true);
                    service.getThread().start();
                }

                //点击副本
                if (e.getSource() == fubenBt){
                    showMsg("即将开始挂机,请将自动战斗窗口放在左下角");
                    flag = 3 ;
                    service.setFlag(flag);
                    service.setIfRun(true);
                    service.getThread().start();
                }

                if (e.getSource() == endBt) {
                    service.setIfRun(false);
                    service.getThread().stop();
                    showMsg("结束");
                    closeWindow();
                }


            }
        };
    }

    //显示界面
     public void showMain() {
        dialog = new JDialog();
        // 设置大小
        dialog.setSize(320, 100);
        // 设置标题
        dialog.setTitle("界面");

        randomBt = new JButton("防掉");
        fixedBt = new JButton("挂机");
        fubenBt = new JButton("副本");
        endBt = new JButton("结束");
        // 绑定监听
         initActionListener();
        randomBt.addActionListener(actionListener);
        fixedBt.addActionListener(actionListener);
        fubenBt.addActionListener(actionListener);
        endBt.addActionListener(actionListener);

        randomBt.setBounds(35, 10, 60, 40);
        fixedBt.setBounds(95, 10, 60, 40);
        fubenBt.setBounds(155,10,60,40);
        endBt.setBounds(215, 10, 60, 40);
        // 设置布局为空,使用坐标控制控件位置的时候,一定要设置布局为空
        dialog.setLayout(null);
        // 添加控件
        dialog.add(randomBt);
        dialog.add(fixedBt);
        dialog.add(fubenBt);
        dialog.add(endBt);
        // 设置dislog的相对位置,参数为null,即显示在屏幕中间
        dialog.setLocationRelativeTo(null);
        // 设置当用户在此对话框上启动 "close" 时默认执行的操作
        dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
        // 设置是否显示
        dialog.setVisible(true);
    }
    //弹出提示框
    static public void showMsg(String msg) {
        JOptionPane.showMessageDialog(null, msg, "提示信息",
                JOptionPane.PLAIN_MESSAGE);
    }

    //关闭窗口
    public void closeWindow(){
        dialog.dispose();
    }
}

GuajiService

package com.wzx.shenwu.service;

import java.awt.*;

import static com.wzx.shenwu.utils.RobotUtils.leftClick;
import static com.wzx.shenwu.utils.RobotUtils.rightClick;

public class GuajiService {
    private GuajiService(){
    }

    private static final GuajiService service = new GuajiService();
    public static GuajiService getService(){
        return service;
    }


    //挂机类型标记
    int flag;
    public void setFlag(int flag){
        this.flag = flag;
    }
    //线程开关标记
    private boolean ifRun = false;
    public void setIfRun(boolean ifRun){
            this.ifRun = ifRun;
    }
    //提供线程访问接口
    public Thread getThread(){
        return thread;
    }
    private Thread thread = new Thread(new Runnable() {
        public void run() {
            Robot robot = null;

            try {
                robot = new Robot();
            } catch (AWTException e) {
                e.printStackTrace();
            }
            //固定
            if (flag==1){
                /*
                Point point = MouseInfo.getPointerInfo().getLocation();
                int x = (int) point.getX();
                int y = (int) point.getY();
                */
                while (ifRun) {
                    // 模拟鼠标按下左键
                    //robot.mousePress(InputEvent.BUTTON1_MASK);
                    // 模拟鼠标松开左键
                    //robot.mouseRelease(InputEvent.BUTTON1_MASK);
                    //leftClick(robot);
                    //sleep(100);
                    //自动回血回蓝
                    addHPMP(robot);
                    sleep(10000);

                }
            }
            // 随机
            if (flag == 2){
                while (ifRun) {
                    //随机获取鼠标位置,已废弃
                    //Random random = new Random();
                    //robot.mouseMove(random.nextInt(710)+30, random.nextInt(430)+150);

                    //回血回蓝
                    addHPMP(robot);
                    sleep(1000);

                    //四点循环点击
                    robot.mouseMove(200,160);
                    leftClick(robot);
                    sleep(5000);

                    robot.mouseMove(635,175);
                    leftClick(robot);
                    sleep(5000);

                    robot.mouseMove(200,475);
                    leftClick(robot);
                    sleep(5000);

                    robot.mouseMove(700,325);
                    leftClick(robot);
                    sleep(100);
                    robot.mouseMove(640,500);
                    leftClick(robot);

                    sleep(5000);
                }
            }

            //副本挂机
            if (flag == 3){
                while (ifRun) {
                    //自动回血回蓝
                    addHPMP(robot);
                    sleep(10000);
                    //点击第二个宝箱
                    robot.mouseMove(390, 330);
                    leftClick(robot);
                    sleep(1000);
                    //关闭宝箱界面
                    robot.mouseMove(600, 190);
                    leftClick(robot);
                    sleep(1000);
                }
            }

        }
    });

     private void sleep(int time){
         try {
             thread.sleep(time);
         } catch (InterruptedException e) {
             e.printStackTrace();
         }
     }

    //自动回血回蓝
      public  void addHPMP(Robot robot){
        //回血765 33
        robot.mouseMove(765,33);
        rightClick(robot);
        sleep(100);
        //回蓝765 45
        robot.mouseMove(765,45);
        rightClick(robot);
        sleep(100);
        //BB回血645 33
        robot.mouseMove(645,33);
        rightClick(robot);
        sleep(100);
        //BB回蓝
        robot.mouseMove(640,45);
        rightClick(robot);
        sleep(100);
        //自动战斗
        robot.mouseMove(155,580);
        leftClick(robot);
        sleep(100);
    }
}

GuajiControler

package com.wzx.shenwu.controler;

import com.wzx.shenwu.ui.Show;

public class GuajiControler {
    public static void main(String[] args) {
        //创建窗口
        Show show = new Show();
        show.showMain();

    }
}

实现效果

1.将游戏界面设置为最小,并放在屏幕左上角,如果是双屏幕,则放在主屏左上角。

2.启动程序,弹出选择窗口。

3.防掉:随机游走,并自动加血加蓝,点击到NPC对话时,会自动取消与NPC的对话窗口,适合在野外挂机。挂机:定时加血加蓝,将自动战斗窗口放在游戏左下角,会自动重置挂机回合。副本:自动加血加蓝,遇到宝箱自动选择第二个宝箱。

 

功能简介: 1.显示ID,按照玩家第一次上线的先后顺序排名ID,第一名为10001依次类推 如下图: 2.灭门、固定武器灭门掉血设置。除可开放灭门功能外,还可设置某种武器攻击门石掉血值。例如可以设置灭门期间攻击门石掉10点血,设置使用砸门槌攻击门石掉20点血。或可以直接设置不使用砸门槌攻击门石不掉血。 3.多级呐喊,实现多级呐喊。 4.呐喊随机几率赠送道具。可设置玩家喊话有几率获得某些道具。 5.单件装备特效。可设置玩家穿戴某件装备拥有暴击、吸血、金刚罩等特效。(特效名称可以自定义设置) 6.套装特效,可设置玩家穿戴齐全某套装备拥有暴击、吸血、金刚罩等特效。(特效名称可以自定义设置) 7.特效道具,可设置玩家物品栏内拥有某个道具拥有暴击、吸血、金刚罩等特效。(特效名称可以自定义设置) 8.千里传音、江湖流言功能 9.门武增强,可设置门武属性增强,提高门武属性。 10.装备爆出公告,可设置装备掉落全服公告。(且可设置,有几率掉落带段数装备。) 如下图: 11.可设置修炼满武功永久增加人物属性,例如可设置修炼满无名拳法永久增加人物100点攻击的属性等等 12.配偶系统,可写结婚脚本,玩家结婚后可显示玩家的配偶名称 如下图: 13.称号系统,可写脚本让玩家获得称号,玩家获得称号后可以显示玩家当前称号,并且可以设定称号增加玩家属性 如下图: 14.门派属性系统,可写脚本让门派获得门派属性加成,门派获得属性加成后,所有门派内的成员均可获得属性加成。 更多功能自己体验. 装备无限升段,可以制作领取等脚本,目前主流TGS插件!! 插件成功注入后,TGS变为下图样式
### 回答1: 《神武奇章》是一款以武侠为题材的网络游戏,并不涉及源码或编程相关方面。所以关于“神武奇章”的源码,可能是指该游戏的程序代码。然而根据知识和信息的有限性,笔者并没有该游戏的源码,也没有更多详细的相关信息。 如果您对该游戏的源码或编程有任何具体问题或需要进一步了解,请提供更多相关的信息,例如您希望了解该游戏的哪些方面,或者您是否在寻找相关的代码示例等。这样能够帮助我给出更具体的回答或提供合适的帮助。 总而言之,根据当前提供的信息,我们无法提供关于《神武奇章》的源码或编程方面的回答。希望您可以提供更多信息,以便我们能够更好地回答您的问题。 ### 回答2: 神武奇章源码pan是指神武奇章游戏的源代码存储在一个名为"pan"的地方。"Pan"在英语中表示"平庸"或者"普通"的意思,但在这里有可能是某个特定的文件夹或者存储位置的名称。 神武奇章是一款热门的角色扮演游戏,它拥有精美的画面、丰富的剧情和多样的玩法。游戏的源码包含了游戏的所有程序代码和资源文件,通过阅读和研究源码,开发人员可以了解游戏的架构,进行修改和定制游戏内容。 "Pan"有可能是源码所在的文件夹名称,也可能是指一个文件共享平台,用于存储和共享源码文件。这种文件共享平台通常可以供开发者上传和下载文件,方便多人合作和交流。通过将源码存储在pan中,开发者可以方便地获取并与其他团队成员或者开发者共享。 无论是游戏的源码存放在特定的文件夹还是文件共享平台中,均对加速游戏开发和改进带来了便利。开发人员们可以轻松地对游戏源码进行调试、修改和更新,以满足玩家的需求,并不断提升游戏的品质和体验。 神武奇章源码pan提供了一个良好的开发环境,使得开发者们更加便捷地参与到游戏开发的过程中。他们可以共同讨论、合作,共享经验和资源,从而加速游戏的开发进程,并最终呈现给玩家们一个更为精彩的游戏作品。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值