不要迷恋我,虽然我利用Python来耍植物大战僵尸,威力加强版

news/2024/11/23 3:16:45/

前言

==

大家好,我叫善念。上篇文章我许了一个愿,就是想让大家多多关注我,然后我的粉丝就蹭蹭的涨了好几百,谢谢大家的厚爱。可是我发现粉丝是涨了,三连变少了,谢谢大家这次给我三连,我一定再接再厉。有问题留在评论区,我会一一回复,谢谢大家!

这次要做的是修改一款单机游戏的数据,学过C语言的朋友肯定经常会看到有些老师讲这个案例,就是《植物大战僵尸》这个课题,不过此文我将带大家利用Python来实现(2019原创课题,附视频教程)。

游戏的安装

=====

关于安装的这一块…我以前是在网站上下载的,现在再去找估计随便百度下载一个就可以了,这里就用我之前的吧

安装下载后切记要避免点到一些广告上去,和一些浏览器的锁定勾选记得取消掉。 进入游戏是全屏,不方便我们观察效果以及编写程序,可以在选项中取消勾选全屏

思路

==

一句话总结


我的理解就是,所有的程序的本质都是变量与数值的集合

比如说咱们玩的游戏它也是一个程序吧,游戏的角色血量、蓝条是不是都是一个数值储存在变量内,那么如果我们找到存放这个数值的变量(也可以叫做地址),修改这个变量的值,那么是不是就可以做到给咱们得人物加血量、修改人物等级的一系列操作。

大概的思路


首先确定修改哪一款游戏的数据,然后确定修改游戏的哪一个数据,然后去寻找这个游戏内这个数据的地址,然后去修改这个数据。

听起来有点绕。好吧,是我的语文学习的太差啦

实战

==

确定修改哪一款游戏的数据


这里需要利用到一个句柄查看工具。

把放大镜拖动到游戏的标题上,就可以查看到这个窗口的所有信息

可以看下咱们任务管理器中的进程ID是否也是39156

代码

import win32process

进程模块

import win32gui

界面

none 窗口的类名 窗口的ID

window_handle = win32gui.FindWindow(None, “植物大战僵尸中文版”) #Pyspy++ 窗口句柄win32gui.

print(window_handle)

process_id = win32process.GetWindowThreadProcessId(window_handle)[1] #取进程ID

print(process_id)

process_handle = win32api.OpenProcess(0x1F0FFF, False, process_id)#进程句柄

进程句柄是否可以被子进程继承,一般选false(不可被继承)

#这种是用线程内核对象的默认安全属性, 子进程不能继承父进程的句柄,不可以继承,

则子进程是不可以通过句柄访问改内核对象。

print(process_handle)

关于这个代码我讲解一下 ,如何确定一款游戏是由进程的句柄来判断的,而我们手动取到游戏的窗口ID 与类名后,可以得到进程ID,由进程ID可以得到游戏句柄。

地址的寻找


阳光总值150, 种植一个豌豆需要100,非常不够用。咱们现在需要实现的功能是无限阳光,达到无限种植豌豆的效果。这里需要用到CE软件。

视频教程

Python永远的神,实战开发游戏内存辅助!

修改数据


由于咱们是用Python这门编程语言来实现的,这里需要用Python去调C,用到动态链接库,所以要配置一下内核模块(动态链接库kernel32.dll),C:\Windows\System32\kernel32.dll放到这个目录下。

代码

import win32api

系统模块

import win32process

进程模块

import win32gui

界面

import ctypes

C语言调用类型

python中使用ctypes模块可以在python中直接调用C/C++。首先要将C/C++编译成动态库

(.dl或.so),之后python中调用即可。

C类型 调用约定

kernel32.WriteProcessMemory(int(process_handle),0x1C0A4F98,byref(c_int(1000)),4,byref(c_int(0)))

kernel32 = ctypes.wi

ndll.LoadLibrary(r"C:\Windows\System32\kernel32.dll ")#加载内核模块 动态链接库

date1 = ctypes.c_long()

kernel32.ReadProcessMemory(int(process_handle),0x006A9EC0,ctypes.byref(date1),4,None)#None读取的一个数据的大小 尺寸 长度

缓冲区,各种语言的文本要求不一样,为了兼容,那么自定义一个文本

地址会变,但是里面存储的数据不会变。

print(date1.value)

date2 = ctypes.c_long()

kernel32.ReadProcessMemory(int(process_handle),date1.value+0x768,ctypes.byref(date2),4,None)

print(date2.value)

date3 = ctypes.c_long()

