QT实现植物大战僵尸中文版工具代码

植物大战僵尸工具项目

.h文件

/*
 * @Author: Stylle
 * @Date: 2020-07-19 21:21:46
 * @LastEditors: Stylle
 * @LastEditTime: 2020-07-22 10:43:15
 * @FilePath: \tool-mastar\stylle_toolV1.8\tool_pvz.h
 */
#ifndef TOOL_PVZ_H
#define TOOL_PVZ_H

#include <QWidget>
//定时器
#include <QTimer>
//消息弹窗
#include <QMessageBox>
//跳转网页
#include <QDesktopServices>
#include <QUrl>
//window api调用
#include <windows.h>

namespace Ui
{
    class tool_pvz;
}

class tool_pvz : public QWidget
{
    Q_OBJECT

public:
    explicit tool_pvz(QWidget *parent = 0);
    ~tool_pvz();

    void printCs();

    void System_Init();

    void openBlog();

    void modifyGold();

    void modifySunshine();

    void NoCd_on(bool);

    void NoCd_stop(bool);

    void Auto_on(bool);

    void Auto_stop(bool);

private slots:
    void modifyNoCd();

    void modifyAuto();

    //    void on_btn_home_clicked();

private:
    QTimer *timer = new QTimer(this);
    QTimer *timer1 = new QTimer(this);
    Ui::tool_pvz *ui;
};

#endif // TOOL_PVZ_H

.c文件

#include "tool_pvz.h"
#include "ui_tool_pvz.h"

tool_pvz::tool_pvz(QWidget *parent) : QWidget(parent),
                                      ui(new Ui::tool_pvz)
{
    ui->setupUi(this);
    System_Init();
}

tool_pvz::~tool_pvz()
{
    delete timer;
    delete timer1;
    delete ui;
}

/***子函数代码区****/
void tool_pvz::System_Init()
{
    // 禁止最大化按钮
    setWindowFlags(windowFlags() & ~Qt::WindowMaximizeButtonHint);
    // 禁止拖动窗口大小
    setFixedSize(this->width(), this->height());
    //绑定按钮事件
    connect(ui->btn_openUrl, &QPushButton::clicked, this, &tool_pvz::openBlog);
    connect(ui->PrintCs, &QPushButton::clicked, this, &tool_pvz::printCs);
    connect(ui->btn_gold, &QPushButton::clicked, this, &tool_pvz::modifyGold);
    connect(ui->btn_sun, &QPushButton::clicked, this, &tool_pvz::modifySunshine);

    //冷却取消  关闭冷却按钮
    connect(ui->btn_auto_off, &QPushButton::clicked, this, &tool_pvz::NoCd_stop);
    //开启冷却  恢复冷却
    connect(ui->btn_auto_on, &QPushButton::clicked, this, &tool_pvz::NoCd_on);
    //定时器
    connect(timer, SIGNAL(timeout()), this, SLOT(modifyNoCd()));

    //自动收集资源  自动收集按钮
    connect(ui->btn_sungon, &QPushButton::clicked, this, &tool_pvz::Auto_on);
    //取消自动收集资源  取消收集按钮
    connect(ui->btn_sungoff, &QPushButton::clicked, this, &tool_pvz::Auto_stop);
    //定时器1
    connect(timer1, SIGNAL(timeout()), this, SLOT(modifyAuto()));
}
void tool_pvz::printCs()
{
    long tmp = 0;
    do
    {
        QMessageBox box(QMessageBox::NoIcon, "你就说", "   刘露是不是渣男?");
        box.setStandardButtons(QMessageBox::Ok | QMessageBox::No);
        box.setButtonText(QMessageBox::Ok, QString("必须是"));
        box.setButtonText(QMessageBox::No, QString("不是?"));
        tmp = box.exec();
    } while (QMessageBox::No == tmp);
}
/*   下载游戏  */
void tool_pvz::openBlog()
{
    QDesktopServices::openUrl(QUrl("https://wws.lanzous.com/ifeDLemqjqh"));
}
/*  修改金币类  */
void tool_pvz::modifyGold()
{
    //检测游戏是否在运行
    HWND hGameWnd = FindWindow(L"MainWindow", L"植物大战僵尸中文版");
    if (hGameWnd == NULL)
        ui->hGameWnd->setText("未找到游戏");
    else
        ui->hGameWnd->setText("已找到游戏");

    DWORD dwPID = 0;
    //根据窗口句柄获取进程IPD
    GetWindowThreadProcessId(hGameWnd, &dwPID);
    //根据PID获取进程句柄
    HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwPID);
    //从指定进程内存区去读取数据:读取进程,读取的基地址,接受进程地址数据,读取进程字节大小,实际读取字节数
    DWORD dwGoldBaseAddress = 0x6A9EC0;
    DWORD dwGoldAddressValue = 0;
    DWORD dwSize = 0;
    ReadProcessMemory(hProcess, (void *)dwGoldBaseAddress, &dwGoldAddressValue, sizeof(DWORD), &dwSize);
    //获取一级偏移地址
    DWORD dwGoldoffsetFirst = 0x82c;
    DWORD dwGoldoffsetValue = 0;
    ReadProcessMemory(hProcess, (void *)(dwGoldoffsetFirst + dwGoldAddressValue), &dwGoldoffsetValue, sizeof(DWORD), &dwSize);
    //获取二级偏移地址
    DWORD dwGoldoffsetsecond = 0x28;
    DWORD dwGold = 0;
    ReadProcessMemory(hProcess, (void *)(dwGoldoffsetValue + dwGoldoffsetsecond), &dwGold, sizeof(DWORD), &dwSize);
    DWORD addProcess = dwGoldoffsetValue + dwGoldoffsetsecond;
    DWORD tem = ui->edit_gold->text().toInt();
    WriteProcessMemory(hProcess, (void *)addProcess, &tem, sizeof(DWORD), &dwSize);
    //释放进程
    CloseHandle(hProcess);
}

