用Python写了个绝地求生(附源码)

如何用python写一个和平精英的游戏代码 和平精英作为高端手游,很受年轻人喜欢,是手机上必备的游戏软件。那有没有想过用python来写一个和平精英的代码呢?接下来小编给大家分享一下。 阅读详情
AI摘要

本文详细介绍了如何使用Python的pynput和pyautogui库,结合OpenCV和SSIM算法,实现绝地求生游戏中的图像识别、键盘监听与鼠标操作,包括装备栏的自动切换和后坐力补偿,以完成不侵入游戏且安全的操作。,

一、概述

1.1 效果

总的来说,这种方式是通过图像识别来完成的,不侵入游戏,不读取内存,安全不被检测。

1.2 前置知识

  1. 游戏中有各种不同的枪械,不同的枪械后坐力不一样,射速也不同。相同的枪械,装上不同的配件后,后坐力也会发生变化。

  2. 枪械的y轴上移是固定的,x轴是随机的,因此我们程序只移动鼠标y轴。x轴游戏中手动操作。

1.3 实现原理简述

  1. 通过python中的pynput模块监听键盘鼠标。

监听鼠标左键按下,这个时候开始移动鼠标。左键抬起,终止移动。监听键盘按键,比如tab键,这时打开背包,截屏开始识别装备栏。

  1. 通过python的pyautogui模块来截屏,可以截取屏幕指定位置。

  2. 通过python的opencv模块来处理截取的图片。

  3. 通过SSIM算法来对比图片相似度,获取到装备栏的武器、配件。

  4. 通过python的pydirectinput操作鼠标移动。

二、详解

2.1 pynput监听键盘

import pynput.keyboard as keyboard  
  
# 监听键盘  
def listen_keybord():  
    listener = keyboard.Listener(on_press=onPressed, on_release=onRelease)  
    listener.start()  

pynput的监听为异步事件,但是会被阻塞,所以如果事件处理事件过长,得用异步处理。

2.2 监听事件

创建了c_equipment类来封装武器信息。重点在tab键的监听,使用异步来检测装备信息。

def onRelease(key):  
    try:  
        if '1' == key.char:  
            c_equipment.switch = 1 #主武器1  
        elif '2' == key.char:  
            c_equipment.switch = 2 #主武器2  
        elif '3' == key.char:  
            c_equipment.switch = 3 #手枪 switch=3的时候不压枪  
        elif '4' == key.char:  
            c_equipment.switch = 3 #刀具  
        elif '5' == key.char:  
            c_equipment.switch = 3 #手雷  
    except AttributeError:  
        if 'tab' == key.name:      #tab键异步操作检测  
            asyncHandle()  
        elif 'num_lock' == key.name:  #小键盘锁用来控制程序开关  
            changeOpen()  
        elif 'shift' == key.name:     
            c_contants.hold = False  

2.3 pyautogui截屏

检测装备,首先要在打开装备栏的时候,截屏。

pyautogui.screenshot(region=[x, y, w, h])

x,y分别表示坐标,w,h表示宽度和高度。截取之后,为了方便对比图片,需要将图片二值化,然后保存到本地。

完整代码如下:

import pyautogui  
  
def adaptive_binarization(img):  
    #自适应二值化  
    maxval = 255  
    blockSize = 3  
    C = 5  
    img2 = cv2.adaptiveThreshold(img, maxval, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, blockSize, C)  
    return img2  
  
# 屏幕截图  
def shotCut(x, y, w, h):  
    im = pyautogui.screenshot(region=[x, y, w, h])  
    screen = cv2.cvtColor(numpy.asarray(im), cv2.COLOR_BGR2GRAY)  
    temp = adaptive_binarization(screen)  
    return temp  
      
def saveScreen():  
    screen1 = shotCut(1780, 125, 614, 570)  
    cv2.imwrite("./resource/shotcut/screen.bmp", screen1)  

2.4 素材准备

屏幕截图处理后如上,在装备识别之前,我们需要先准备很多素材图片用来对比。比如:武器名、枪托、握把、枪口

武器名:

枪托

2.5 裁剪图片

为了方便图片对比,我们需要将截取的装备栏部分的图片裁剪成和素材一样大小的图片。

比如,我们要检测武器一的名字:

