一只光敏电阻玩转“小恐龙”游戏

    谢作如 林淼焱

    

    

    

    自从在上一期发表了《换个思路挑战“小恐龙”游戏》后,陆续接到一些朋友的反馈。这里说的“小恐龙”游戏指Chrome浏览器在出现无网络连接时提供的小游戲,只要按下空格键,一只小恐龙就会在沙漠中狂奔,玩家需要操控小恐龙跳跃到空中,以躲避仙人掌、翼龙等迎面而来的障碍物。在浏览器地址栏输入chrome://dino/,联网状态下也可以玩这个游戏(如图1)。

    朋友的反馈大致分为两类:一类是表扬,认为笔者的确提供了一个有趣的编程主题;另一类是提供新的方案,说还有更加好玩的自动控制游戏的方案。这里提供的“好玩”方案,一般指设计一个自动化装置,俗称物理“外挂”。而这些方案中,都用到了一个核心器件——能检测光线的传感器。

    ● 自动化装置的原理

    “小恐龙”游戏的规则很简单,就是当障碍物来了,就跳起躲避。换成代码如图2所示。

    上一期我们采用的方案是用Python的pyautogui库“截屏”,再借助PIL库识别目标区域的颜色。这一次我们换个好玩的方式来识别。因为游戏中屏幕只有两种颜色,一种是白色的背景,另一种是灰色的障碍物,用光线传感器刚好可以区分。

    光线传感器的核心器件是光敏电阻。一开始想让传感器贴近屏幕,就想直接用光敏电阻,而不是用现成的传感器。只不过笔者最近忙着上信息技术课,来创客空间少了,好不容易找到了光敏电阻,却怎么也找不到合适的电阻。为什么要找电阻?因为需要自制一个传感器的检测装置。如图3中的电路R1和R2形成一个分压电路,在input端可以测出R2两端的电压,而这一电压是由R2受到的光照强度决定的。

    因为找不到合适的电阻,只好采用现成的光线传感器。DF的光线传感器用PT550环保型光敏二极管,虽然没有办法紧密贴着屏幕,但是因为其检测的光线角度非常小,所以效果很好。

    ● 装置方案之一:借助Arduino感知光线

    确认了核心器件后,我们用的第一种方案,就是找一块Arduino作为读取传感器信息的终端。那么pinpong库就派上用场了,代码如图4所示。

    是不是觉得代码太简单了?其实原理就这么简单,无非是一句条件判断。这里的40是怎么算出来的?这需要测试,受屏幕的亮度决定。

    用双面胶将传感器固定在屏幕上,如图5所示。细心调整一下位置,就是这么简单的代码,玩好居然可以获得上千分。但是翼龙一过来就挡不住了,除非上下移动,或者要两个以上的光线传感器。

    ● 装置方案之二:用Leonardo模拟键盘

    在调试Arduino方案的过程中,我们又想到了另一种方案。创客空间里有好几块Arduino Leonardo板子(如图6),都是上一届学生做人机互动作品买的。相对Arduino UNO来说,Leonardo的特点是可以模拟为鼠标和键盘,即USB-HID(Universal Serial Bus-Human Interface Device)设备。如果把UNO换成Leonardo,那么就不用Python代码来模拟键盘的按键动作了——Leonardo可以直接输出按键信息。

    方案的更换不用在硬件上做太多改变,传感设备不用动,只要换一下控制板。只不过Python代码要换成Arduino IDE了。Leonardo的程序代码如图7所示。

    是不是觉得代码依然很简单?这就是开源硬件的魅力了,经过创客们的不断迭代,编程的门槛越来越低,代码越来越简洁。

    这个装置的测试效果和上一个方案差不多,但是部署起来方便,Leonardo即插即用,打开浏览器就能测试,在任何计算机都可以使用。因为刷写了上述代码的Leonardo,对计算机说就是一个标准的键盘设备。

    ● 装置方案之三:用掌控板模拟蓝牙键盘

    在测试Leonardo时,我们忽然想起掌控板又有了新功能,可以模拟为蓝牙键盘鼠标了。翻了翻教程,发现非常简单,于是我们又找出掌控板,下载了最新版的mPython。

    因为掌控板上有光线传感器,测试了一下,效果也挺好。我们拆除了原来的传感器,直接将掌控板贴在屏幕上来使用。代码还是一样简单,如图8所示。

    需要提醒的是,默认情况下mPython没有加载蓝牙库。通过“扩展”-“添加”,选择“蓝牙(测试)”这个库,如图9所示。

    刷入代码后,掌控板就是一个蓝牙键盘了。让计算机添加蓝牙设备,就能找到这个名为“mpy_hid”(名称在代码中可以改)的设备。具体过程如图10和图11所示。

    这次的测试就更加完美了,因为掌控板自带光线传感器,不用另外接。掌控板和计算机也不用接线,非常清爽。我们选择用“掌控宝”来供电,只要用胶带固定一下位置,就能看着游戏在不断加分。

    ● 多种装置方案的比较和反思

    当我们第一次展示控制游戏这种有趣的案例时,有网友说这是游戏“外挂”,有“作弊”的嫌疑。其实“外挂”是被游戏玩坏的一个名词。在创客圈子中,我们会称之为创客作品。很多人热衷于制作各种有趣的自动化装置,让用户体会技术的价值。甚至连物联网、智能家居技术的最早案例,都可以追溯到这种有趣的装置。

    算上第一期使用的方案,我们先后使用了四种方案来实现自动挑战“小恐龙”游戏,后三种都是用了光敏电阻。从使用便捷的角度看,用掌控板最方便,但从技术含量上看,还是第一种方案最难,涉及图像的识别。设计方案来挑战“小恐龙”游戏,其实可以作为一个值得推荐的项目式学习的案例。项目主题源于生活又具有不断优化的特点,寓教于乐,学生在探索过程中需要学习很多知识,编程能力在探索过程中得到提高。