江城创业记吧 关注:885贴子:2,248
  • 4回复贴,共1

江城龙舟python 脚本(模拟的方向键在游戏里面不起效果)

只看楼主收藏回复

# 江城龙舟python脚本,
# 模拟的方向键在游戏里面不起效果,会失误
# 盯着手动按方向键高难度拿个冠军还是很容易的
# 库自行安装
import time
import cv2
import numpy as np
from PIL import ImageGrab
import pyautogui
# 坐标基于 1920 * 1080 全屏显示,左上 x1 y1、右下x2 y2
# wasd
x1 = 723
y1 = 899
x2 = 738
y2 = 915
# 方向键
x3 = 1178
y3 = 899
x4 = 1193
y4 = 915
# 左边完美区域
cx1 = 760
cy1 = 898
cx2 = 839
cy2 = 925
# 右边完美区域
cx3 = 1079
cy3 = 898
cx4 = 1157
cy4 = 925
border = 10 # 加个边框容错
xl, yl = x1 - border, y1 - border
xr, yr = x4 + border, y4 + border
# wasd 的图片
tpl_w = cv2.imread("jiang/w.bmp", cv2.IMREAD_UNCHANGED)
tpl_a = cv2.imread("jiang/a.bmp", cv2.IMREAD_UNCHANGED)
tpl_s = cv2.imread("jiang/s.bmp", cv2.IMREAD_UNCHANGED)
tpl_d = cv2.imread("jiang/d.bmp", cv2.IMREAD_UNCHANGED)
# 箭头图片
tpl_u = cv2.imread("jiang/u.bmp", cv2.IMREAD_UNCHANGED)
tpl_l = cv2.imread("jiang/l.bmp", cv2.IMREAD_UNCHANGED)
tpl_b = cv2.imread("jiang/b.bmp", cv2.IMREAD_UNCHANGED)
tpl_r = cv2.imread("jiang/r.bmp", cv2.IMREAD_UNCHANGED)
l_tpl = {"w": tpl_w, "a": tpl_a, "s": tpl_s, "d": tpl_d}
r_tpl = {"up": tpl_u, "left": tpl_l, "down": tpl_b, "right": tpl_r}
def get_image():
image = ImageGrab.grab(bbox=(xl, yl, xr, yr)) # bbox 定义左、上、右和下像素的4元组
image = np.array(image.getdata(), np.uint8).reshape(image.size[1], image.size[0], 3)
image = cv2.cvtColor(image, cv2.COLOR_RGB2BGR)
return image
# 颜色
def red_identify(img):
# 转换为HSV
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
# mask
lower_apple = np.array([0, 100, 100])
higher_apple = np.array([10, 200, 200])
mask = cv2.inRange(hsv, lower_apple, higher_apple)
# 膨胀操作
kernel = np.ones([5, 5], dtype=np.uint8)
dilate = cv2.dilate(mask, kernel, iterations=1)
# 轮廓
cnt, hierarchy = cv2.findContours(dilate, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
# 判断是否有轮廓
if len(cnt) == 0:
return 0
return len(cnt)
def match(target, tpl):
"""
模板匹配
:param target:
:param tpl:
:return:
"""
result = cv2.matchTemplate(target, tpl, cv2.TM_CCOEFF)
return np.max(result)
def dect(img, key="l", key_border=5):
"""
模板匹配 做两侧的按键识别
最高相似度的
:param img:
:param key:
:param key_border:
:return:
"""
label = {}
if key == "l":
left_point = img[cy1 - yl:cy2 - yl, cx1 - xl:cx2 - xl]
p = red_identify(left_point)
if p > 0:
left_key = img[y1 - yl - key_border:y2 - yl + key_border, x1 - xl - key_border:x2 - xl + key_border]
for key, tpl in l_tpl.items():
label[key] = match(left_key, tpl)
else:
right_point = img[cy3 - yl:cy4 - yl, cx3 - xl:cx4 - xl]
p = red_identify(right_point)
if p > 0:
right_key = img[y3 - yl - key_border:y4 - yl + key_border, x3 - xl - key_border:x4 - xl + key_border]
for key, tpl in r_tpl.items():
label[key] = match(right_key, tpl)
if len(label) == 0:
return ""
max_key = max(label, key=label.get)
return max_key
def run_one(key, delay=0.01):
"""
单侧运行结果
:param key:
:param delay:
:return:
"""
while True:
img = get_image()
max_key = dect(img, key)
time.sleep(delay)
if max_key != "":
# print(max_key)
if key == "l": # 模拟的方向键游戏里面不起效果会失误
pyautogui.press(max_key)
return
def run(delay=0.01):
while True:
run_one("l", delay)
run_one("r", delay)
if __name__ == '__main__':
run()


IP属地:四川1楼2024-03-08 00:44回复
    图片没找到打包的,反正也就8个 wasd 上下左右 8个图片,切一下就是,改成自己的路径
    路径不支持中文!!!
    路径不支持中文!!!


    IP属地:四川2楼2024-03-08 00:47
    回复
      换airtest包试试


      IP属地:山西3楼2024-04-10 19:01
      回复
        手动打到第一,什么水平


        IP属地:四川4楼2024-04-11 11:05
        回复
          没必要,小游戏难度开易,用脚都能第一


          IP属地:陕西来自Android客户端5楼2024-04-14 11:30
          回复