咱就说程序员整活总能整的很有新意,今天要聊的这个游戏,它的游戏规则不复杂,UI 也不花哨,就是玩法很古怪:它只能在折叠屏上才能玩。这是怎么回事呢?今天一起来看一看。

这个游戏叫做 Foldy Bird,直译为折叠小鸟。通过名字来看,感觉和一个很流行的游戏 Flappy Bird 很像有没有?

你还别说,这游戏真就是 Flappy Bird 的一个变体,或者说它本质上就是 Flappy bird。
它的规则和 UI 都和 Flappy Bird 一样,通过操控小鸟上下飞行,躲过一个又一个障碍物,尽可能得到更多的分数。
但是,这个游戏唯一的特点,就是它操控小鸟向上飞行的方式,不是通过点击屏幕或者敲击空格键,而是通过不停的弯曲再展开你的折叠屏。
你没听错,每一次弯曲再展开你的折叠屏能操控小鸟向上飞行一下,要想玩这个游戏,你必须不停的弯曲、展开你的折叠屏。。。
简直可以说是折叠屏杀手,建议你们不要去试了,对自己的铰链好一点😂
所以这次我就不放游戏链接了。
接下来说一下为什么这个游戏只能在折叠屏上才能玩。
问题的本质在于,程序是如何知道自己是在折叠屏上的?
答案:是浏览器告诉程序代码的。
浏览器里有一个 navigator 对象,会读取设备的硬件状态并且在状态改变时产生并发送一个事件 (event).
这些硬件状态包括但不限于:
- 蓝牙开关状态
- 无线网开关状态
- 是否正在充电
- 电池电量等等。
当然也包括屏幕的状态,详细来说,屏幕的状态目前一共有 2 种:
- 展开状态 (continuous)
- 折叠状态(folded)
程序代码可以设置一个事件监听器 (event listener) 来捕获硬件设备状态变更的事件,如图所示:

上方黄色框的代码就是添加一个事件监听器,当检测到状态变化时去获取当前设备的屏幕状态,如果是展开状态(continuous),则调用函数控制小鸟向上飞行。
我们梳理一下:
- 当设备处于折叠状态时,其屏幕状态为 folded
- 当你展开屏幕,其屏幕状态变为 continuous
- 浏览器发现状态变化,发出一个修改(change)事件(event)
- 代码的事件监听器捕获到事件,然后读取屏幕状态,发现是 continuous,则调用函数操控小鸟飞行
如果你的设备不是折叠屏,浏览器自然就检测不到屏幕状态的修改,也就无法玩这个游戏了。
不过我还是通过浏览器的模拟设备体验了一把这个游戏,在谷歌浏览器中加载游戏之后,选择一个折叠屏的模拟设备,我选了 Asus Zenbook Fold, 并且调整屏幕状态为折叠状态(右上角)

之后我手动把屏幕状态修改为展开状态(continuous),就能开始玩这个游戏了。

由于模拟设备的屏幕状态修改是手动的,很难操控小鸟飞行,基本上游戏一开始就结束了。不过这也足够验证我们刚才对代码的解读是正确的了。

但是想靠模拟设备的方式玩这个游戏是不现实的,还是老老实实挣钱买个折叠屏吧😂。