#读取之前的截屏  
screen = cv2.imread("./resource/shotcut/screen.bmp", 0)  
#裁剪出武器1名字  
screenWepon1 = screen[0:40, 45:125]  
#拿裁剪的图片和武器素材的目录作为入参,进行对比  
w1Name = compareAndGetName(screenWepon1, "./resource/guns/")  

2.6 对比图片

#对比图片获取名字  
def compareAndGetName(screenImg, dir):  
    #获取目录下所有文件  
    content = os.listdir(dir)  
    name = 'none'  
    max = 0  
    #遍历文件  
    for fileName in content:  
        #使用opencv读取文件  
        curWepone = cv2.imread(dir + fileName, 0)  
        #使用SSIM算法拿到图片相似度  
        res = calculate_ssim(numpy.asarray(screenImg), numpy.asarray(curWepone))  
        #获取相似度最大的  
        if max < res and res > 0.5:  
            max = res  
            name = str(fileName)[:-4]  
    return name  

SSIM算法:

def calculate_ssim(img1, img2):  
    if not img1.shape == img2.shape:  
        raise ValueError('Input images must have the same dimensions.')  
    if img1.ndim == 2:  
        return ssim(img1, img2)  
    elif img1.ndim == 3:  
        if img1.shape[2] == 3:  
            ssims = []  
            for i in range(3):  
                ssims.append(ssim(img1, img2))  
            return numpy.array(ssims).mean()  
        elif img1.shape[2] == 1:  
            return ssim(numpy.squeeze(img1), numpy.squeeze(img2))  
    else:  
        raise ValueError('Wrong input image dimensions.')  

到这,我们就能获取到装备栏1位置的武器名字了。

2.7 操作鼠标

知道武器名字后,同理,我们可以获取到装备的配件。然后,监听鼠标左键按下,然后开始下移鼠标。

我们以m762武器为例:

射速:86, 每一发子弹间隔86毫秒

后坐力:[42, 36, 36, 36, 42, 43, 42, 43, 54, 55, 54, 55, 54, 55, 54, 55, 62, 62, 62, 62, 62, 62, 62, 62,62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 77, 78, 77, 78]

表示每发子弹打出后,需要在y轴下移的距离,用来与后坐力对冲。

def moveMouse():   
    #从识别的数据中,再更具当前选择的武器,获取此刻的武器(比如按下1键,武器装备栏1为m762,那么此时武器就是m762)  
    curWepone = getCurrentWepone()  
    if (curWepone.name == 'none'):  
        return  
    #基础y轴补偿(没任何配件)  
    basic = curWepone.basic  
    #射速  
    speed = curWepone.speed  
    startTime = round(time.perf_counter(), 3) * 1000  
    for i in range(curWepone.maxBullets):  
        #是否可以开火,比如左键抬起,就中断。  
        if not canFire():  
            break  
        #系数,比如按住shift屏息,就需要再原来基础上乘1.33  
        holdK = 1.0  
        if c_contants.hold:  
            holdK = curWepone.hold  
        #乘以系数后实际的移动距离  
        moveSum = int(round(basic[i] * curWepone.k * holdK, 2))  
        while True:  
            if (moveSum > 10):  
                #移动鼠标  
                pydirectinput.move(xOffset=0, yOffset=10, relative=True)  
                moveSum -= 10  
            elif (moveSum > 0):  
                pydirectinput.move(xOffset=0, yOffset=moveSum, relative=True)  
                moveSum = 0  
            elapsed = (round(time.perf_counter(), 3) * 1000 - startTime)  
            if not canFire() or elapsed > (i + 1) * speed + 10:  
                break  
            time.sleep(0.01)  

代码中的while循环:

其实再第一发子弹射出后,我们只需要下移42的距离,然后计算出需要等待的时间(0.086-移动鼠标的时间),然后第二发子弹射出,以此类推。

while循环的作用是防止屏幕抖动太厉害。因为直接移动42的距离,游戏中抖的厉害,所以我们再86毫秒的间隔里分了多次来移动鼠标。

python中的sleep函数不准确,所以我们要自己来计时,防止错过每发子弹的时间间隔。不准确还有个好处,随机,正好不用自己来随机防止检测了。

三、最麻烦的部分

每个枪的后坐力都不一样,我们需要自己去游戏的训练场,一发发子弹的调试,获取准确的补偿数据。

以上就是“用Python写了个绝地求生(附源码)”的全部内容,希望对你有所帮助。
​
​关于Python技术储备

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

