C++学习记录vs2013 植物大战僵尸mfc辅助大体框架编写

首先新建mfc项目在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
然后加上几个按钮
在这里插入图片描述
在这里插入图片描述
改一下名字大概改成这样
在这里插入图片描述
然后双击打开进程按钮进入代码区开始实现功能
在这里插入图片描述

#include<iostream>
#include<windows.h>
#include<stdio.h>
#include<stdlib.h>

这几个是添加进去的
然后写一个类以及 方法的实现
写在第一个按钮代码前面就行
注释的是需要根据情况自己改动的
其他的可以当作模板直接使用

class plant
{
public:
	DWORD pid = 0;
	DWORD sunaddress = 0x00779618;  //阳光基址
	DWORD cd = 0x004B4CA1;     //无冷却基址
	DWORD size = 0;       
	DWORD sunfirst = 0x868;     //阳光一级偏移
	DWORD jbfirst = 0x950;      //金币一级偏移
	DWORD jbsecond = 0x50;      //金币二级偏移
	DWORD sunsecond = 0x5578;    //阳光二级偏移
	DWORD sunnumber = 0;
	DWORD jbnumber = 0;
	DWORD wucd = 0;
	DWORD jbvalue;
	DWORD sunfirstvalue;
	DWORD sunaddressvalue;
	int swant = 9999;
	int jwant = 9999;
	int i = 21513670;
	void getpvzid();
	HANDLE getjb();
	void gaiyg();
	void gaijb();
}p1;
void plant::getpvzid()
{
	HWND PVZ=FindWindow(L"MainWindow", L"Plants vs. Zombies 1.2.0.1073 RELEASE");  //查找进程 可以用spy++
	GetWindowThreadProcessId(PVZ, &pid);  //获取进程句柄
}
HANDLE plant::getjb()
{
	HANDLE jubing = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);
	return jubing;
}
void plant::gaiyg()
{
	ReadProcessMemory(p1.getjb(), (LPVOID)p1.sunaddress, &p1.sunaddressvalue, sizeof(DWORD), &p1.size);
	ReadProcessMemory(p1.getjb(), (LPVOID)(p1.sunaddressvalue + p1.sunfirst), &p1.sunfirstvalue, sizeof(DWORD), &p1.size);
	ReadProcessMemory(p1.getjb(), (LPVOID)(p1.sunfirstvalue + p1.sunsecond), &p1.sunnumber, sizeof(DWORD), &p1.size);
	WriteProcessMemory(p1.getjb(), (LPVOID)(p1.sunfirstvalue + p1.sunsecond), &p1.swant, sizeof(DWORD), &p1.size);
}
void plant::gaijb()
{
	ReadProcessMemory(p1.getjb(), (LPVOID)p1.sunaddress, &p1.sunaddressvalue, sizeof(DWORD), &p1.size);
	ReadProcessMemory(p1.getjb(), (LPVOID)(p1.sunaddressvalue + p1.jbfirst), &p1.jbvalue, sizeof(DWORD), &p1.size);
	ReadProcessMemory(p1.getjb(), (LPVOID)(p1.jbvalue + p1.jbsecond), &p1.jbnumber, sizeof(DWORD), &p1.size);
	WriteProcessMemory(p1.getjb(), (LPVOID)(p1.jbvalue + p1.jbsecond), &p1.jwant, sizeof(DWORD), &p1.size);
}

然后开始写打开进程按下按钮实现的功能
在这里插入图片描述

p1.getpvzid();
	if (p1.getjb() == NULL)
	{
		MessageBox(L"打开进程失败");
	}
	else
	{
		MessageBox(L"打开进程成功");
	}

然后双击无cd修改植物无cd
在这里插入图片描述

if (p1.getjb() == NULL)
	{
		MessageBox(L"请先获取进程");
	}
	else
	{
		WriteProcessMemory(p1.getjb(), (LPVOID)(p1.cd), &p1.i, sizeof(DWORD), &p1.size);
		MessageBox(L"已修改");
	}

依次修改阳光9999
在这里插入图片描述

if (p1.getjb() == NULL)
	{
		MessageBox(L"请先获取进程");
	}
	else
	{
		p1.gaiyg();
		MessageBox(L"已修改");
	}

改金币
在这里插入图片描述

if (p1.getjb() == NULL)
	{
		MessageBox(L"请先获取进程");
	}
	else
	{
		p1.gaijb();
		MessageBox(L"已修改");
	}

这样一个mfc的植物大战僵尸的小外挂就好了
控制台版本