/*  修改阳光类  */
void tool_pvz::modifySunshine()
{
    //检测游戏是否在运行
    HWND hGameWnd = FindWindow(L"MainWindow", L"植物大战僵尸中文版");
    if (hGameWnd == NULL)
        ui->hGameWnd->setText("未找到游戏");
    else
        ui->hGameWnd->setText("已找到游戏");

    DWORD dwPID = 0;
    //根据窗口句柄获取进程IPD
    GetWindowThreadProcessId(hGameWnd, &dwPID);
    //根据PID获取进程句柄
    HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwPID);
    //从指定进程内存区去读取数据:读取进程,读取的基地址,接受进程地址数据,读取进程字节大小,实际读取字节数
    DWORD dwSunshineBaseAddress = 0x6A9EC0;
    DWORD dwSunshineAddressValue = 0;
    DWORD dwSize = 0;
    ReadProcessMemory(hProcess, (void *)dwSunshineBaseAddress, &dwSunshineAddressValue, sizeof(DWORD), &dwSize);
    //获取一级偏移地址
    DWORD dwSunshineoffsetFirst = 0x768;
    DWORD dwSunshineoffsetValue = 0;
    ReadProcessMemory(hProcess, (void *)(dwSunshineoffsetFirst + dwSunshineAddressValue), &dwSunshineoffsetValue, sizeof(DWORD), &dwSize);
    //获取二级偏移地址
    DWORD dwSunshineoffsetsecond = 0x5560;
    DWORD dwSunshine = 0;
    ReadProcessMemory(hProcess, (void *)(dwSunshineoffsetValue + dwSunshineoffsetsecond), &dwSunshine, sizeof(DWORD), &dwSize);
    DWORD addProcess = dwSunshineoffsetValue + dwSunshineoffsetsecond;
    DWORD tem = ui->edit_sun->text().toInt();
    WriteProcessMemory(hProcess, (void *)addProcess, &tem, sizeof(DWORD), &dwSize);
    //释放进程
    CloseHandle(hProcess);
}
/*  无CD类  */
void tool_pvz::modifyNoCd()
{
    //检测游戏是否在运行
    HWND hGameWnd = FindWindow(L"MainWindow", L"植物大战僵尸中文版");
    if (hGameWnd == NULL)
        ui->hGameWnd->setText("未找到游戏");
    else
        ui->hGameWnd->setText("已找到游戏");

    DWORD dwPID = 0;
    //根据窗口句柄获取进程IPD
    GetWindowThreadProcessId(hGameWnd, &dwPID);
    //根据PID获取进程句柄
    HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwPID);
    //从指定进程内存区去读取数据:读取进程,读取的基地址,接受进程地址数据,读取进程字节大小,实际读取字节数
    DWORD dwBaseaddress = 0x6A9EC0;
    DWORD dwAddressValue = 0;
    int t = 1;
    ReadProcessMemory(hProcess, (LPVOID)dwBaseaddress, &dwAddressValue, 4, 0);
    DWORD offset1;
    ReadProcessMemory(hProcess, (LPVOID)(dwAddressValue + 0x768), &dwAddressValue, 4, 0);
    ReadProcessMemory(hProcess, (LPVOID)(dwAddressValue + 0x144), &dwAddressValue, 4, 0);
    int len = 10;
    for (int i = 0; i < len; i++)
    {
        offset1 = i * 0x50 + 0x70;
        WriteProcessMemory(hProcess, (LPVOID)(dwAddressValue + offset1), &t, 4, 0);
    }
    //释放进程
    CloseHandle(hProcess);
}
/*  自动收集资源类  */
void tool_pvz::modifyAuto()
{
    //检测游戏是否在运行
    HWND hGameWnd = FindWindow(L"MainWindow", L"植物大战僵尸中文版");
    if (hGameWnd == NULL)
        ui->hGameWnd->setText("未找到游戏");
    else
        ui->hGameWnd->setText("已找到游戏");

    DWORD dwPID = 0;
    //根据窗口句柄获取进程IPD
    GetWindowThreadProcessId(hGameWnd, &dwPID);
    //根据PID获取进程句柄
    HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwPID);

    //从指定进程内存区去读取数据:读取进程,读取的基地址,接受进程地址数据,读取进程字节大小,实际读取字节数
    DWORD dwBaseaddress = 0x006A9EC0;
    DWORD dwAddressValue = 0;
    int t = 1;
    ReadProcessMemory(hProcess, (LPVOID)dwBaseaddress, &dwAddressValue, 4, 0);
    ReadProcessMemory(hProcess, (LPVOID)(dwAddressValue + 0x00000768), &dwAddressValue, 4, 0);
    ReadProcessMemory(hProcess, (LPVOID)(dwAddressValue + 0xE4), &dwAddressValue, 4, 0);
    int Numb = 50;
    for (int i = 0; i < Numb; i++)
    {
        DWORD object = dwAddressValue + 0x50 + i * 0xD8;
        DWORD objectType = dwAddressValue + 0x58 + i * 0xD8;
        DWORD Value1 = 0;
        DWORD Value2 = 0;
        ReadProcessMemory(hProcess, (LPVOID)object, &Value1, 4, 0);
        ReadProcessMemory(hProcess, (LPVOID)objectType, &Value2, 4, 0);
        if (Value1 == 0 && Value2 < 7)
        {
            WriteProcessMemory(hProcess, (LPVOID)object, &t, 4, 0);
        }
    }
    //释放进程
    CloseHandle(hProcess);
}