在这里插入图片描述

二、Python必备开发工具

img

三、Python视频合集

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

img

四、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

img

五、Python练习题

检查学习结果。

img

六、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

img

最后祝大家天天进步!!

上面这份完整版的Python全套学习资料已经上传至优快云官方,朋友如果需要可以直接微信扫描下方优快云官方认证二维码免费领取【保证100%免费】。

用Python可视化分析绝地求生上万场游戏数据,教你做最强吃鸡攻略啦~ 导语 大吉大利,今晚吃鸡~ 今天跟朋友玩了几把吃鸡,经历了各种死法,还被嘲笑说论女生吃鸡的100种死法,比如被拳头抡死、跳伞落到房顶边缘摔死 、把吃鸡玩成飞车被车技秀死、被队友用燃烧瓶烧死的。这种游戏对我来说就是一个让我明白原来还有这种死法的游戏。 但是玩归玩,还是得假装一下我沉迷学习,所以今天就用吃鸡比赛的真实数据来看看如何提高你吃鸡的概率。 那么我们就用 Python 和 R 做数据分析来回答以下的灵魂发问? 想领取更多完整源码跟Python学习资料可点击这行字体 首先来看下数据: . 阅读详情

相关推荐

用Python做一个绝地求生压枪版

总的来说,这种方式是通过图像识别来完成的,不侵入游戏,不读取内存,安全不被检测。

Trb401012的博客 1866

【Python】绝地求生PUBG等FPS游戏辅助压枪软件脚本编写

【Python】绝地求生PUBG等FPS游戏辅助压枪软件脚本编写

Mike Zhou的博客 5733

5-11最新绝地求生源码-编译可用.zip

5-11最新绝地求生源码-编译可用.zip,

绝地求生可以这样制作 (Python 版)

总的来说,这种方式是通过图像识别来完成的,不侵入游戏,不读取内存,安全不被检测。

m0_59596937的博客 3053

PUBG引擎源码开源,自行更新.rar

PUBG引擎源码开源,自行更新.rar

PUBG引擎源码.7z

PUBGC++引擎源码

c++游戏 吃鸡

【代码】c++游戏-----吃鸡。

chenjiehao888的博客 5万+

PUBG游戏引擎源码开源自行更新资源

资源下载链接为: https://pan.quark.cn/s/3d8e22c21839 在游戏开发领域,一款热门游戏引擎源码的开源无疑是极具影响力的事件。《PlayerUnknown’s Battlegrounds》(简称PUBG,即绝地求生)作为全球广受欢迎的大逃杀类型游戏,其引擎源码的开源为开发者们带来了极为珍贵的学习与研究资源。本文将深入探讨PUBG引擎源码开源的意义,助力开发者更好地掌握和运用这些源码。 要理解PUBG游戏背后的开发基础,需先了解其所采用的引擎。PUBG基于虚幻引擎(Unreal Engine)开发,该引擎由Epic Games打造,凭借强大的图形渲染、物理模拟以及实时编辑工具等优势,广泛应用于众多游戏及虚拟现实项目。PUBG引擎源码的开源,使开发者能够深入了解虚幻引擎在大规模多人在线游戏开发中的具体应用细节,这对于优化游戏性能、提升用户体验具有极其重要的价值。 开源的PUBG引擎源码可能涵盖以下关键内容: 图形渲染:PUBG源码可能详细展示了地形、建筑、光照、阴影以及粒子效果的处理算法。这些内容对于开发者学习高级图形技术至关重要,通过研究源码,开发者能够掌握在复杂大规模场景中实现高效渲染的方法。 网络同步:在网络同步方面,PUBG源码可能揭示了其独特的优化策略,如延迟补偿、状态同步以及数据压缩等技术。这些技术对于解决多人在线游戏中的网络问题具有重要参考价值,能够帮助其他开发团队优化网络性能,提升游戏的流畅度和稳定性。 物理引擎:PUBG的物理引擎负责处理游戏中的碰撞检测、物体运动和交互。源码开源后,开发者可以学习如何构建更真实的物理模拟,从而增强游戏的真实感和沉浸感。 AI系统:游戏中的AI系统控制着敌人的行为和策略。PUBG的AI源码可能会展示如何设计智能敌人,以及如何实现大规模玩家群体的动态平衡。这对于开发者设计更具挑战性和趣味性的游戏AI具

