我心目中完美的俄罗斯方块

项目的 GitHub 仓库



这是什么

俄罗斯方块 是一款传奇游戏,也是我非常喜欢的一款游戏。我非常热爱这款游戏并喜欢玩它。它是一个很好的减压方式。作为一个有趣的周末项目,我决定把这款游戏做成一个面向桌面和移动端的浏览器游戏/应用,使用 vibe coding 的原则。这个版本的移动端设计灵感来自 在线版 俄罗斯方块,它的滑动式控制在移动端做得非常好。你可以在这里查看并试玩我实现的俄罗斯方块,这就是我认为最“完美”的 俄罗斯方块 版本。



我版本的俄罗斯方块的游戏画面,你可以在 这里 亲自试玩

代码之外

我并不是为了把它做成作品集项目或为了学习新东西而去构建一个俄罗斯方块克隆。我做它是因为我真的需要它。当我感到压力很大时,无论是工作上艰难的一周还是生活堆积如山,俄罗斯方块是为数不多能真正帮助我重置状态的健康方式之一。当我压力大时我往往会吃很多东西,时间一长就会有所累积,所以有一样不会带来副作用的事物对我来说非常重要。只要花 10 到 30 分钟掉落方块,我的大脑就会感觉像被清理了一点。这对我来说不仅仅是随意放松,而是把压力注入到一个简单且集中的活动中的方式。还有一些很酷的研究表明,俄罗斯方块能影响大脑处理侵入性记忆和压力的方式,例如在创伤影片实验真实事故后接受治疗的人群中,以及作为疗法的补充并带来可测量的大脑变化。我并不是想把这个游戏变成医学治疗,但看到可能有真实的科学证据支持我已经感受到的——俄罗斯方块确实可以帮助人们应对压力——这件事本身就很有意思。

所以我去寻找一个好版本的俄罗斯方块来玩,但问题是现有的没有一个真正符合我想要的玩法。iOS 应用商店里的移动应用充斥着广告和内购。网页版在手机上卡顿或手感很差。经典的 NES 版本很棒,但需要模拟器和额外的硬件。我甚至买了一台 Miyoo Mini 以为它能解决问题,结果只是多了一个为了玩俄罗斯方块而随身携带的第二台设备。到某个时候我意识到,我花在寻找合适版本的时间,比自己动手做一个还要多。

有了现代浏览器、像 Claude Code 这样的 LLM 工具,以及像 vibe coding 的工作流,终于感觉这是构建我想要的俄罗斯方块的合适时机。快速、极简、无广告、无需账户、无需应用商店。只是一个在我的手机和笔记本上都能运行、完全由我掌控的浏览器游戏。大约一天内就有了可运行的版本,之后花了大约一周的断断续续工作使其更加稳健,并在桌面和移动端都调校出合适的手感后,我对此很满意。

我分享它是因为如果它能帮助哪怕另一个人像帮助我一样减压,那我会非常高兴。这是一件小事,但有时候正是一件小事正好是你所需要的。

功能

  • 经典的 10x20 俄罗斯方块棋盘
  • 桌面端完整键盘控制,移动端触摸手势控制
  • 标准的七袋随机出块器
  • 保 hold 方块与下一个方块预览
  • 幽灵方块投影显示方块将落在哪里
  • 基于等级的速度曲线与动态锁定延迟
  • 分数、消行、等级和最高分追踪并持久化到本地存储
  • 软落与硬落计分
  • 游戏内菜单:继续、重新开始、退出、静音音乐/音效、与源码链接
  • 消行闪光动画及音效
  • iOS 安全区域支持(动态岛、刘海、主屏栏)
  • 通过 Service Worker 支持离线(首次访问后无网络也可运行)
  • 可安装为 PWA(在 iOS/Android 上添加到主屏以获得类似应用的体验)

控制

桌面(键盘)

操作 按键
移动 A D
软落 S
硬落 Space
顺时针旋转 W X
逆时针旋转 Z
Hold(保留) CLShift
菜单 EscM
源代码 G (标题画面)

移动(触控)

操作 手势
移动 向左 / 向右 划动
软落 按住并向下拖动
硬落 快速向下甩动
顺时针旋转 轻触
Hold(保留) 快速向上甩动

难度曲线

本版本的速度曲线与锁定延迟是基于对经典与现代俄罗斯方块游戏如何处理难度进展的研究进行调整的。在原始的 NES 版俄罗斯方块 中,重力在第 29 级达到每帧一行,这就产生了著名的“杀屏”(kill screen),对大多数人来说游戏变得基本无法玩下去。那并不是一个刻意设计的结局,更像是硬件限制和 DAS(延迟自动移位)跟不上下落速度的副作用。Willis Gibson 在 2024 年证明了这一点,当时他突破了它并在第 157 级让游戏崩溃



经典 1989 年 NES 俄罗斯方块的游戏画面(原始来源

现代游戏如 TGM(俄罗斯方块:大师赛) 则采用了不同的解决方式。它们不是简单地让方块下落越来越快直到游戏崩溃,而是将重力上限固定(例如 TGM 在 20G 即瞬间下落处设上限),然后通过收紧其他时序窗口(如锁定延迟和 DAS)来提升难度。俄罗斯方块指导方针 标准使用 500ms 的锁定延迟并允许最多 15 次移动重置,本版本遵循了该标准。对 TGM2 死亡模式TGM3 Shirase 的研究显示,竞技玩法的实际下限大约是 250ms 的锁定延迟搭配快速的 DAS,而低于 133ms 则属于专家级别的领域。

基于以上所有内容,这里把重力上限设为每行 33ms(类似于 NES 的 19 到 28 级),而不是直接降到瞬间下落;并且 DAS 从 170ms 随等级上升逐步缩短到 100ms,以便在锁定延迟期间仍能在场上穿梭。目标是让高等级感觉残酷且快速但仍然公平,更接近 Tetris 99 与 TGM 在终局难度的处理方式,而不是原始 NES 那种任由速度压倒玩家输入的做法。

引擎实现细节

  • 响应式设计,针对桌面和移动端(竖屏)优化
  • 预渲染的方块精灵与网格背景以提升性能
  • 使用超级旋转系统(SRS)风格的墙踢(wall kicks)进行方块旋转
  • 基于速度的触控手势检测以可靠地区分甩动与拖拽
  • 基于等级的时序系统用于重力速度与锁定延迟
  • 高分与音频设置使用 localStorage 持久化
  • 背景音乐来源 NmCCQxVBfyM
  • 消行音效来源 UMViM2tHrOk
  • 项目完全开源,采用 MIT 许可
  • 使用了以下 AI 与工具协助构建:

最后的想法

这是那种动机不是技术性的项目,而是个人原因。我只是想要一个按照我想要的方式运行的俄罗斯方块版本,没有广告、没有额外硬件,也不依赖可能随时消失或改变的别人的应用。事实上,我能够在断断续续大约一周的时间里,使用现代人工智能工具和 vibe 编程把想法变成一款打磨完善的游戏,这在很大程度上说明了我们目前在软件开发方面所处的状态。

自从我做出这个版本以来,我几乎每天都在使用它,它仍然完全满足我的需要。它帮助我从那些让我感到压力的事情中抽离,专注于一些简单的事几分钟,然后以更清晰的头脑回归。如果你试一试,它也能为你带来同样的效果,那就是我所能期望的最好结果。如果你想分叉它、调整速度曲线、更改控制方式,或在此基础上进行扩展,尽管去做吧。如果你发现了错误或有建议,欢迎在 GitHub 仓库 上提交问题。这就是我将它开源的全部意义。