PlayPendium

Tempo Lock · 思考的食粮

咔哒声停止之后

这局游戏以一串标出速度的咔哒声开场,随后那串咔哒声归于沉默,而玩家必须在无声的小节里把同样的速度敲下去。

本文以英文撰写和编辑。此中文版本由机器翻译生成;凡涉及准确性之处,以英文原文为准。 阅读英文原文 →

一轮的结构

Tempo Lock 中的一轮,建立在一个规定了四件事的目标之上:速度的每分钟节拍数、咔哒声播放的小节数、随后无声小节的数目,以及每小节拍数,也就是拍号的分子。引擎用这几个字段构造出整整一轮,从第一个听得见的拍子,一直到最后一个无声的拍子。速度设定咔哒声的快慢,有声小节决定玩家能听多久节拍器,无声小节则设下没有咔哒声还要守住速度的挑战。每小节拍数定义每个小节里有几拍,游戏在每一轮中都把它设为 4,即 4/4 拍。3

引擎会从目标推算出若干派生值,用来支撑计分系统。它把六万除以速度得到拍长,也就是单个拍子的毫秒时长。它把有声小节数与无声小节数之和乘以每小节拍数,得到总拍数,也就是玩家必须敲完的拍子总数。它把有声小节数乘以每小节拍数,得到静音起点,也就是咔哒声停止的那个确切拍序号。这些派生值构成了整轮的数学基础。3

咔哒声按目标速度播放有声小节,随后中断,而玩家必须以同样的速度把无声小节敲下去。

咔哒声与沉默

咔哒声是为这一轮确立速度的可听信号。它按目标速度播放,持续有声小节的时长,用一记短促的声音标出每一拍。这串咔哒声起的是节拍器的作用——以均匀的间隔发出可听的声音——只不过这里的间隔由本轮的目标设定,而不是由玩家设定。开头会先播放一段四拍的预备拍,每个小节的第一拍会用音高更高的咔哒声。音乐家用节拍器合着拍子演奏或练习,以保持稳定的速度与规律的节拍。游戏里的咔哒声在有声阶段正是起这个作用,为玩家提供一个可供敲击对齐的参照点。2

有声小节结束时,咔哒声完全中断。玩家再也听不到节拍器,必须以同样的速度把无声小节继续敲下去。这份沉默构成了游戏的核心挑战,因为玩家必须在没有外部参照的情况下,把速度守在心里。这沉默并不空:它盛满了对那个速度的记忆,以及玩家维持它的努力。分数稍后会衡量玩家在沉默中把速度守得有多好。3

原始时间戳与确定性

引擎完全依据以毫秒计的原始敲击时间戳运作。每一次敲击都被记录为一个绝对时间值,所有计算都由这些时间戳连同目标推导而来。同一串敲击时间戳总会得出同样的结果,这使引擎是确定性的,且无需时钟即可测试。这种做法消除了计时计算中的任何歧义,并确保同样的输入在不同运行中给出一致的计分。3

引擎中的计分函数,以毫秒为单位的原始敲击时间戳连同目标作为输入。这一设计意味着引擎可以用预先设定的时间戳序列来测试,输出也无需实时运行游戏就能验证。这种确定性一直延伸到为每一轮挑选目标速度的带种子随机数生成器:给定的种子与难度每次都设定同一个目标,从那一点起每条规则都可测试。3

引擎依据原始敲击时间戳运作,所以同样的敲击总会给出同样的结果。

从敲击中还原速度

引擎会根据相邻敲击之间的平均间隔,还原出一个速度估计值。它先算出敲击间隔,也就是每一次敲击与前一次之间的时间差,再求它们的平均,并跳过任何为零或为负的间隔;若敲击不足两次,它便完全不报告速度。每分钟节拍数由这个平均间隔推得,从而衡量玩家在整串敲击中实际保持的速度。这个函数独立于目标速度运作,提供了对玩家实际表现的客观测量。3

还原出的速度会显示在结果画面上,标为“Your tempo”(你的速度),与目标并排,好让玩家看到自己与预定的快慢贴合得有多近。这项计算只依据原始时间戳,涵盖记录在案的每一次敲击,无论有声还是无声。它只作参考:分数本身由偏移算出,而不是由还原出的速度算出。3