#include<iostream>
#include<windows.h>
#include<stdio.h>
#include<stdlib.h>
using namespace std;
int main()
{
	n:
    	HWND plant = FindWindow(L"MainWindow", L"Plants vs. Zombies 1.2.0.1073 RELEASE");//查找窗口
		DWORD pid = 0;//定义窗标识
		GetWindowThreadProcessId(plant, &pid);//取窗口表示存入pid
		if (plant == NULL && pid == NULL)//判断是否找到窗口标识
		{
			cout << "打开进程失败" << endl << "错误代码" << GetLastError() << endl;
		}
		else
		{
			cout << "************************已找到进程************************" << endl;
		} 	
		HANDLE jubing = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);
		if (jubing == 0)
		{
			cout << "打开进程失败" << endl << "错误代码" << GetLastError() << endl;
		}
		else
		{
			cout << "************************已获取进程************************" << endl;
			DWORD sunaddress = 0x00779618;   //阳光基址
			DWORD cd = 0x004B4CA1;     //无cd基址
			DWORD sunaddressvalue = 0;
			DWORD size = 0;
			if (NULL == ReadProcessMemory(jubing, (LPVOID)sunaddress, &sunaddressvalue, sizeof(DWORD), &size))
			{
				cout << "获取静态基址失败" << endl << "错误代码" << GetLastError() << endl;
			}
			DWORD sunfirst = 0x868;  // 阳光一级偏移
			DWORD jbfirst = 0x950;  //金币一级偏移
			DWORD jbsecond = 0x50;   //金币二级偏移
			DWORD sunfirstvalue = 0;
			if (NULL == ReadProcessMemory(jubing, (LPVOID)(sunaddressvalue + sunfirst), &sunfirstvalue, sizeof(DWORD), &size))
			{
				cout << "一级偏移获取失败" << endl << "错误代码" << GetLastError() << endl;
			}
			DWORD sunsecond = 0x5578;   //阳光二级偏移
			DWORD sunnumber = 0;
			DWORD jbnumber = 0;
			DWORD jbvalue = 0;
			DWORD wucd = 0;
			ReadProcessMemory(jubing, (LPVOID)(sunfirstvalue + sunsecond), &sunnumber, sizeof(DWORD), &size);
			ReadProcessMemory(jubing, (LPVOID)(sunaddressvalue + jbfirst), &jbvalue, sizeof(DWORD), &size);
			ReadProcessMemory(jubing, (LPVOID)(jbvalue + jbsecond), &jbnumber, sizeof(DWORD), &size);
			ReadProcessMemory(jubing, (LPVOID)(cd), &wucd, sizeof(DWORD), &size);
			if (sunnumber < 0)
			{
				cout << "二级偏移获取失败" << endl << "错误代码" << GetLastError() << endl;
			}
			int swant;
			int jwant;
			int i=21513670;
			printf("阳光值:%d\n", sunnumber);
			printf("金币值:%d\n", jbnumber);
			WriteProcessMemory(jubing, (LPVOID)(cd), &i, sizeof(DWORD), &size);
			cout <<"植物无冷却已开启"<<endl<< "请输入想修改的阳光值:";
			scanf("%d", &swant);
			WriteProcessMemory(jubing, (LPVOID)(sunfirstvalue + sunsecond), &swant, sizeof(DWORD), &size);
			cout << "请输入想修改的金币值:";
			scanf("%d", &jwant);
			WriteProcessMemory(jubing, (LPVOID)(jbvalue + jbsecond), &jwant, sizeof(DWORD), &size);
		}
		system("pause");
		goto n;
}
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
编写植物大战僵尸的游戏需要一定的游戏开发经验和C++编程知识。以下是一个简单的示例,展示了如何使用C++编写植物大战僵尸的基本功能: ```cpp #include <iostream> #include <cstdlib> #include <ctime> // 植物类 class Plant { public: int health; // 植物的生命值 Plant() { health = 100; } virtual void attack() = 0; // 抽象攻击方法 }; // 僵尸类 class Zombie { public: int health; // 僵尸的生命值 Zombie() { health = 100; } virtual void attack() = 0; // 抽象攻击方法 }; // 向日葵类 class Sunflower : public Plant { public: void attack() override { std::cout << "向日葵发射阳光攻击!" << std::endl; // 具体的攻击逻辑 } }; // 豌豆射手类 class Peashooter : public Plant { public: void attack() override { std::cout << "豌豆射手发射豌豆攻击!" << std::endl; // 具体的攻击逻辑 } }; // 普通僵尸类 class NormalZombie : public Zombie { public: void attack() override { std::cout << "普通僵尸发起普通攻击!" << std::endl; // 具体的攻击逻辑 } }; // 高级僵尸类 class AdvancedZombie : public Zombie { public: void attack() override { std::cout << "高级僵尸发起高级攻击!" << std::endl; // 具体的攻击逻辑 } }; int main() { srand(time(nullptr)); // 初始化随机数种子 Plant* plant = nullptr; Zombie* zombie = nullptr; // 创建一个向日葵和一个普通僵尸 plant = new Sunflower(); zombie = new NormalZombie(); plant->attack(); zombie->attack(); delete plant; delete zombie; return 0; } ``` 这只是一个简单的示例,实际上,开发完整的植物大战僵尸游戏需要更多的功能和逻辑。你可以根据自己的需求和创意进行扩展和修改。希望对你有所帮助!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值