相信在座的各位小伙伴对Google Chrome浏览器中的一个游戏彩蛋恐龙小游戏(Chrome Dino)不陌生吧。在断开网络连接,我们访问网站的时候,就会出现一个小霸王龙,在我们再按下空格键后,即可开始这个游戏,或者在谷歌浏览器的地址栏输入chrome://dino/, 按下空格键,也可这个开始游戏。

这是一个简单的无限跑步游戏,它会让你跳过仙人掌,并闪避障碍物,游戏控制也很简单,按空格键开始游戏,按空格键上箭头↑跳跃,向下箭头↓俯身奔跑以躲避鸟类。

有时代码写的无聊时,就是玩一下这个游戏,然后我可能有点手残,玩不了多少分就game over了,于是就萌生了使用代码自动玩这个游戏的想法,说干就干,下面我就来使用Python编写一个可以自动玩这个恐龙小游戏的小程序。

思路:

看下面这个截图,在恐龙向前奔跑的过程中,我们可以获取恐龙前面一段区间图像并获取其中像素点的颜色,如果颜色和背景色不同,那么就一定是障碍物(仙人掌或鸟类),然后按下按键做出正确动作即可。说起来很简单,实现起来却不是那么容易。

实现

获取指定图像像素点的颜色

既然是要获取像素点的颜色,那么首先要截取图像,在Python中,我们可以使用下面代码截取图像(就是截图):

import pyautogui as gui# 截屏
sct_img = gui.screenshot(region=(x, y, width, height))
sct_img.save("name.jpg")

pyautogui是一个GUI自动化工具库,它有很多可以控制图形或者鼠标等等的函数,可以用程序去代替鼠标键盘的一些操作,安装命令pip install pyautogui

然后我们可以使用下面一段代码获取截图图片上指定像素点的颜色:

def get_pixel(image, x, y):"""获取图像中的像素值:param image:图片对象:param x:x坐标:param y:y坐标:return:颜色值"""px = image.load()return px[x, y]

返回值是一个元组,例如白色就是返回(255,255,255)

根据颜色做出按键动作

使用程序模拟键盘动作,我们可以使用keyboard库,可以使用其提供的函数进行按下按键释放按键此类的动作。安装命令pip install keyboard。 上述我们说到这个恐龙的小游戏在操作过程中只需要上箭头↑跳跃,下箭头↓俯身奔跑两个按键 所以我们可以使用以下代码:

import keyboard# 按下“↑”鍵 跳跃
keyboard.press('up')
# 按下“↓”鍵 俯身奔跑
keyboard.press("down")
# 释放按键“↓”
keyboard.release("down")

获取障碍物可能出现地方的坐标

手动玩了一段时间发现,障碍物可能出现的地方有以下几点:

根据截图软件得出障碍物可能出现的地方的高度即y坐标
注意: 我的是分辨率1920*1080的显示屏,所以是以此分辨率为基准截图并确定坐标

细节调整

我发现,在玩一段时间后,游戏节奏会加快,出现误判的几率大大增加,所以我在此加入了模拟加速的逻辑: 判断两次跳跃之间的时间间隔,如果间隔和上次不一样,那么就可能是节奏加快了,我们就可以多恐龙之前的一下区间,就是加大搜索障碍物区间的大小,这样就相当于提前进行了判断,就会抵消掉一部分因为游戏节奏加快带来的影响。

全部代码如下:

import pyautogui as gui
import keyboard
import time
import mathdef get_pixel(image, x, y):"""获取图像中的像素值:param image:图片对象:param x:x坐标:param y:y坐标:return:颜色值"""px = image.load()return px[x, y]def start():# 截屏图片尺寸x, y, width, height = 0, 102, 1920, 872# 用于计算时间jumping_time = 0last_jumping_time = 0current_jumping_time = 0last_interval_time = 0# 机器人寻找障碍物的区间y_search1, y_search2, x_start, x_end = 557, 486, 400, 415y_search_for_bird = 460time.sleep(3)  # 留3s时间用于程序执行后将界面切换到谷歌浏览器while True:t1 = time.time()# 按下q键机器人退出if keyboard.is_pressed('q'):break# 截屏sct_img = gui.screenshot(region=(x, y, width, height))sct_img.save("dd.jpg")# 获取截屏图片的背景色bg_color = get_pixel(sct_img, 100, 100)for i in reversed(range(x_start, x_end)):# 如果在截屏图片的背景色中搜索指定区间的像素,如果该像素的颜色和背景色的颜色不一致,就是障碍物if get_pixel(sct_img, i, y_search1) != bg_color \or get_pixel(sct_img, i, y_search2) != bg_color:# 按下“↑”鍵 跳跃keyboard.press('up')jumping_time = time.time()current_jumping_time = jumping_timebreakif get_pixel(sct_img, i, y_search_for_bird) != bg_color:keyboard.press("down")time.sleep(0.4)# 释放按键“↓”keyboard.release("down") break# 本次跳跃与上次间隔时间interval_time = current_jumping_time - last_jumping_time# 如果本次间隔时间与上次间隔时间不相同,说明游戏加速了,也要相应调整搜索区间的宽度,相当于提前搜索if last_interval_time != 0 and math.floor(interval_time) != math.floor(last_interval_time):x_end += 4if x_end >= width:x_end = width# 记录上次跳跃时间last_jumping_time = jumping_time# 记录上次跳跃与上上次间隔时间last_interval_time = interval_timestart()