DirectX11 输入设备——DirectInput检测鼠标、键盘状态

DirectX11 输入设备——DirectInput1. 什么是DirectInput? 由于windows应用程序的消息机制,Windows 成为了在应用程序和硬件之间的一堵无形的墙。 消息队列记录着各种事件,比如鼠标移动,键盘输入,或来自于操作系统本身的事件。这种获取事件的方式对于 Windows 应用程序效率足够了,但是对于游戏来说却不够快。也有的开发者转向使用另一个 Windows 函

梦幻DUO的游戏开发之路 1万+

pydirectinput:使用直接输入的Windows的Python鼠标和键盘输入自动化

PyDirectInput 该库旨在通过使用DirectInput扫描代码和更现代的SendInput()win32函数来复制PyAutoGUI鼠标和键盘输入的功能。 PyAutoGUI使用虚拟键码(VK)以及不赞成使用的mouse_event()和keybd_event()win32函数。 您可能会发现PyAutoGUI在某些应用程序中不起作用,特别是在视频游戏和其他依赖DirectX的软件中。 如果您遇到这种情况,请尝试一下该库! pip install pydirectinput 该软件包旨在与PyAutoGUI结合使用。 您可以继续使用PyAutoGUI的所有很酷的功能,并简单地用PyDirectInput代替无效的输入。 功能接口相同,但是此程序包可能未实现所有可选参数和功能。 想看到缺少的功能吗? 为什么不自己尝试一下呢! 我欢迎所有提出要求,并很高兴与您合作以提出完善

易语言绝地求生全套加速器源码

易语言绝地求生全套加速器源码易语言源码 带详细设置说明 前端跟后端以及php加密的文件都带 可以自己开发使用

《绝地求生:大逃杀》百万级别数据分析项目,还有源码+数据

98k消音,了解一下~众所周知,2017年3月份,绝地求生以黑马之姿横空出世迅速超越了DOTA2、CS:GO等热门游戏成为了steam上最热门的游戏,就算游戏本体需要花98块钱购买也没能...

简说Python的博客 1347

YOLOv8训练PUBG检测[可运行源码]

本文详细介绍了如何使用YOLOv8模型对绝地求生PUBG检测数据集进行训练、评估和可视化的完整流程。数据集包含9043张图片,1个类别(person),按照8:2比例划分为训练集(7234张)和验证集(1809张)。文章从环境准备、数据集配置、模型训练、评估到可视化预测结果,提供了详细的步骤和代码示例。此外,还介绍了模型优化的方法,如调整超参数、使用预训练模型、增加数据量和模型融合等。最后,提供了完整的训练、评估和可视化脚本,帮助读者快速实现目标。

利用Python做绝地科学家(外挂篇)

i春秋作家:奶权 前言 玩吃鸡时间长的鸡友们 应该都知道现在的游戏环境非常差 特别在高端局 神仙满天飞 搞得很多普通玩家非常没有游戏体验 因为吃鸡的火爆 衍生出了一条巨大的外挂利益链 导致市面上出现了各式各样的外挂http://news.17173.com/z/pubg/content/12072017/144924727.shtml 正是因为现在的神仙满天飞 像我这种...

dfdhxb995397的博客 423

WorldQuant Brain Alpha 生成器

一个自动化工具,通过参数优化和回测来挖掘高质量的量化交易 Alpha 因子,并自动提交符合标准的因子。

weixin_37582383的博客 1万+

IP白名单校验

支持格式: 1、127.0.0.1 // 指定固定IP 2、127.0.0.1-127.0.0.128 // 可使用“-”来表示一个IP区间,支持跨IP段(一般不会出现这种情况,跨IP段则配置多个规则) 3、127.0.* // 2~4位IP段可...

2199

年赚百万游戏主播!玩转Python后:几行代码轻松“吃鸡” 附源码