测量与网格的偏移

计分系统奖励玩家在无声阶段把敲击贴近理想的节拍器网格。这个理想网格由一组拍点位置构成——假设有一台节拍器从玩家的第一次敲击开始、以目标速度一直走下去,这些就是它的拍点。每一次敲击都会被配到最近的理想拍点上,两者之差就是这次敲击的偏移。只有最近拍点落在无声阶段的敲击才计入;而由于每次敲击都配到离它最近的拍点,任何一次敲击的偏移都不可能超过半拍。无声阶段中每一个没有敲击的拍子,都按最坏情况记作半拍的落空,一并折进同一个平均值,所以漏拍会把平均偏移推高、把分数压低,而在沉默中一下也不敲的玩家得零分。3

这种基于偏移的做法,把“守住速度”变成了一个可测量的量。引擎并不只是检查敲击是否落在某个窗口之内;它测量的是与理想位置之间的精确偏差。完美的保持,即平均偏移为零,得 1000 分;分数沿一条直线下降,到平均偏移为四分之一拍时降为 0,因此偏移越小,分数总是越高。这个标尺以拍而不是毫秒为单位,所以它在任何速度下都意味着同一件事:每分钟 120 拍时,四分之一拍是 125 毫秒;每分钟 80 拍时是 187.5 毫秒。四分之一拍也正是随手乱敲的平均偏移,所以乱敲几乎什么也得不到。结果画面仍会以毫秒报告平均偏移,并把分数化为一句评语:850 分及以上是“Locked in!”(锁定!),650 分及以上是“Tight.”(扎实。),350 分及以上是“Wobbly.”(摇晃。),更低则是“Lost the beat.”(丢了拍子。)。这造出的是一条连续的表现标尺,而不是通过或失败的二元结果,从而可以对计时精度作出细致的评估。3

基于偏移的分数,衡量玩家在沉默中把速度守得有多精确。

难度预设

游戏提供三档难度预设——Easy(简单)、Medium(中等)与 Hard(困难)——它们改变速度范围与无声小节数。每一档都给四个有声小节。Easy 抽取每分钟 70 到 100 拍的速度,要求四个无声小节;Medium 抽取 90 到 130,要求六个;Hard 抽取 110 到 170,要求八个。这些预设让玩家可以选择挑战的程度,从速度平缓、静音段较短,到速度飞快、静音段很长。3

这些预设运作在与引擎其余部分相同的确定性框架之内。每一档预设定义一个带有特定字段值的目标,而引擎处理这个目标的方式,与处理任何其他目标别无二致。难度在于速度与无声小节数的组合,它决定了拍子来得多快,以及玩家必须在没有咔哒声的情况下守住多久。计分系统在所有预设中保持一致,无论选哪一档难度,衡量的都是与理想网格的偏移;又因为它的标尺以拍的分数来设定,同样的分数在 Hard 的快速度下与在 Easy 的慢速度下,代表的是同样的相对精度。3

游戏背后的速度

在音乐中,速度是一首乐曲的快慢或行进步调,以每分钟节拍数计量。每分钟 60 拍的速度意味着每秒一拍,而每分钟 120 拍则快一倍,意味着每秒两拍。每一拍的音符时值,通常就是拍号分母所标示的那个。速度可以用意大利语术语标示,从 largo、andante 这类慢速术语,到 allegro、presto 这类快速术语,也可以用给出具体 BPM 的节拍器标记来标示。速度标记既能传达快慢,也能传达情绪;而且速度不必固定:作曲家可以在乐曲之中写下渐快(accelerando)以加速,或写下渐慢(ritardando)以减速 1。游戏把速度用作一个以每分钟节拍数计量的固定值,由目标 bpm 为整轮设定步调。

游戏中的速度,就是咔哒声所播放、也是玩家必须守住的那个每分钟节拍数。它是定义一轮快慢的单个数字,与小节数一同出现在目标之中。玩家按这个速度敲击,引擎衡量他们守得有多好。速度在一轮之中不会改变;它是评判玩家表现的那个恒定参照点。3

节拍器这件器械