//无CD函数
void tool_pvz::NoCd_on(bool)
{
    //按钮可用控制
    int ms = 500;
    timer->start(ms);
    ui->btn_auto_on->setEnabled(false);
    ui->btn_auto_off->setEnabled(true);
}
void tool_pvz::NoCd_stop(bool)
{
    timer->stop();
    //按钮可用控制
    ui->btn_auto_off->setEnabled(false);
    ui->btn_auto_on->setEnabled(true);
}

//自动收集函数
void tool_pvz::Auto_on(bool)
{
    //按钮可用控制
    int ms = 500;
    timer1->start(ms);
    ui->btn_sungon->setEnabled(false);
    ui->btn_sungoff->setEnabled(true);
}
void tool_pvz::Auto_stop(bool)
{
    timer1->stop();
    //按钮可用控制
    ui->btn_sungoff->setEnabled(false);
    ui->btn_sungon->setEnabled(true);
}

/***子函数代码结束****/

植物大战僵尸工具

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
由于植物大战僵尸的代码比较复杂,无法在这里全部展示。但是,下面是一个简单的示例代码,可以帮助你了解Qt如何实现类似游戏的功能。 ``` #include <QApplication> #include <QGraphicsView> #include <QGraphicsScene> #include <QGraphicsPixmapItem> #include <QTimer> class Plant : public QGraphicsPixmapItem { public: Plant(QGraphicsItem *parent = nullptr) : QGraphicsPixmapItem(parent) { setPixmap(QPixmap(":/images/plant.png")); } }; class Zombie : public QGraphicsPixmapItem { public: Zombie(QGraphicsItem *parent = nullptr) : QGraphicsPixmapItem(parent) { setPixmap(QPixmap(":/images/zombie.png")); } }; class GameScene : public QGraphicsScene { public: GameScene(QObject *parent = nullptr) : QGraphicsScene(parent) { // 添加植物和僵尸 Plant *plant = new Plant; addItem(plant); Zombie *zombie = new Zombie; addItem(zombie); // 设置定时器,每隔一定时间刷新画面 QTimer *timer = new QTimer(this); connect(timer, &QTimer::timeout, this, &GameScene::update); timer->start(10); } void update() { // 判断植物和僵尸是否相撞 QList<QGraphicsItem *> items = collidingItems(plant); for (QGraphicsItem *item : items) { if (item == zombie) { // 游戏结束 // ... } } } private: Plant *plant; Zombie *zombie; }; int main(int argc, char *argv[]) { QApplication app(argc, argv); // 创建主视图和游戏场景 QGraphicsView view; GameScene scene; view.setScene(&scene); view.setFixedSize(800, 600); view.show(); return app.exec(); } ``` 这个示例代码实现了一个简单的游戏场景,包括一个植物和一个僵尸,每隔一定时间刷新画面并检测植物和僵尸是否相撞。当植物和僵尸相撞时,游戏结束。你可以根据这个示例代码扩展和完善你自己的植物大战僵尸游戏。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凉开水白菜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值