kernel32.ReadProcessMemory(int(process_handle),date2.value+0x5560,ctypes.byref(date3),4,None)

print(date3.value)

sun = input(“请输入你要改变的阳光值:”)

kernel32.WriteProcessMemory(int(process_handle),date2.value+0x5560,ctypes.byref(ctypes.c_long(int(sun))),4,None)

kernel32.WriteProcessMemory(int(process_handle),date2.value+0x5560,ctypes.byref(ctypes.c_long(int(sun))), 4, None)

关闭进程

kernel32.CloseHandle(int(process_handle))

最后

不知道你们用的什么环境,我一般都是用的Python3.6环境和pycharm解释器,没有软件,或者没有资料,没人解答问题,都可以免费领取(包括今天的代码),过几天我还会做个视频教程出来,有需要也可以领取~

给大家准备的学习资料包括但不限于:

Python 环境、pycharm编辑器/永久激活/翻译插件

python 零基础视频教程

Python 界面开发实战教程

Python 爬虫实战教程

Python 数据分析实战教程

python 游戏开发实战教程

Python 电子书100本

Python 学习路线规划

pycharm解释器,没有软件,或者没有资料,没人解答问题,都可以免费领取(包括今天的代码),过几天我还会做个视频教程出来,有需要也可以领取~

给大家准备的学习资料包括但不限于:

Python 环境、pycharm编辑器/永久激活/翻译插件

python 零基础视频教程

Python 界面开发实战教程

Python 爬虫实战教程

Python 数据分析实战教程

python 游戏开发实战教程

Python 电子书100本

Python 学习路线规划


http://www.ppmy.cn/news/545618.html

相关文章

Qt开发植物大战僵尸第一篇

Qt学习与开发 “ 第一次写博客,尝试将自己的思路记录下来。” Qt环境配置 一个挺巧妙的机会能接触到Qt,Qt是一个构建人机交互界面的很好的工具,首先我们需要配置好Qt环境。Qt下载链接link,一般选择5.9以上版本,然后安…

使用Python对植物大战僵尸学习研究

根据上一篇 使用使用Python学习win32库进行内存读写 中,使用Python win32库,对一款游戏进行了读内存 操作。 今天来写一下对内存进行写的操作 正文 要进行32位的读写,首先了解一下要用到的几个函数,通过百度找到的,大多都是C/…

Python开发植物大战僵尸游戏(附github项目地址)

今天给大家分享一个仿《植物大战僵尸》的小游戏开发案例。 开发思路 引入需要的模块,配置图片路径,设置界面宽高背景颜色,创建游戏主入口。 #1引入需要的模块 import pygame import random #1配置图片地址 IMAGE_PATH ‘imgs/’ #1设…

Python 可轻松开发植物大战僵尸游戏(附动态演示+源码分享)

大家好,今天给大家下面给大家分享用 Python 实现植物大战僵尸的案例,喜欢记得收藏、点赞、关注。 文末提供源码分享,尽情去玩吧。 下面是部分代码实现逻辑,完整版代码,文末获取 1.引入需要的模块,配置图片…

mac系统升到11后没游戏玩?植物大战僵尸中文版玩起来啊

《植物大战僵尸》是一款非常经典塔防游戏,玩家需要通过种植各种各样的植物,来抵御相应的危险。别看敌人是僵尸就以为它们没有脑子(它们确实喜欢吃人的脑子),然而这些僵尸都是极其狡猾的,它们会穿护具、会用…

基于C++实现植物大战僵尸(控制台版)【100010530】

植物大战僵尸(控制台版)- PVZ 一、概述 1.1 主要内容: 以塔防游戏 基础参考,实现了运行在 Windows 控制台下的一个游戏。玩家目标是合理利用阳光、植物布局,守住一波一波的僵尸的攻击,击杀僵尸&#xff…

C1任务01-修改《植物大战僵尸》游戏存档

文章目录 1、作业 2、说明 3、任务实现过程 4、总结 1、作业 1、作业任务 1、修改《植物大战僵尸》的存档文件,将一个新用户的进度直接修改到5-2关 2、将金钱(能量)直接修改到10000 2、说明 1、任务实现工具 1、游戏:《植物…

用Qt制作一个魔改版植物大战僵尸(基于飞机大战)

目录 说在前面项目设计目的总体设计功能特点开发环境模块说明 详细设计界面设计声音设计玩法设计 部分较难功能的实现子弹产生、运动与内存管理碰撞检测 结语源代码 说在前面 这不是作业,是作品 游戏成品体验可以在这里下载: https://pan.baidu.com/s/1U…