python3 跳一跳点击跳跃

借鉴了网上一些大神的代码和思路,这里整理一下写出点击跳跃玩跳一跳这个小游戏的思路

一、整体思路

棋子所在的坐标以及下一步所要到的坐标,根据两个坐标计算出两点之间距离进行跳跃。

二、分布思路
1、根据命令截图获取初始图保存到手机,然后上传到本地文件夹
2、将获取的截图放入新建的坐标轴中(matplotlib)
3、通过鼠标点击事件获取所在初始坐标以及重点坐标,并计算出直线距离
4、进行跳跃,跳跃完成后清空坐标并更新截图
三、所用到的相关技术或模块
1、python3基础
2、numpy
3、matplotlib
4、python中的os模块
5、adb工具包
四、代码
__author__ = '周雁冰'
import os
import PIL,numpy
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
import time


need_update = True

# 获取手机截图
def get_screen_image():
    os.system('adb shell screencap -p /sdcard/screen.png')  # 获取手机当前界面截图
    os.system('adb pull /sdcard/screen.png')  # 下载当前截图到电脑当前文件夹下
    return numpy.array(PIL.Image.open('screen.png'))  #转为array返回


# 计算弦的长度
def jump_to_next(point1, point2):
    x1, y1 = point1; x2, y2 = point2
    distance = ((x2-x1)**2 + (y2-y1)**2)**0.5  # 计算弦长度
    os.system('adb shell input swipe 320 410 320 410 {}'.format(int(distance*1)))  # 按下横纵左边  放开横纵坐标 按压时间  2K的屏幕弹跳系数为1


# 绑定鼠标单击事件
def on_calck(event, coor=[]):  # [(x,y),(x2,y2)]
    global need_update
    coor.append((event.xdata, event.ydata))  # 获取x和y坐标位置放入coor数组中
    if len(coor) == 2:
        jump_to_next(coor.pop(), coor.pop())  # 获取到两个坐标后计算长度并清空数组
    need_update = True 


def update_screen(frame):  # 更新图片
    global need_update
    if need_update:
        time.sleep(1)  # 因为跳跃需要时间所以这里需要休眠1s,然后重新获取图片
        axes_image.set_array(get_screen_image())
        need_update = False
    return axes_image,  # 返回元祖


figure = plt.figure()  # 创建一个空白的的图片对象/创建画布
axes_image = plt.imshow(get_screen_image(), animated=True)  # 把获取的图片放进坐标轴
figure.canvas.mpl_connect('button_press_event', on_calck)
ani = FuncAnimation(figure, update_screen, interval=50, blit=True)  # 实例化 FuncAnimation更新画布图片 50为50ms
plt.show()  # 展示坐标图

跳一跳源代码请点击这里获取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值