节拍器是一种以均匀间隔发出可听的咔哒声或其他声音的器械,间隔可由使用者设定,通常以每分钟节拍数为单位。演奏者与歌唱者对着它练习,以守住稳定的速度和均匀的节拍。传统的机械节拍器使用一根配重摆杆:把配重沿杆向上滑会让速度变慢,向下滑则让速度变快,而机械装置每摆一次就发出一记咔哒声。Johann Maelzel 于 1815 年为一种机械节拍器申请了专利,并从 1816 年起批量生产;他的设计建立在 Dietrich Nikolaus Winkel 此前那种发条驱动的倒摆装置之上,并加上了一个数字化的速度刻度。现代节拍器也有石英电子器械和软件的形式 2

游戏中的咔哒声在有声阶段起的是节拍器的作用,按目标速度播放有声小节。它提供玩家必须用敲击去对齐的那个均匀间隔。当咔哒声中断,玩家必须在没有这件器械的情况下维持同样的速度,这考验的是他们在内心守住速度的能力。节拍器在游戏中的角色,是先确立速度,再让自己退场,留下玩家独自把这个速度带下去。3

目标及其字段

目标是定义每一轮的核心数据结构。它包含四个字段:以每分钟节拍数计的速度;咔哒声播放的有声小节数;随后无声小节的数目;以及每小节拍数,即拍号的分子,在 4/4 拍中为 4。这些字段共同决定一轮的结构,从有声阶段的拍数到无声阶段的拍数。3

引擎用目标算出支配这一轮的全部派生值。由速度,它推出每一拍的毫秒时长。由小节数与每小节拍数,它推出总拍数以及沉默开始的那一拍。目标在一轮之中是固定的,这意味着速度与小节数自始至终保持不变。玩家能做的回应,只有按合适的速度敲击,并让敲击的时机贴合理想网格。3

从时间戳到分数

从敲击时间戳到最终分数,走的是一条清晰的计算链。首先,游戏把每一次敲击记录为毫秒时间戳,并忽略那些早于四拍预备拍结束超过半拍的敲击。在有声阶段,玩家跟着咔哒声敲,建立起自己对速度的感觉。咔哒声中断后,玩家在无声小节中继续敲。随后,引擎以第一次敲击为锚点铺开理想的节拍器网格,量出无声阶段每一次敲击与网格的偏移,把这些偏移平均起来,并把每一个没敲到的无声拍子算作半拍的落空,再把这个平均值以拍的分数形式映射到 0 到 1000 的分数上。在分数之外,它还报告由平均敲击间隔还原出的速度,以及无声阶段的敲击次数。3

这条流水线完全是确定性的。给定同样的种子与难度,就会生成同样的目标。给定同样的目标与同样的敲击时间戳,就会算出同样的分数。引擎不依赖挂钟时间,也不依赖任何外部参照;它只依赖时间戳与目标。这使这套系统既可靠又可测试,因为每一步都能用预先设定的输入与预期输出加以验证。3

引擎中的每一条规则都可测试,而每一个结果都由种子、目标与时间戳决定。

作为测量的无声阶段

测量发生在无声阶段。在有声阶段,咔哒声提供参照,玩家可以调整敲击去贴合它。在无声阶段,这样的参照不复存在,玩家的敲击便暴露出他们把速度内化得有多好。引擎衡量这种内化的方式,是把每一次敲击与理想拍点位置作比较,而那些拍点是以玩家的第一次敲击为起点、按目标速度外推出来的。敲击与理想位置之差,就是那次敲击的偏移。3

无声阶段也是游戏设计最见分明的地方。咔哒声按目标速度播放有声小节,随后中断,而玩家必须以同样的速度把无声小节敲下去。无声阶段的时长由无声小节数与每小节拍数决定,它设定了测量期的长度。更长的无声阶段要求玩家把速度守住更多拍,这就增加了偏移累积的机会。计分系统衡量无声阶段每一次敲击的偏移,对每一个没敲到的无声拍子记账,再把这一切平均成最终分数,所以一点在长时间保持中逐渐放大的速度误差,会把平均偏移推高、把分数压低。3

带种子的确定性

