Python实战项目(二)写一个枪林弹雨的辅助外挂

Python实战项目(二)用python写枪战游戏-枪林弹雨的辅助程序

声明:本文章纯属个人学习所作,切勿用于非法渠道。转载请注明原文链接。

最近闲得无聊,在qq微端上找游戏玩,偶然看见一个枪战游戏,名字叫枪林弹雨,体验一把之后,我只想吐槽这个游戏基本上都是在抄袭生死狙击的游戏模式,里面有外挂,各种锁血飞天遁地外挂搞得我心态快炸,好在不是很多,但是我的狙却玩的很菜,遇见大神打到我怀疑是不是开挂,一气之下,我觉得,我要写个辅助(比游戏中的外挂低级一点)

源代码放在文章最后(有些代码内容可能需要修改,所以建议你先看完文章再复制代码),注意适当游戏,切勿沉迷~

游戏界面如下:
Python实战项目(二)写一个枪林弹雨的辅助外挂_第1张图片

(一)分析

我先认清一下自己的实力,emmmm…开启分析模式
我只能做到分析屏幕狙击枪瞄准镜准星周围某点的rgb色值,然后根据对战人物衣服的rgb色值,进行比较,确认后调用pyautogui瞬间点击鼠标,击杀对手
但是这样也会有几个缺点:

  • 对于分辨率不同的电脑,瞄准镜准星所在坐标肯定不同,这就需要自己亲自动手得出坐标
  • 在游戏中几乎所有玩家都是两种人物衣服,所以这样的话就会出现将队友误判为敌人而开枪浪费子弹(解决方法:尽量不拿枪对着队友)
  • 某些地图中颜色与人物衣服相似

这些缺点要靠自己来测量与避免,这里就不再用程序实现。

(二)准备

这是两个常用人物
Python实战项目(二)写一个枪林弹雨的辅助外挂_第2张图片 Python实战项目(二)写一个枪林弹雨的辅助外挂_第3张图片

人物图片展示,分析rgb色值(qq的屏幕截图有这个功能),取色值时被我发现人物的全身几乎所有rgb色值元组中元素全部小于100(除了一些露出肉的部分和枪械的颜色),这是一个可以判断的重要条件。
我的电脑分辨率为1920*1080,测得准星坐标大约在(966,,555)附近
此时需要估计几个范围区域,分别是(956,555)(966,545)(966,565)(956,545),你在使用过程中要注意自己测得的坐标也要试着将纵横坐标减去一些,预估几个点区域。

请确保已经安装pyautogui库!

(三)开始编写!~

首先声明一些要用到的量,导入ctypes和pyautogui

from ctypes import * 
import time,pyautogui
#坐标列表,可以根据你的测量结果进行更改,越准确越好
pos_list = [(956,555),(966,545),(966,565),(956,,545)]
#概率标记
mark = 0

写返回rgb三元组的函数,这里用到了ctypes库

def get_color(x, y):
    gdi32 = windll.gdi32
    user32 = windll.user32
    hdc = user32.GetDC(None)  # 获取颜色值
    pixel = gdi32.GetPixel(hdc, x, y)  # 提取RGB值
    r = pixel & 0x0000ff
    g = (pixel & 0x00ff00) >> 8
    b = pixel >> 16
    return (r, g, b)

程序主循环体一直运行传参到get_color()函数,并处理返回指定坐标的rgb三元组,如果每个元素值小于100,则mark的值加一,
当然,还需要考虑如果这四个坐标参数的落点概率问题,设置如果mark/4即落点概率大于等于50%时就可以进行射击,否则就不射击。

#设置等待15秒玩家开启全屏模式
time.sleep(15)
while True:
	for i in pos_list:
		#获得rgb值
		t = get_color(i[0],i[1])
		#处理rgb值,判断元素相加是否小于300
		if t[0]<100 and t[1]<100 and t[2]<100:
			mark+=1
		else:
			continue
	if mark/4 >= 0.5:
		pyautogui.click()		

整体代码(强烈建议运行时游戏开启全屏模式):

from ctypes import * 
import time,pyautogui
#坐标列表,可以根据你的测量结果进行更改,越准确越好
pos_list = [(956,555),(966,545),(966,565),(956,,545)]
#概率标记
mark = 0

def get_color(x, y):
    gdi32 = windll.gdi32
    user32 = windll.user32
    hdc = user32.GetDC(None)  # 获取颜色值
    pixel = gdi32.GetPixel(hdc, x, y)  # 提取RGB值
    r = pixel & 0x0000ff
    g = (pixel & 0x00ff00) >> 8
    b = pixel >> 16
    return (r, g, b)
    
time.sleep(15)
while True:
	for i in pos_list:
		#获得rgb值
		t = get_color(i[0],i[1])
		#处理rgb值,判断元素相加是否小于300
		if t[0]<100 and t[1]<100 and t[2]<100:
			mark+=1
		else:
			continue
	if mark/4 >= 0.5:
		pyautogui.click()	

这是一个简单的游戏辅助(好不好用我不敢说),但只应用了如下知识:

  • 使用ctypes库获取屏幕某点坐标rgb色值
  • pyautogui操纵鼠标点击
  • 函数的传参与返回值

到这里就结束啦~后续有时间的话,我再优化一下在上面说到的那几个缺点。

你可能感兴趣的:(Python项目实战,python,游戏)