大吉大利,准备吃鸡! 你是否玩儿了好几个月的吃鸡,依旧是落地成盒? 是否常常不得知自己如何被打、莫名其妙的挂了? 还没有吃过鸡/(ㄒoㄒ)/~~总是不明不白的就被别的玩家杀了 !!!∑(゚Д゚ノ)ノ能进前二十就已经很不错了 今天小编带来了福利奥O(≧▽≦)O 大吉大利,今晚吃鸡~ 打人时要坚持一个原则,先打对你来说最危险的目标。 (不一定是近点的目标,大部分情况是先近...

weixin_34064653的博客 372

使用GitLab+Drone CI持续集成自动部署web项目,图文详细

kind: pipeline # 定义对象类型,还有secret和signature两种类型 type: docker # 定义流水线类型,还有kubernetes、exec、ssh等类型 name: mall-tiny-drone # 定义流水线名称 steps: # 定义流水线执行步骤,这些步骤将顺序执行 - name: package # 流水线名称 image: maven:3-jdk-8 # 定义创建容器的Docker镜像 volumes: # 将容器内目录挂载到宿主机,仓库

4105

利用python进行吃鸡(绝地求生)可视化分析,2024年最新面试官问的问题很简单,说明什么呢

这是我花了几天的时间去把Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。(img-hL3qphQ0-1713471818992)]4c (备注python)**

891

openmediavault(OMV) (1)安装部署

EXT3(Third Extended File System): EXT3 是 Linux 中广泛使用的日志文件系统,是 EXT2 文件系统的升级版本。这里可以根据自己的需求进行设置,目前只设置了自动登出为1天,为方便后续配置使用,其他设置可根据自己的具体需求进行设置。通过cd 命令进入到我们的raid存储中,通过ls发现里面没有任何的数据,因为我们的raid存储中还未创建任何数据。我的系统要安装在100G的磁盘上,故选择100G的磁盘,实际可以根据具体情况选择。

Monster✺◟(∗❛ัᴗ❛ั∗)◞✺的博客 2168

AUTOSAR 导入DBC ISOLAR工程配置

ISOLAR工程配置-dbc导入

汽车电子电气 2407

最新利用python进行吃鸡(绝地求生)可视化分析,2024年最新头条面试后多久给结果

不知道你们用的什么环境,我一般都是用的Python3.6环境和pycharm解释器,没有软件,或者没有资料,没人解答问题,都可以免费领取(包括今天的代码),过几天我还会做个视频教程出来,有需要也可以领取~给大家准备的学习资料包括但不限于:Python 环境、pycharm编辑器/永久激活/翻译插件python 零基础视频教程Python 界面开发实战教程Python 爬虫实战教程Python 数据分析实战教程python 游戏开发实战教程Python 电子书100本。

2401_84572677的博客 398

OSError We couldn‘t connect to https://huggingface.co to load file, couldn‘t find it chatglm3-6b解决方案

本文主要介绍了OSError: We couldn’t connect to https://huggingface.co to load this file, couldn’t find it in the cached files and it looks like THUDM/chatglm3-6b is not the path to a directory containing a file named config.json.解决方案,希望能对学习python的同学们有所帮助。

weixin_43178406的博客 5万+

我用Python开发了一款软件,完成了舔狗的绝地反杀!(代码开源)

在一个阳光明媚的清晨,我打开窗户呼吸了一口新鲜空气。 阳光灿烂,岁月静好,又是一个约女朋友出去爬山吃饭看电影的好日子。 想到女朋友的大眼睛,我脸上不禁洋溢起了幸福的微笑。 打开微信,给女朋友发出去一个美好的邀约。 等等,这为什么有一个感叹号??? 我的消息被拒收了?? 笑容凝固在了我的脸上。 什么?她又一次拉黑了我? 我开始反省。 我昨天吃饭买单的时候找钱包找的太久了被她误认为是...

qq_40558336的博客 637

AI智能体丨使用Coze一键生成爆款书单视频,3个月内获赞131.1w!(附保姆级教程)

这篇教程详细介绍了如何使用扣子(Coze)平台的AI智能工作流批量制作爆款书单视频。通过自动化流程,只需1-2分钟即可生成45-50秒的书单视频,效率提升近百倍。工作流包含文案生成、音频合成、图片素材获取、视频剪辑等全流程,支持随机生成8本书单、自动提取金句、智能配音等功能。教程提供了完整的操作步骤,包括剪映草稿配置、特效添加等细节,并附体验链接和示例效果。最终生成的视频包含书单展示、金句字幕、背景音乐等元素,适合书单号运营者快速批量产出内容。

李同学Lino的博客 2354

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

上一篇: 这几个Python库已经淘汰了,请不要再用了!
下一篇: 我的实战经验分享:深入浅出Python数据库操作
壹只小小码农
博客等级 码龄5年 8101粉丝 1334原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值