整套系统从一个带种子的随机数生成器起就是确定性的。给定的种子每次都设定同一个目标,从那一点起每条规则都可测试。种子决定速度,它作为一个整数从所选难度的范围中抽取;小节数则来自难度预设本身。由于种子与难度完全决定了目标,它们总会产生同样的一轮结构。这一性质也延伸到计分上,因为同样的敲击时间戳对上同样的目标,总会产生同样的分数。3

带种子的确定性同时服务于玩家与开发者。对玩家而言,它意味着每一轮都一致而公平;同一串敲击总会得出同样的结果。“每日”(Daily)模式的种子取自世界时的日期,因此当天在某一难度下游玩的每个人都拿到同样的目标;而“练习”(Practice)模式则为每一轮抽取一个全新的随机种子。对开发者而言,它意味着引擎可以用预先设定的种子与敲击序列彻底测试。这种确定性不是束缚,而是一项特性,它让游戏的计时系统透明而可靠。3

Sources & notes

  1. "Tempo," Wikipedia, in music, tempo is the speed or pace of a given composition, measured in beats per minute (BPM): a tempo of 60 beats per minute signifies one beat per second, while a tempo of 120 beats per minute is twice as rapid, signifying two beats every second. The note value of each beat is typically the one indicated by the denominator of the time signature. Tempo may be indicated by Italian markings, from slow ones such as largo and andante (at a walking pace) to fast ones such as allegro and presto, or by a metronome mark giving a specific BPM. Tempo markings can convey mood as well as speed, and a tempo need not be fixed: a composer may write an accelerando to speed up or a ritardando to slow down within a piece. en.wikipedia.org/wiki/Tempo.
  2. "Metronome," Wikipedia, a device that produces an audible click or other sound at a uniform interval that can be set by the user, typically in beats per minute. Musicians use a metronome to play or practise in time, keeping a steady tempo and a regular beat. A traditional mechanical metronome uses a weighted pendulum: sliding the weight up the rod slows the tempo and sliding it down speeds it up, and the mechanism produces a click with each swing. Johann Maelzel patented a mechanical metronome in 1815 and mass-produced it from 1816, building on an earlier spring-powered, inverted-pendulum design by Dietrich Nikolaus Winkel and adding a numerical tempo scale; modern metronomes also come as quartz electronic devices and software. en.wikipedia.org/wiki/Metronome.
  3. Tempo Lock game engine: a pure, deterministic timing engine with no audio and no DOM. A target sets a tempo in beats per minute, a number of audible bars while a click plays, a number of silent bars to hold after it stops, and a beats-per-bar time-signature numerator (4 for 4/4). The click plays the target tempo for the audible bars, then cuts out, and the player must keep tapping the same tempo through the silent bars. The beat length in milliseconds is sixty thousand divided by the tempo; the total beat count is the audible plus silent bars times the beats per bar; and the silent phase starts at the audible bars times the beats per bar. The scoring functions take raw tap timestamps in milliseconds together with the target, so the same inputs always give the same result and the engine is testable without a clock. The tempo is recovered from the average interval between taps. Drift is the average distance of silent-phase taps from the nearest beat of an ideal grid anchored on the first tap and stepped at the target tempo; each silent-phase beat without a tap counts as a miss of half a beat, and with fewer than two taps the drift is half a beat. The score is 1000 at zero drift, falling linearly to 0 at a quarter of a beat, so the scale is relative to the tempo; the result grades are “Locked in!” at 850 or more, “Tight.” at 650 or more, “Wobbly.” at 350 or more, and “Lost the beat.” below that. Difficulty presets: Easy 70–100 BPM with 4 audible and 4 silent bars, Medium 90–130 with 4 and 6, Hard 110–170 with 4 and 8. The tempo is drawn from a seeded random number generator; Daily mode seeds it from the UTC date, Practice from a random number. Read from the game’s own source.
  4. Further reading on Metronome, Re-examining Czerny’s and Moscheles’s Metronome Marks for Beethoven’s Piano Sonatas. doi.org.
  5. Further reading on Metronome, Turn the Beat On: An Evidenced-Based Practice Journey Implementing Metronome Use in Emergency Department Cardiac Arrest . pubmed.ncbi.nlm.nih.gov.
Was this worth reading?
Play Tempo Lock
PlayPendium · About · Contact · Privacy · Terms · Cookies · Accessibility · Copyright · Browse all games · Classic arcade games · © 2026