运行截图如下:

经过几次运行,最高得分是2890分,优化优化,应该还能再多,这次截图得了886分,可见虽然实现了我想要的功能,但是还有很大的提升空间。
可以还有其他没考虑好的细节,但是......
时间不允许再搞了,这个886的分数是不是就是在暗示我......

记得点赞关注哦~

Python 自动玩谷歌浏览器“恐龙小游戏”相关推荐

  1. 50行Python代码玩转微信小游戏颜色王者

    50行Python代码玩转微信小游戏"颜色王者" 游戏模式 在微信小程序里搜索"颜色王者",即可找到该游戏. 游戏的目标比拼色彩敏感度.点击图片中不一样的色块即 ...

  2. 谷歌404页面html源码,可玩恐龙小游戏快速安装

    二.下载:https://wwm.lanzout.com/iRTpA08d3qvc 三.用途: 可集成到自己的网站上,可以玩谷歌恐龙小游戏 可修改打赏页面 可替换自己喜欢的图片 可供初学者学习网页原理 ...

  3. 用python玩转微信小游戏 大小猜猜看

    用python玩转微信小游戏 大小猜猜看 游戏模式 在微信小程序里搜索"大小猜猜看",即可找到该游戏. 游戏的目标比拼计算能力,找出谁大谁小,一共有40题,全部答对即挑战成功. 一 ...

  4. python入门小游戏之跳一跳_从零基础开始,用python手把手教你玩跳一跳小游戏,直接打出高分...

    这对于很多人来说,可能是已经过时的游戏,但是对于python入门来说,却是一个非常值得学习的项目. TONOW收集了很多有关python入门的项目案例,包含了相应的教程和源码,哪怕你从未接触编程,也通 ...

  5. python 玩公众号游戏_从零基础开始,用python手把手教你玩跳一跳小游戏,直接打出高分...

    这对于很多人来说,可能是已经过时的游戏,但是对于python入门来说,却是一个非常值得学习的项目. 我们收集了很多有关python入门的项目案例,包含了相应的教程和源码,哪怕你从未接触编程,也通过这些 ...

  6. 跳一跳python开挂_用Python玩跳一跳小游戏,我能开挂

    原标题:用Python玩跳一跳小游戏,我能开挂 对很多人来说,可能是已经过时的游戏,对于Python刚入门来说,却是一个非常值得学习的项目. 我们收集了很多有关python入门的项目案例,包含了相应的 ...

  7. Python编写人机对战小游戏(抓狐狸)(2)

    封面图片:<中学生可以这样学Python>,董付国.应根球著,清华大学出版社 =========== 很久很久以前,在公众号里推送过一个抓狐狸游戏,详见Python编写人机对战小游戏(抓小 ...

  8. Python编写微信打飞机小游戏(八)

    如果觉得这篇文章对您有所启发,欢迎关注我的公众号,我会尽可能积极和大家交流,谢谢. Python编写微信打飞机小游戏(一) Python编写微信打飞机小游戏(二) Python编写微信打飞机小游戏(三 ...

  9. 学生学python编程---实现贪吃蛇小游戏+源码

    学生学python编程---实现贪吃蛇小游戏+源码 前言 主要设计 1.蛇的表示 2.蛇怎么移动? 3.玩家控制小蛇移动功能的实现 4.如何判定游戏结束? 应用知识点 1.python知识点 1.1 ...

最新文章

  1. 干货丨从概念到案例:初学者须知的十大机器学习算法
  2. Android架构师亲述:我从某度外包到字节,你知道我经历了什么吗?
  3. .net aes加密视频等文件
  4. linux 日期 通配符,Linux常用基础命令下(grep,history,du,date,通配符,alias,rm,mv,cp)
  5. 初学 Delphi 嵌入汇编[10] - 函数返回值与寄存器
  6. python flask高级编程之restful_python Flask实现restful api service
  7. 新手找客户,牢记20句话
  8. 企业平均每年遭遇9起有针对性攻击
  9. Redis和Memcached在功能、性能以及内存使用效率上的对比
  10. python中文叫什么-python中文别名
  11. Excel图表快捷操作小技巧
  12. mapper.xml 的配置
  13. DH参数与URDF盲点
  14. html代码快速生成
  15. QT 打开选择文件对话框
  16. 网络子系统33_网桥设备的配置更新
  17. potato土豆登录不了_土豆@mz123789【电子竞技赛吧】
  18. matlab中dot是什么,matlab中ddot是什么
  19. jquery实现图片拖动
  20. SecureCRT 软件完全汉化

热门文章

  1. Mybatis学习-(案例)员工管理系统(二)——Maven仓库
  2. 中国电信研究院史凡:SD-WAN本质与运营商发展策略思考
  3. 用什么样的语言就有什么样的公司
  4. 傅里叶变换系列FS,FT,DTFT,DFS,DFT,FFT
  5. 字符编码 UTF-8 学习笔记
  6. VMware Workstation Pro 16 安装 Mac OS Monterey 12.1 一本通
  7. php操作json文件
  8. 平面设计转影视后期怎么样,影视后期那个行业会比较好?
  9. Android悬浮窗播放视频
  10. Hive究竟是什么?大白话讲述