请从零开发一款完整、可以立即游玩的浏览器游戏:《俄罗斯方块 · 红白机经典版》。 这是一次 One Shot 编程测试。我只发送这一条需求,不会回答澄清问题,也不会提供后续修复提示。请自行做出合理的设计决策,完成实现、运行验证和必要修复,再交付最终作品。 一、目标:还原红白机(NES)上最经典的那一版手感 - 10×20 可见棋盘,7 种标准方块(I O T S Z J L)。旋转以红白机版本为准:没有墙踢(wall kick),也没有暂存(hold),只预览下一块。 - 随机器按红白机的思路实现:先随机一次,如果与上一块相同就重抽一次;使用可设定种子的伪随机数。 - 下落速度按红白机 0–29 级的帧数表(60 帧/秒为基准),第 29 级以后为 1 帧/格。开始时可选起始等级 0–19。 - 升级规则按红白机:从 0 级开始,每消 10 行升一级;从更高等级开始时,按红白机的首次升级行数规则处理。 - 计分按红白机:单行 40、双行 100、三行 300、四行(Tetris)1200,都乘以(等级 + 1);软降每下落一格加 1 分。 - 横移手感还原红白机的 DAS:按住方向键时,先等约 16 帧,之后每 6 帧移动一格。 - 方块落地、消行和出下一块之间要有红白机那样的短暂延迟与消行动画,不要做成瞬间刷新。 - 统计面板:分数、最高分(本地保存)、消行数、等级、下一块预览,以及 7 种方块各出现了几次(红白机左侧的 STATISTICS 栏)。 - 方块颜色随等级轮换调色板,致敬红白机每级换色的做法。 二、操作(这是硬要求,必须一字不差地实现,并在开始界面、暂停界面和按 H 打开的帮助里都写清楚) | 按键 | 操作 | |---|---| | ← / → | 左右移动(按住自动连移,带红白机式 DAS) | | ↓ | 软降(按住加速下落,每格 +1 分) | | 空格 或 ↑ | 顺时针旋转 | | Z | 逆时针旋转 | | Enter | 开始游戏 / 暂停 / 继续 | | P | 暂停 / 继续 | | M | 声音开关 | | R | 重新开始(回到选等级界面) | | H | 打开或关闭操作帮助 | | F | 进入或退出全屏 | - 空格在游戏中只用于顺时针旋转,不能触发页面滚动或按钮点击。所有游戏按键都要阻止浏览器默认行为。 - 同时支持手柄(W3C Gamepad API 标准映射):十字键移动和软降,下方键(A / ✕)顺时针旋转,右侧键(B / ○)逆时针旋转,Start 暂停。 - 手机和平板提供屏幕按钮,覆盖以上全部核心操作。 - 窗口失焦或切换标签页时自动暂停,并松开所有按键。 三、视觉和声音 - 像素风,整体致敬红白机的画面结构:中间是棋盘,左边是统计栏,右边是分数、下一块和等级。块面带红白机那种高光小方格质感。画面按整数倍缩放,保持像素清晰,从手机竖屏到 21:9 宽屏都要居中、完整、好看。 - 所有图形用程序绘制,不使用外部图片或字体。不要使用任何官方 Tetris 商标、logo 或官方素材。 - 声音用 Web Audio 实时合成:移动、旋转、落地、消行、四行消、升级、Game Over 各有短音效。背景音乐用公有领域俄罗斯民歌《货郎》(Korobeiniki)的旋律,以方波或三角波做出芯片音乐的感觉。首次用户交互后才启动声音,M 键静音立即生效。 - 四行消要有明显而克制的闪屏或闪光庆祝;Game Over 时方块从下往上逐行填满的动画之后,显示成绩和「按 Enter 再来一局」。 四、技术和交付 - 最终交付一个自包含的 index.html,CSS 和 JavaScript 全部内嵌。只用原生浏览器能力,不依赖后端、CDN、外部图片、字体或音频。下载后双击就能在现代浏览器里玩。 - 使用固定 60 Hz 的逻辑步长,把渲染与逻辑分开。高刷新率屏幕不能让游戏变快;掉帧时也不能改变规则。 - 代码按随机器、规则(棋盘、旋转、消行、计分、升级)、输入(键盘、手柄、触摸)、渲染、声音、状态机(选级、游戏中、暂停、结束)分出清晰模块,关键规则写注释并注明对应的红白机设定。 - 不使用现成的俄罗斯方块源码或游戏引擎。请由当前模型完成,不委派给其他模型。 五、完成前验证 如果环境提供文件、终端和浏览器工具,请实际创建文件,在真实浏览器里启动并检查,自行修复发现的问题。至少验证以下几点: 1. 选等级 → 游戏 → 消行 → 升级 → 四行消 → Game Over → 重开,完整走通;重开后旧的计时器、按键和声音都被清理干净。 2. 上面操作表里的每一个按键实际按下后都生效;空格不会滚动页面。 3. 下落速度、计分和升级与红白机的数值表一致,写一个自动化检查来核对。 4. 同一个种子得到相同的方块序列。 5. 分别在 60 Hz 和模拟的 144 Hz 刷新率下,逻辑速度一致。 6. 手机竖屏、桌面 16:9 和 21:9 宽屏下,画面完整,没有溢出。 7. 零 console 报错。 交付时简短说明:怎么玩(附操作表)、实现了哪些红白机规则、做了哪些验证以及结果、已知的限制。