ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Computer vision玩转游戏--kick-ya-chop

2021-12-08 18:59:31  阅读:289  来源: 互联网

标签:JUMP -- cv2 chop wood time left vision scr


Computer vision玩转游戏--kick-ya-chop

运行环境

surface电脑
kick-ya-chop是一个网页端的flash游戏

项目来源

https://github.com/ClarityCoders/ComputerVision-OpenCV/tree/master/Lesson3-TemplateMatching
虽然作者在油管上讲的是cv自动采摘农场的作物, 但实际给出的代码只有这个空手道的小游戏(https://www.addictinggames.com/clicker/kick-ya-chop)

运行方式以及效果图

直接分屏, 左边运行网页端的flash游戏, 右边跑python脚本。
在这里插入图片描述

代码

import keyboard
import mss
import cv2
import numpy
from time import time, sleep
import pyautogui
# 一些宏变量的定义
pyautogui.PAUSE = 0
left = True
# 动画中的人物可以通过点击鼠标向左, 向右. 这里需要根据自己的电脑屏幕设定鼠标的落点坐标
JUMP_LEFT=(250, 600)
JUMP_RIGHT=(900, 600)
x = JUMP_LEFT[0]
y = JUMP_LEFT[1]
sct = mss.mss()
# 完整画幅
# 'width': 2600,
# 'height': 1800
dimensions = {
        'left': 0,
        'top': 0,
        'width': 1368,
        'height': 1800
        # 'height': 912
    }
# scr = numpy.array(sct.grab(dimensions))
# cv2.imshow('Screen sct', scr)
# cv2.waitKey(-1)

# width=100, h=30
dimensions_left = {
        'left': 320,
        'top': 1100,
        'width': 290,
        'height': 60
    }

dimensions_right = {
        'left': 780,
        'top': 1100,
        'width': 290,
        'height': 60
    }
# 模板匹配的阈值, 可以自己设置
MATCHING_TH=0.5
# 动画中人物打击的时间间隔, 这值越小,打击速度越快
KICKING_TIME=0.2
#Tag: 程序开始
print("Press 's' to start playing.")
print("Once started press 'q' to quit.")
keyboard.wait('s')
wood_left = cv2.imread('woodleft.jpg')

wood_right = cv2.imread('woodright.jpg')
w = wood_left.shape[1]
h = wood_left.shape[0]

fps_time = time()
while True:

    if left:
        scr = numpy.array(sct.grab(dimensions_left))
        wood = wood_left
    else:
        scr = numpy.array(sct.grab(dimensions_right))
        wood = wood_right

    # Cut off alpha
    scr_remove = scr[:,:,:3]
    # Tag:需要注意就是img size必须小于template.
    result = cv2.matchTemplate(scr_remove, wood, cv2.TM_CCOEFF_NORMED)

    _, max_val, _, max_loc = cv2.minMaxLoc(result)
    print(f"Max Val: {max_val} Max Loc: {max_loc}")
    src = scr.copy()
    if max_val > MATCHING_TH:
    # if max_val > .85:

        if left:
            # x=340
            x=JUMP_RIGHT[0]
            y=JUMP_RIGHT[1]
            print("trun right")
        else:
            x=JUMP_LEFT[0]
            y=JUMP_LEFT[1]
        left = not left


    pyautogui.click(x=x, y=y)
    # 0.1s不行, 运行有点问题.
    # sleep(.10)
    sleep(KICKING_TIME)
    if keyboard.is_pressed('q'):
        break

    print('FPS: {}'.format(1 / (time() - fps_time)))
    fps_time = time()

标签:JUMP,--,cv2,chop,wood,time,left,vision,scr
来源: https://blog.csdn.net/sinat_20276189/article/details/121788341

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有