借鉴了网上一些大神的代码和思路,这里整理一下写出点击跳跃玩跳一跳这个小游戏的思路
一、整体思路
棋子所在的坐标以及下一步所要到的坐标,根据两个坐标计算出两点之间距离进行跳跃。
二、分布思路
1、根据命令截图获取初始图保存到手机,然后上传到本地文件夹
2、将获取的截图放入新建的坐标轴中(matplotlib)
3、通过鼠标点击事件获取所在初始坐标以及重点坐标,并计算出直线距离
4、进行跳跃,跳跃完成后清空坐标并更新截图
三、所用到的相关技术或模块
1、python3基础
2、numpy
3、matplotlib
4、python中的os模块
5、adb工具包
四、代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
__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() # 展示坐标图
|
请点击这里获取:跳一跳源代码
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:http://blog.csdn.net/a877415861/article/details/78994065