MoreRSS

site iconCodingNow | 云风修改

coder ( c , lua , open source ),不用微信和QQ的大佬。
请复制 RSS 到你的阅读器,或快速订阅到 :

Inoreader Feedly Follow Feedbin Local Reader

CodingNow | 云风的 RSS 预览

QWERTY 键盘布局的发展历史

2026-10-20 15:20:14

在我最初学习键盘打字时,曾今为看似随机的键盘字母排列困惑不已。当时为找到一个字母就需要看半天键盘,我觉得键盘按字母表次序排列不好吗?当时流行的解释是:机械键盘在输入时,一些常用的字母组合的连杆,在快速连续击打时容易卡在一起。所以,现在的 QWERTY 排列“旨在降低打字速度”。这个说法至今广为流传,而我最近读了一篇 Koichi Yasuoka 和 Motoko Yasuoka 写的论文《 On the Prehistory of QWERTY 》,更清晰的描述了 QWERTY 键盘的发展脉络,我觉得可信度更高。

论文分两个部分,第一部分阐述了先进流行的 QWERTY 键盘是怎样演变到今天的布局的,第二部分驳斥了“旨在降低打字速度”的说法。后者源于 1980 年东京大学 Hisao Yamada 教授发表的论文《 A Historical Study of Typewriters and Typing Methods 》。论文中有这么一段话: :

Hence the original keyboard arrangement of 1873 was experimentally arrived at by Sholes in part by arranging the typebars for some frequent digrams in the English language at opposite locations across the round basket. At the same time, in the empirical process, the keyboard arrangement was unintentionally made more difficult to type fast on.

这段话被一些书和论文(例如 Keyboard Entry—Can It Be Simplified? )转述时被错误理解为:

Historians of typewriter design agree, the current QWERTY arrangement was arrived at by Sholes and his associates to satisfy mechanical restraints, and was intended to slow down the operator so that type bars would not jam.


我更感兴趣的是 On the Prehistory of QWERTY 中详细记录的 QWERTY 键盘演变史,每次变化都有详实的佐证。

最初的打字机是由 Sholes 和他的同事于 1868 年 11 月在芝加哥发明的。它的第一个客户是芝加哥电报学院的院长,所以打字机很可能是围绕电报码转译为文字的需求展开的。一开始,打字机的确是按字母表排列,长得比较像钢琴键盘:即下面一排白键,上面穿插着一排黑键。上牌凸起的键从左至右为 A 到 N 14 个键,下排从右至左为 O 到 Z 12 个键,双排一共 26 键。这个最初的排列到今天还留有一些历史痕迹:现在的键盘中, Z 在左下角最后一个位置,中间的 FGH JKL 从左至右按字母表次序排列,下排 MN 则是从右至左。

不久以后,键盘被扩展为 38 键:加入了数字键 2-9 ,连接符、逗号、句号、问号。为什么不需要数字 1 和 0 ?因为可以用 I 和 O 代替:这两个字母和数字看起来差不多,放在句子里也不会被误解。因为键位实在太多了,数字键加上连字符(今天,这个键依然在顶行的数字键右边)就被单独安排一行,这样新布局被设计为 4 排, 上两行 9 键,下两行 10 键。

怎样用三排按键排列 26 个字母就是一个新问题。1870 的早期版本中,他们选择把 AEIUO 五个元音字母加上 Y 这个半元音(6 个字母可以对称一侧三个?)以及三个标点一共 9 个键放在第二行,在数字键的下方。句号和问号放在中间,排列为 AEI.?YUO, 一共 9 个键位 。对照今天的布局看,EIOUY 还是在上排,而中间一排的 DFGHJKL 几乎被保留。当时的中排为 B 到 M 10 个按键,下排则是 ZXWVTSRQPN ,为字母表的逆序。

接下来的调整是这样的:T 这个常用字母和 ? 交换,移到了最方便按到的上行中间,W 和 Y 一样是个半元音,也被移到上第一行元音行。Q 由于很不常用,被移到了最不方便按到的左上角,A 则向下移了一行。由于在 1870 年,经常需要输入 1870 或 1871 组合,而 I 又被当作 1 用,所以就安排在了 8 的下方,和 O (当 0 使用)排在一起。

当时的美国采用的是 American Morse Code ,和今天通行的摩尔斯电报码不太相同。American Morse Code 不仅用长短音滴答编码,还需要区分声音之间的间隙长短。在字母之间有一个短间隙、单词之间的间隙长一些,句子之间停顿时间更长。而字母编码中,除了长短音,还有一个略短于字母间隙的快速停顿。我觉得可以近乎理解为一种三进制编码(加入停顿),而不是滴答这种二进制。

Z 的编码为 "... ." ,也就是滴滴滴停滴;E 的编码为 . 即一声滴;S 的编码为 ... ,即三连滴。当单词中有 SE 连续组合时,需要三连滴顿一点加一个滴;而 Z 则是三连滴停顿短促一些加一个滴。两者非常相近,区别只在于停顿时间的细微不同。所以,在记录电报时往往辨别不清需要等后续的信号来判断到底是 SE 组合还是 Z 单字母。这个时候,就不可以轻易按下键盘。S 键换到 C 的位置和上方的 E 以及下方的 Z 之间就很顺手。收到 ... . 时,手指先放在 S 键上但不按下,后续判断清楚,手指连续按下 SE ,或是下移按 Z 都很方便。另外,C 是 ".. ." ,而 I 是 ".." ,C 很容易和 IE 混淆。基于这样的理由,S 取代了 C 的位置,C 则放在了 E 的下方, 而 C 移到了下方。

到了 1872 年,键盘扩展为 42 键位。在当年 8 月的 Scientific American 杂志封面刊登了打字机的图片,可以一窥当时的键位排列。和今天的键盘区别在于:第一行没有数字 1 和 0 。数字键右侧的连字符右边是逗号和单引号。字母第一行为 QWE.TYIUO_ ,和今天已经非常相似,区别在于 R 的位置是 . P 的位置是下划线。标点符号都排列在第一行,第一行太长了,就把下划线下移到 O 的右侧。C 和 S 的位置都按电报习惯调整到了左侧 E 的附近。注意,在这个版本中,左下的三个键位是 ZCX 而不是今天的 ZXC 。左下角放的是 & 符号,这样排列可以让 C 离 S 更近一些。不知为何,R 和 P 被安排在右下角。

但在后续 1873 年的改进版本中,变成了 43 键。随着键位变多,每行的键也随之增加到 11 键。可能是 Sholes 对这种符号和字母混杂在一起的排列不满意,他把原来的 . 和右下的 R 键位做了交换,O 的右侧换成了 P(和字母表的次序相同)。第一排的字母排列为 QWERTUIOPY: 。不久(1873 年),Y 又被调回原来中间的位置,第一行字母键次序和今天完全相同。

打字机的发明人 Christopher Sholes 把专利权卖给了一个枪械制造商 E. Remington & Sons ,在 1874 年 4 月,打字机的商业版本 Serial No. 1 由 Remington 公司发售。使用的就是这种布局,和今天的字母键排列不同点之处有两个:第二排字母键比今天多一个 M ,排在 L 的右侧。第三排左起为 ZCX 而不是今天的 ZXC 。到了 1875 年,有人想出了一个新的机械结构,通过按下一个键,可以让同一个字母键即可以打出大写又可以输出小写。由于一个按键可以输出两种符号,标点符号的数量得以大大增加,同时,原来用于标点的按键数量又可以略微减少。这就导致了标点键的重新排列。1878 年 12 月,更新了新的商业版本 Remington Type-Writer No. 2 ,缩减到了 40 键(因为同一个键可以输出两种符号了)。其中两个按键用于切换状态:右上角的 lower case 按下,按键为小写字母;左下角的 upper case 按下则输出大写字母。字母键的排列则保留为 1874 年 Serial No. 1 的方案。

从 Remington Type-Writer No. 2 开始,打字机的用户群体从电报员逐步转移到速记员,开始有了专门的打字课程。最早教授的是六指输入法,不用小指。btw,我小时候学校教过打字课,使用的机械打字机。按键盘需要很大力气,小指去按非常不舒服。

到了 1882 年,Remington 公司因为美国内战后的军工订单锐减以及多元化投资失败,陷入了严重的财务危机。他们没有精力去经营打字机这个副业。原来做打字机业务的销售和高管就跑出来成立了一家新的商业体叫 Wyckoff, Seamans & Benedict ,想专门卖打字机。但是,打字机的专利还在 Remington 公司手里。新公司只得到了改良专利优先使用权和独家经销权。为此,新公司对老型号做了微调(改良专利)以回避原始专利。新版的 Remington Standard Type-Writer No. 2 把 M 向下移了一行放到 N 的右侧,冒号和分号合并后移到了 L 的右侧。C 和 X 做了交换,变成了现在的 ZXC 排列版本。

当时市场上已经开始出现(侵权)竞品,所以新版本特意标注了 Standard ,而其它竞品不得使用 type-writer 避免被起诉商标侵权。待到 1886 年老 Remington 公司破产,枪械业务则被其他财团收购演变为今天的 Remington Arms 。而在 1892 年,WS&B 正式注资成立了 Remington Standard Typewriter Company 收购了打字机的主要专利。但市场上还有几家生产打字机的公司分别持有部分微创新专利。到了 1893 年,以 Remington 主导联合了四家核心竞争对手,共同出资成立了一家母公司 Union Typewriter Company ,彻底合并共享了各自手中的打字机专利。到了 1898 年,QWERTY 称为了行业标准。

在 1910s 年代,QWERTY 被用于 Teletype (电传打字机) ,到了 1940s ~ 1970s 被广泛用于计算机终端,QWERTY 成为了现代计算机键盘的标准布局方案。早期的 Teletype 按键为 27(26 字母和句号)+ 4 控制键。数字和其它符号则被安排在这些键位上(1 到 0 的数字键放在第一排字母键上)

点老救世记的深度体验

2026-10-11 19:30:36

我最近重新玩了两百小时的《Dotage 点老救世记》,对这个游戏有了很多新的认识。之前是在今年初玩了一百多小时,对这款一个人花了十年以上时间做的游戏相当佩服。经过近 400 小时的游戏时间,我对这个游戏的理解慢慢发生了变化。有不少游戏设计方面的东西值得研究,但却很难说清楚,需要用文字整理一下。

这是一款关于规划和选择的游戏。它固定了回合数(标准模式下,共 310 回合),所以玩家实际上需要规划整个游戏过程,无法通过控制游戏发展节奏来决定是速通(注:实际上有手段更快结束并赢得游戏)还是慢慢发展。但玩家可以选择怎样规划这个游戏过程:是把发展节奏拉长,平缓延续到游戏结束;还是快速发展到一定阶段,停留在某个规模对抗系统直到终末。这会导致非常不一样的游戏体验,并没有最优通解。

本质上,玩家需要积累健康、希望、温度、自然四个维度的点数,对抗终局的天灾点数:即玩家在终局点积累的对应点数需要和系统设定的点数相当。在整个游戏过程中,还会动态设定若干检查点(事件),在检查点处,玩家积累的点数会重置,根据检查点处点数和系统设定的点数比较,来决定获得增益还是惩罚。

如果从整局游戏的结果来看,四个维度点数的需求总量是确定的,可以从两个方面来估算对抗它们所需的产能。其一、一共需要多少原料,这些原料包括了建筑的一次性成本、科技研究需要的点数对应的研究成本、维持工人的食物以及药物的总成本、产生点数需要的原料生产总成本。其二、生产这些原料需要多少人力。因为玩家是逐步发展的,所以单个工人的单回合产能是逐步上升的。如果玩家希望更快的提升人口的产能,就需要在前期把更多的产能放在科研或者增加人口或者基础建设上。在大部分情况下,增加人口都是更优的方案,因为只是增加了少量无效投资。因为后期并不需要那么多建筑,关键的高科技建筑几栋就能满足需求。为了避免出现明显更有优势的玩法,且操作过多工人会大量增加操作强度,让游戏并不好玩,所以游戏在这两年的迭代中明显增加了对过多人口的惩罚。除了最明显的直接根据人口数量增加所需的点数外,还有诸如传染病这种负面事件强化对过大规模人口的惩罚。对更少人口规模也有很多额外的事件奖励。总的来说,这块的平衡调整得不错。到底是选择更大的人口规模还是精简的村庄,慢慢倾向于游戏过程中的随机事件的影响,尤其在最高难度模式下尤其如此。人口规模变成了根据具体情况决定的应对策略选择。

科技水平也是如此。玩家可以选择低科技水平通关,也可以选择全科技研究,用最高科技抵抗天灾。这两种选择之所以成立,也在于固定回合数下,发展科技所占成本在完成整局游戏所需中的占比需要为玩家考虑。它不像可以无限玩下去的生存游戏,无论如何最终玩家都会研发完绝大部分科技。说到底就是一次性成本支出在较短的整局游戏回合数中的占比不能忽视。

玩家的水平高低不在于发展得多快,靠快速滚雪球去抵抗更强大的系统,而在于玩家是不是可以用合理的规划,有计划的应对。游戏的随机性决定了:游戏终局时对四个维度总点数的需求不一样,游戏过程中每个阶段点的需求也不相同,到底应该重点发展哪个方面是在游戏过程中慢慢展示的。游戏难度越高,就越不可能用同一个套路全面发展来保证处理所有问题。不光是游戏过程中遇到的挑战的随机性,系统给的随机奖励也会改变不同科技、建筑的效力。

在游戏中,玩家需要不断调整四个维度点数的生产力,同时选择把一部分生产力分配在发展生产力上:研究新科技和为下一个挑战提前准备。游戏的阶段挑战都是刚够最好,超出浪费,能把最多的资源放在发展上固然最好。这就需要仔细规划:怎样才能刚刚够用。简单的衡量标准就是,看看每个回合的每个工人是不是在符合游戏回合数的生产力最高的最佳岗位工作;以及在每个阶段事件结算时,对应的点数刚好不超出。

在早期的游戏攻略中大多强调快速发展人口的重要性,甚至推荐把村庄人口快速推到 50 以上,并用 100 多人口完成游戏。这是玩大多数同类游戏的通用方法,用滚雪球的效应做到指数发展打破系统的设计。村庄实力在于产生四个维度点数的能力,它就是工人数量乘以建筑的效率(单人生产力)。提高工人数量是最简单的:新增住房的成本并不高,单个工人的生产成本在游戏至始至终都是固定的:消耗两个工人一个回合的产能和四个回合的食物。而维持工人只需要每回合一个食物,这小于单个工人的最小产能。简直是有益无害。但现在的版本已经极大的提高了高人口下的维持成本:从 30 人口(标准模式下)开始就增加了所需的系统点数,并随着人口规模上升逐步上升。这意味着新增每个人口不仅要负担一个食物,还需要确保这个额外人口能生产对应的系统点数才有正收益。

即使如此,除非为了体验低人口规模的游戏体验(游戏还设有特别的挑战:马图斯长老的不超过 10 人迷你村庄通关游戏),发展人口依旧是最优策略,但玩家的选择变成了在何时发展到什么规模,而不是一味的开局快速加人。同时,超过 100 人口这种巨型村庄也绝非最优解。这让游戏的大多数时间里,工人数量都不够充分,玩家必须选择在什么时间点加一个工人,还是轮换工人的职业(需要支出额外的时间和工具成本)。即使有了高生产力建筑,低等级建筑也不是一无是处,因为它不需要特定职业,工人的轮换成本更低。

玩的好坏也就在做选择和提前计划中体现出来。因为在每个时间点(事件结算日)对生产累积点数有要求。提前规划可以在扣除成本后,让每个工人最终在最高生产力下工作,总产值更高。这也意味着分出了更多生产力在发展自身上。由于工人切换往往需要三个回合(训练职业),还需要准备工具和训练场地;产生新工人则更长,需要五个回合的繁殖生长期,这都需要多个回合的计划。在新的 DLC 里,加入了把工人派出去甚至放逐的设定,动态调整工人总数也变成了选择。

在高难度挑战中,几乎每个事件结算完就需要规划应对下个事件的回合次序了,而不是慢悠悠的按规定套路发展。查看预言页可以看到回合数,而不能等到预言发生后主界面上显著体验的 5-10 回合倒数计时。这时候就能算出需要的那一方面的点数需要生产出多少。因为计划时间比较长,所以最优计划中需要的科技还没有研究出来。玩家就需要计算点出科技需要的回合数、建造对应建筑需要的回合数以及建设成本、需要的人力成本,把计划回合数做到最长去契合事件发生的时间。通常周期拉的越长,综合成本越低,多出来的产能就可以用来发展。


在最早的 100 多小时游戏体验中,我不太喜欢游戏奖励玩的好产生正面事件形成正反馈,失误产生负面事件用负反馈惩罚。因为在高难度下,游戏本身容错性就很低,负面事件的负反馈更加雪上加霜,给我的感觉是,在最高难度下,哪怕一次不受控的负面事件(原本可以正确处理获得正面事件的正收益)给的负面惩罚,这局一定会崩盘。而这个游戏每一盘都需要玩一整天,挫折感实在太强。玩着玩着,我发现承受一些负面事件也可以是理性的选择。关键还是在于你需要提前规划:如果阻止不了,那么就尽早放弃,把产量早点投入到抵御其后果,并加强其它方面的发展。更有趣的是,有时残酷的负面事件结算并不一定全是坏事,甚至有可能利用它。我有一局的小天灾是整个村子燃烧起来。就是这次,我学会了不是所有的燃烧都必须用水去扑救。主动拆建筑隔离燃烧带也很有用。我只保了 1/3 的建筑区域,用火势隔离的方法故意不去救火;结果最终天灾是寒冬,正好用大半个村子的熊熊烈火(产生的热量)抵抗住了。完成后,特别有史诗感。

处理这类问题的关键点在于,不能既要又要。提前计划 plan B 就有希望。新计划要提前计算并贯彻下去,不能在旧规划方向上浪费。正因为游戏提供了各种玩法细节上的选择,行动组合错误才致命的。

如果想挑战最高难度,我认为高难度是游戏的精髓,熟悉科技树和对应的组合真的只是开始。网上很多攻略会介绍一些最优组合,一开始学习没问题,但不要永远千篇一律的用同一个套路玩。 尤其在高难度下,根据游戏的推进(遇到不同的事件)必须灵活调整,越熟悉游戏,就有越多的选择。在完全熟悉游戏的过程中,玩家会学习到很多固定的科技建筑组合应该如何摆放建筑,如何指派工人的职业,每个职业需要几个人手,这几乎有最优解。但是、这是一个有限回合数的游戏,几乎不可能让你达到最优状态。更别说中途随机事件的影响。玩得足够多后,你就能根据每局游戏的半随机科技树做计划了。我现在每次开局,第一件事就是仔细查看科技树,科研的次序也不再根据发展的需求来,而是尽快点开几个初级科技,尽快的查看下层科技方便计划。玩到这个程度,自然也可以理解,为什么“回溯”(用于修改当局游戏的一个科技)是一种超强的能力。

另外值得一提的是:每个长老的玩法都很特别。虽然只是改变了一点点规则,但每个都需要大量的学习。我目前只玩了一半的长老,但每次玩新长老都能给我“原来还可以这样玩”的感触。如果你只玩第一个长老,会逐渐感觉到游戏中某些套路明显强于另一些(尤其是不加 DLC 时),有些科技简直是鸡肋。但是在玩其它长老时,就会发现,这个东西原来还可以这样用。

Caves of Qud 初体验

2026-09-18 15:28:47

关注 Caves of Qud(卡德洞窟)很久了,之前一直没下决心玩。最近发现它更新了多语言支持分支,在 steam 创意工坊里有了一个初步的中文 mod ,便试了试,果真很有趣。

我玩传统 Roguelike 很久了。最早是在 GBA 上用干电池玩特鲁尼克大冒险(以及后来风来的西林系列)。在 2008 年的时候就试过 NetHack 还尝试过做汉化 。ps. 现在已经有针对最新 5.0 版 NetHack 的中文版本了,在 AI 翻译的加持下,体验很不错。后来沉迷过很长时间(600+ 小时)的 Rogue's Tale,甚至它的官方中文一开始就是我翻译的。还玩过一点 CDDA , Cogmind ,以及关注过 RogueBasin 上很多很多的 Roguelike 。

除了在游戏机上被彻底改造过的不可思议迷宫系列,很少见针对手柄交互改造的特别好的 Roguelike 。这或许是 Roguelike 天然的系统复杂性吧,毕竟不可思议迷宫也大刀阔斧了砍掉了不少东西。但 Qud 让我改变了这个看法,它用手柄玩太舒适了,看来还是得有人好好设计。交互做得好加上适当的本地化,就可以极大降低体验 Roguelike 的门槛,只是这类游戏最大的门槛还在于玩家不知道该在游戏世界里做什么,现代游戏把饭都端起来直接往玩家嘴里送的做法已经大大削弱了玩家自己探索游戏的能力。

传统 Roguelike 有两大方向:

一是地牢远征。让玩家一直琢磨怎么战斗,挑战更难的地牢。但是它又不像传统的战斗 RPG ,让玩家去想什么 Build 最强,而是偏重于让玩家探索游戏世界的规则:找到大量系统间的交互。物品可以有隐藏属性、药水不只一种用途、怪物和环境会互动、宠物能影响游戏、物品存在意想不到的用途来解决完全不同的问题、永久死亡在带来挫折感的同时也在教会玩家:原来还有这样的系统存在。玩这种游戏,玩家的乐趣往往不在于“我的角色”又变强了,而是玩家本身发现了新的游戏规则:“我”变强了。

二是世界沙盒模拟。它更接近现代游戏中的开放世界:作者设定好世界、城镇、NPC 阵营、主线任务、加上一些随机生成的迷宫和支线,把玩家扔在里面体验这个世界。追求战力更强往往不是唯一重要的,处理好玩家角色和世界的关系往往也同样有意义。玩游戏不是一个个地牢打到底,而且揭开作者设定好的迷雾,体验人为设计的剧情。特别是永久死亡的经典设定,可以让玩家更为投入去体验角色和世界的互动。

每个 Roguelike 在创作时,并非固执上述单一方向,可以把它们融合起来,也可以往其中一个方向专精。这篇 Blog 不是一篇针对 Roguelike 谱系的范范而谈,我就不逐一列举游戏了。但有一点:几乎所有 Roguelike 的创作都不是商业驱动的,每个长期维护的 Roguelike 都有它独特的魅力和不一样的游戏体验,玩过一个就去类别另一个的好坏很容易带来偏见。由于 Roguelike 大多基于复古的画面,极低成本的美术,全靠玩家脑补。作者就可以把更多的精力拿出来创作奇特的游戏机制,这是商业游戏做不到的:如果设计一个独特的玩法就需要连带制作大量的动画以及交互,不仅制作工期无法保障,尚且不能保证玩法真的好玩;保守的做法就只能是在已普遍被大多数玩家认可的玩家上雕花。

我这两天大约玩了 20 个小时 Qud ,体验很好,但只能算是刚刚迈出新手区。在玩的过程中,记录了一些自己的体验,感觉对以后设计游戏有帮助,写这篇 Blog 也是做个汇总小结。


玩家玩游戏,游戏一定要有一些东西符合玩家在游戏之外的体验,两者共鸣方才投入到游戏中去。

游戏是不是一定要有叙事?当然不是。但“叙事”是一个很好的共鸣点,它可以将玩家在游戏之外文艺作品(历史、小说、电影等等)中获得的体验转化为游戏体验。一旦激发了玩家大脑中的想象力,视觉冲击或是操作反馈都比不上“脑补”的威力。Qud 是一个强叙事的游戏,游戏世界和主线情节都是人为设计的。如果玩家喜欢那种未来复古主义风格,就能很好的融进游戏:它不是 fallout 那种末日废土,玩家不必去关注当初世界如何毁灭,更多的是体验那种科技发展为魔法一般无法解释的东西后,文明在如何运作。那些旧世界的遗物变成了一种古怪的东西:一部机器可以同时存在技术意义、历史意义以及宗教背景,当然还有游戏机制供玩家学习。

玩家能感受到 Dune 对 Qud 世界无处不在的影响:所有对话都以 Live and Drink (长生共饮)结束。淡水变成了游戏世界中的通用货币,这不仅仅是一个文字上的设定,还深刻的塑造了游戏中独特的经济系统。游戏里没有钱,只有淡水。和 NPC 交易时,如果价值不对等,差的部分需要从玩家背包里取出淡水补上,多的部分 NPC 总能从异空间变成等值的淡水补上,但玩家的负重要能承担。

玩家没有仓库和银行(至少我还没有接触到),只能增加自己的负重能力,才能带更多的“钱”。所以游戏可以不限制玩家去 Grinding (刷),因为你刷了也带不走,没地方积累。高价值东西还是无法从 NPC 那里交易到。淡水这个通用货币还设计成相对不轻,不可找零。基本弹药、食材的交易价只有百分数,为了平衡交易(不亏钱)最后都是用这些消耗品补上。这让我联想到,(据说)津巴布韦当年经济崩溃后人们普遍使用美元,但美分却不接受,最小面额就是一美元。在商场买东西尽量凑整,不足的部分用糖果找零。

和大多数 Roguelike 不同,玩家不用刻意在身上保存淡水解决口渴状态。游戏定期从背包里扣除淡水,扣完就死。但只要找到任意 NPC 都可以交易到淡水,游戏世界中并不缺水,不需要专门去找水。经济和生存结合在一起是个很有趣的设定。

那么,如何交易高价值物品?游戏中设定的贸易品很特殊,通常是贵金属,它在交易中价值是恒定的,买卖同价,而单位重量很小。玩家可以尽可能把有价值的东西都折算成贵金属携带在身上,这样才能在需要时交易到单位价值很高的物品。但贵金属在世界中却很稀少,所以我在玩的时候,往往还需要再交易回来。和贸易品不同的是普通商品,往往有很高的买卖折损,也就是卖价很低,买入很贵(同时受玩家属性技能影响)。很多商品本身却很轻,方便携带,只是你只能做一次性交易。典型的商品就是书,有价值的书读过就把里面的信息提取出来了,书本身可以用很高的价格卖掉。但书很轻,比起直接带淡水,携带量可以大很多。

Qud 的经典模式是永久死亡的。即角色死了就必须重零开始,没有存档可供重来,没有遗产可以继承到下一局(没有 meta 成长),成长的只有玩家对游戏世界的认识。这种设计带来的游戏体验和传统 RPG 相比是截然不同的:玩家需要小心翼翼,做高难度任务被迫做充分的准备,尽可能的收集游戏世界中的信息。这所营造出的那种在末世挣扎求生的体验无可取代。

但角色终有一死,永久死亡带给玩家带来的挫折感该如何缓解?Qud 的答案是:打败敌人或许很难,但逃跑总是相对容易的。无论你选什么初始 build 开局,总是默认给你一个“疾驰”的技能,新手区几乎没有可以跑得过你的敌人。再强的怪也很难秒杀你,留给玩家打不过就跑的机会。加上是回合制,玩家可以从容的想办法,只要不故意作死,还是有反悔的机会。游戏经验带来的区别是:是否过量的使用消耗品,开局送的那些药剂撑过新手村肯定是够用了。懂得正确的衡量局势,你可以用的更节省一点。慢慢的学会利用环境高效战斗,乐趣也能不断涌现。

这种不给反悔机会的机制,让我在玩 Bey Lah 的 Kith and Kin 任务时,体验到了和玩一般推理游戏的差异。因为知道选错了就不能反悔,所以我非常仔细的调查了所有的线索、推敲每个村名的对话、观察每个鹿人的外观。甚至,我在玩游戏时用了一大张草稿纸,画出人物关系图,把获得线索一一标注在 NPC 上。最后一次性做出正确的推理结论时,成就感慢慢。时候我查了攻略才知道,这个任务是专门设计的,作者编排了所有人犯罪的可能性,枚举了每种情况的线索和证据,然后打乱随机出现在游戏里。可能是设计成本太高,整个游戏里似乎没有设计其它类似的任务;亦或是这种游戏体验有一次就够玩家回味了,不适合把它(本格推理)做成游戏的核心玩法。

btw,我在玩的时候想到一个点子:构架一个虚拟世界,比如围绕武侠世界的世界观设定各方势力,但把终局阴谋利用随机性隐藏起来。比如,每次创建世界,武当或少林的掌门都可能是阴谋家也可能代表正义,或者两者皆是。玩家在游戏世界里会永久死亡,但玩家可以在同一个世界里重新再玩,玩家本身可以知道这个世界里的阴谋的一部分:武穆遗书藏在西湖水底,武当掌门是带头大哥…… 玩家可以利用这些知识在新的 run 中更高效的玩游戏。但重新构筑一个世界这些则会重新被打乱。采用怎样的随机算法、程序化构建可以做到什么程度、人工的设计量到底有多大,这些还没有细想。

Qud 的地图采用的双层结构:大地图加每一格的展开(小图),看起来是半随机的。地图西边永远是盐滩,中央是峡谷,东边是丛林,怪物分布从西至东逐步危险。新手村 Joppa 永远在地图西边盐滩周围,第一个城镇六水镇一定在西北方的盐滩中间。但随机的遗迹和小地图布局则是随机程序化生成的。Qud 极大的弱化了食物和饮水方面的生存压力,这可以让玩家摆脱很多 Roguelike 中的食物焦虑。一直不进食也不会饿死,最多只会顶着一个速度下降的 buf (增加恶战中逃脱的难度)。而只要在安全地带扎营煮饭,就可以无消耗回复饱腹状态,烹饪技能和食材消耗属于锦上添花:给第二天提供一个正面 buf 。饮水前面也提到了:水的消耗变成了经济系统的一部分,理论上玩家很难陷入脱水而亡的境地。更多的是减少玩家远征的经济收益。

两级地图设计的很恰当:玩家在大地图上可以非常高效的移动,很快(相当于压缩了游戏时间)就能完成长途旅行(得益于弱化食物饮水的设计),也可以主动进入小地图探索。在大地图上移动有一定几率触发迷路,在迷路时,玩家强制进入小地图行动,但玩家地表很少有迷宫,玩家朝着大体的方向走就不会走冤枉路,只不过要应付路途上的怪物。如果碰到 NPC ,交谈就能解除迷路状态,在周遭无敌人时就可回到大地图。如果在无人区,走足够多的路(一般不超过大体图上的两格)也能摆脱迷路状态,这种大小地图的无缝衔接对开放世界的体验很好。小地图及地牢的程序化生成向玩家提供了每个 run 的新鲜感。配合地形及怪物搭配,有足够多的战斗内容供玩家学习。

很多游戏在地图设计时设计一些软屏障,典型如魔兽世界,在地图间放一些高等级的怪阻止不够等级的玩家探索高等级区域。Qud 不是这样做的,它不阻止玩家在大地图上高效旅行。因为故事主线放在地牢中,地图旅行不为难玩家。它需要让玩家更容易脱离高风险环境,避免永久死亡带来的挫折感。有技巧的逃离死亡威胁也可以和战斗一样带来优秀的游戏体验。在故事主线中,新手阶段的 Grit Gate 那里接到的任务,就是去一个充满地下管道的地城取回报废的机器人。游戏鼓励玩家在 12 级以下完成这个任务(获得更高报酬),我是在 10 级去做的,也没有事先查攻略,攻略整个地牢的过程惊心动魄。这里首次面对单向通道(只能从通气口往下跳,无法原路返回),所有的怪都打不过,只能一路狂奔,猛打治疗针,身上有什么药就吃什么,哪怕顶着各种负面 buf 。永久死亡带来的恐惧在整个过程中挥之不去,最后一层中,哪怕眼前不远处就能看见及其吸引人的物品也不敢去捡。

我在玩 Qud 时,能确切的感受到,硬刷等级的收益不大。除了开局在新手村附近稍微刷刷等级可以提升初期的存活率外,出了新手村就不用刻意升级了。反正后面靠打怪升级需要的经验值会指数级上升,而提升的角色能力却非常有限。最主要也就是血条长一点,更不容易死掉,打败怪物的能力却没有对应成长。升级送的 SP 倒是可以直接购买任意技能,只不过靠这个一定是不够用的,就好比学了烹饪,战斗技能就没 SP 可用了。最有效的方法还是四处游历和各地 NPC 阵营结下水盟(只需要消耗一单位的淡水),用阵营好感度去换技能。这里游戏留给玩家的选择就是:阵营好感度是此消彼长的,见人就拉上喝水大体没错,只是不小心得罪了远方的怪物就得留到以后去解决了。很多游戏中的装备和物品也并不增加战斗数值,但装备上就能拉高或降低对某个阵营的评价,占着负重让收集癖左右为难。提升对特定怪的好感度可以极大的改善在游戏中生存率。最安全的活法自然就是让怪物不攻击你。

对大部分 Roguelike 来说,在游戏中变强并不是堆砌数值,寻找更强的 Build ;而是发现了游戏中的新机制。在 Qud 中,学会了如何破墙等于在嵌入绝境时多一条路逃跑;学会了飞行,前面那个单向通道就能变成可以回撤的双向通道;学会用爱情针魅惑敌人,不仅可以避免和 boss 交战,还能一起喝水换得世界的秘密(通向极品装备的捷径)…… 所以没有遗产继承的永久死亡固然可怕,但角色死了,玩家真的可以感受到“我”(通过了解世界的机制)变强了。


最后是吐槽 AI/LLM 时间。

目前我最长的一个 run (十个小时以上)终结在主线任务去 Bethesda Susa 。在这个节点上玩的有点飘,觉得游戏给的容错性足够,已经不太会死了。但在下这个主线地牢前,我特地和 Gemini 讨论了许久:我问现在 12 级去是否安全,LLM 说把冰抗加到 40 以上肯定没问题。我凑了一身防寒装就去了,但没等冻死就先死在了中间的巨人三巨头处。事后我仔细读了好几篇 Reddit 上的帖子,老玩家总结说,做这个任务最低 20 级就相当极限了(HP 长度不会被秒杀),至少推荐 28 级以后去。虽然有不少邪典玩法避免战斗,但那些需要的筹备工作,不看攻略的我肯定无法制备周全。

想想也是:AI/LLM 一定不会亲自玩游戏,只能道听途说。试想一个没玩过游戏的人教你玩这样风险极大的游戏,你肯定不会信任他;那又怎么能轻信 AI 呢?多半还是因为 LLM 把语言组织的太动听。

暑假的英语补习

2026-09-09 14:53:21

对云豆来说,这个暑假特别长。

他小学毕业了,6 月中就已放暑假,9 月 1 日方开学进入初中。自然没有学校布置的暑假作业。我不想他整个假期都沉迷在短视频和蛋仔派对中,所以每天给他安排了英语学习。

7 月初,我记录过对孩子之前的英文辅导。先前,我用的《英语在用:剑桥初级英语语法》给他补习基础语法。学习的效果还可以,原本以为可以在暑假过渡到中级本。但读了两天后就发现完全进行不下去。倒不是中级语法难度大了很多,而是他本身的阅读能力跟不上。

阅读不仅仅是 “英文” 语言的问题,换成中文也一样。所以,我换了一套书:《Basic Reading 1200 Key Words》

我的想法是这样的:首先应该通过阅读扩大他的单词量;其次他真的需要增加“阅读”了。他的中文阅读太少,无法静心读书。看起来,这套书的内容如果对应成中文读物,似乎更低年龄一些(感觉是 7-8 岁左右)。但对云豆来说正合适。从单词量来说,也比较契合他现在的英语水平。他虽然已经小学毕业,但难以静心读下长篇章节书,阅读这件事还是得循序渐进。

这个假期,雷打不动的每天坚持读一篇,差不多刚好在假期读完了全部三本。每篇文章只有十几句话,我原本以为可以半个小时读完。但实际上,一句句陪着精读,做完后面的练习,每天都要花掉整个上午的时间。早上九点左右早餐后倒中午十二点午餐结束。

我感觉通过这个暑假,他在英文上的阅读量已经超过了过去两年中文阅读量。阅读能力至少可以独立读完一小篇文章,真的理解文字传达的意思了。

这个暑假我还发现,其实云豆的英文单词量非常匮乏。只要是偏抽象的词就几乎不认识。比如, move / most / even / include / each / expect / only / just 等等这些我以为他早就应该认识的单词尽然完全不懂。即使在暑假中每日阅读见到,也要经过几周,反复见过 5,6 次以后才记得。

他理解英文的方式一直是将一个句子中认识的单词在脑中不断排列组合,拼凑出大致合理的句子。从英文的短句变成长句后,这个方法就完全失效。而阅读能力的缺失导致差不多摸到意思了也表达不出来。这个暑假,我教给他最重要的一课是:英文单词和中文绝不是一一对应的映射关系,要理解单词的含义,不可以“背”中文译词。


可可是另一种情况。

她暑假过后上四年级,学校的英语学习会从纯口语过渡到书面语。我之前关注她的英语学习情况较少,她在学校里英语成绩还凑合(考试成绩一般在 95 左右)。

但这个暑假一开始,我就发现了问题:她只能勉强背诵英语课本,实际上看到陌生的英语句子就完全读不下来,更比说运用英文了。甚至,26 个字母打乱了后识别都有困难。在这个水平,只能从头开始教。

上次 blog 下,网友推荐了《典范英语》Good English ,我查了一下,其实对应的《牛津阅读树》(Oxford Reading Tree)。我就选了这个从头带着可可学习。这个暑假读完了《典范英语》的 1 和 2 。每天在午休过后读一个小时,然后在晚上睡前复习一个小时。

从零开始学习的效果还是比较明显的。一个暑假之后,可可大致可以看到单词猜到读音了。(我刻意教了一些自然拼读的法则)我完全把她当成零英文基础来教,她在读《典范英语》第一册刚开始时非常吃力,虽然只有几个简单句子,但读完就忘。需要不断的回滚跟读练习。大约一个月后情况才好转。因为第一本每篇故事内容比较短,比较低幼,所以一天能读 3-4 篇,主要还是练习口语发音为主。

第二册开始句子要复杂一些,一天就只读 1-2 篇了。感觉按这个进度,今年是可以读完第 4 册的。


总得来说,学习贵在坚持。我感觉用什么方式什么教材去学也没那么重要,重要的是保证每天一个小时以上的投入时间。其实也挺考验我自己。陪着阅读学习也是很花时间挺累的。驱动我一直做这个事情的就是把它变成每日日常,用惯性来推动。

银河竞逐的乐趣和策略

2026-08-20 20:01:10

银河竞逐是我最喜欢的桌游之一。我曾经为它写过两篇 blog :银河竞逐的设计 及 如何教人玩银河竞逐 。

最近我教会了小孩玩这个游戏,我自己也在电脑上玩了 200 多盘。主要是在 BGA 上和人对战,以及在官方授权的电子版 中挑战最高难度的 AI 。和过去喜欢多人混战不同,这段时间我主要玩双人规则。虽然在线下,我玩这个游戏的水平超过一般桌游玩家,但在线上,我只有略高于 40% 的胜率。说明这个游戏的策略还有很高的天花板我没能摸到。和最高难度的 AI 相比,我的胜率超过了 50% 。

这是为数不多有着极深的策略,却又超快节奏的桌游。在 BGA 上默认只给两个选手各 3 分钟的总时间,通常在 5~6 分钟就可以完成一局游戏。应了它名字里的 Race ,玩起来颇有竞速的感觉。我在游戏过程中总是觉得思考时间不够,如果纯凭借经验(感觉)打牌,很容易输掉。特别在最后两个回合,往往需要精算自己和对手的各种可能性,找到取胜的可能。胜负比分通常差距非常小,运气成分虽然存在,但总有希望通过计算挽回。而判断上的一个小的失误却会迅速落下对手一大截。

这个游戏核心目标就是:在触碰结束条件的那一刻,比对手拿到更多的 VP 。新手则往往理解成单一的如何更高效的获取 VP 。这两者是有区别的。因为比拼获取 VP 的效率往往会减少 PvP 游戏的对抗性,变成埋头干自己的事情。初玩 RFTG 的时候,我也一度觉得这是个对抗性不强的游戏。但在实战中却发现,必须时刻关注对手在做什么。首先是通过判断对手的行动,帮助自己更高效的获取 VP ,其次是根据对手的节奏,扭转游戏结束的时间,做到在结束那一刻超过对手的 VP (而不是追求获得更多 VP)。

所以在高手对决时,尤其是最后,需要仔细计算游戏会在几轮结束,以及对手希望在什么时候结束。自己有什么方法维持几轮,是需要拖延多一轮、还是抢先减少一轮。而轮次最终又是双方一同决定的,这就存在很多博弈空间。需要提前估算每种情况的胜率和最佳对策。游戏规则给玩家提供了大量的选择。VP 可以通过铺在桌面的卡牌积累,也可以用场上的牌组持续生产。游戏终止条件依此分成了两个:任意玩家在桌面铺了 12 张卡牌,或耗尽 12 倍玩家数量的 VP token 。

在引擎构建方面,主流又能分为主导开发设施、军事占领、生产消费流派。细分还可以更多。这让玩家无论抽到什么手牌,总有办法构筑出有效的组合。而不同的流派决定了玩家每轮的行动倾向性,影响游戏的节奏。对手的流派影响着自己的流派的推进节奏。这种影响,可以让人可以预测对手的行动。正确预测对手的行动可以让自己获利,而这个游戏的胜利的本质是找到比对手快一点的路线。这就提供了博弈空间。这就有点像打(德州?)扑克,玩家的思考会有多个层次:第一层是计算如何行动构筑一个最强大的引擎,让自己的利益最大化;第二层则是猜测对手想做什么,怎么利用对手的行动产生优势(对自己构筑引擎,未必是最优的,但只需要比对手好);第三层是,去思考对手在第二层上猜测自己,从而避免让对手取得优势;第四层是,分析对手在前三个层面做决策,制定对自己的最优策略。

游戏(尤其是双人模式)节奏非常快,以我的经验,通常在 6-8 轮就会结束。而牌库空间相比较而言非常大,抽到什么卡几乎无法预测。假设所有人都对牌库及其熟悉,那么在前期就必须做好多手准备,中期随时转型。而游戏规则也提供了大量中途转型的可能,玩家几乎不会一门心思的贯彻刚开始的计划,都是随机应变。除了根据自己抽的新卡做调整,更会根据对手的情况而变化。毕竟,要想胜利,不在于你是否完美的执行了计划,取得了高分,而是在最后一轮超过了对手(提前冲线)。在这种思路下,最后一轮的行动选择往往是决胜一手。怎样让自己的利益和对手潜在的利益差最大。因为随机性的存在,这反映为估算哪个选择让自己击败对手的概率更大。在胜券在握时,减少黑天鹅事件事件(对手低概率摸到扭转胜负的牌并有机会打出来);在形势不利时,去博一个翻盘的可能性;在机会对等时,精算哪怕是一张手牌数量的差异……


银河竞逐很早就有人为它制作 AI 。这是个开源项目,以人工智能网络驱动的 AI 。代码其实挺好读的,因为它几乎不包含任何人为输入的策略,就存粹是以训练出来的网络指导 AI 做决策。所有 AI 的策略都是涌现出来的。但在我随意的浏览代码后,我感觉其实它还有许多的改进空间。比如,这段开源代码看起来只考虑了当前盘面的自己和对手的桌面,自己的手牌,以此来训练和推理做为行动判断。但以我的游戏经验来看,其实是不够的。因为我在玩游戏时,还要根据过往局面,推算抽牌堆可能有哪些牌,不可能有哪些牌,来做决策参考。我相信有丰富经验的玩家都会考虑这些。不过,这个 AI 的原作者 Keldon Jones 后来参加了官方授权的电子版制作。我相信他其后做了进一步的改进(包括我提到的这一点)。这里有一篇文章 介绍了后面这个版本的 AI 的思路。其中在神经网络的 input 里,专门列出了 Cards in deck, hand, discard 。

但另一方面,我感觉即使是新的版本也没有做到的,就是根据对手调整策略。因为这和围棋不一样,是一个有大量不公开信息的游戏。猜测对手的行动非常重要。如果非常了解对手,更容易找到对手的模式,猜中对手的行动更准确。而正确的预测在实战中的确可以大大提高胜率。对手会做什么,并不总能从历史中学习。如果要以此为网络的输入,我认为需要一定程度的加入当前局的历史,而不只有当前的局面。在文章中也提到,他们分叉了许多个模型,分别针对双人、多人、不同的扩展包规则。因为这样比把规则集作为参数输入同一个模型效率更高。在决策时,也不完全是一股脑把游戏的状态输入,而是把判断局面和猜测对手行动分为了两个独立部分,再用传统的搜索法整合起来:根据对手行动的不同预测结果和概率,参考局面胜率的判定,搜索最优策略。

我感觉还能细化更多:根据初始星球分开不同的开局策略、中盘和终局也可以分成不同的决策网络、甚至给对手的模式进行分类(保守还是激进)。尤其是对终局的处理,以我有限的游戏经验判断,最后是需要精算的,这有点类似围棋的收官,但又不完全相同。固然一个超大的统一模型或许可以涌现出人类需要在不同阶段分而治之的策略模式。但这同时也是个成本问题。从开源代码看,它也对最后一轮前的桌面状态做了一点区别对待(比如不再关心手牌保留了什么)。

无论如何,这是个高质量 AI 。我和 AI 对战也能获得不少乐趣。无法碾压 AI ,当然 AI 更无法碾压我。它能极大的帮助新手学习游戏,充当一个优秀的陪练。

不过,我感觉和人玩(哪怕是和线上完全不认识的人玩)还是更有趣一些。

用地标改进 A star 寻路的启发函数

2026-08-09 09:17:32

今天读到 redblobgames 写的关于如何改进寻路算法中启发式函数的文章 ,感觉很棒。我们可以用很简单的方法改进 A star 算法中的传统计算欧氏距离的方式实现启发函数的方法。

这意味着,可以直接利用之前写好的寻路模块 改变一下启发函数,就可以大幅提升性能。

A star 寻路算法,本质上是对 Dijkstra 算法的一种改进:即从一个端点扩展节点时不盲目的向外扩展,而是利用一个启发函数优先尝试最可能在最短路径上的邻接节点。启发函数设计的越好,每一步的估计都和正确路径一致,那么就越快。依靠启发函数的结果就能避开所有不必要的节点。

但是,启发函数的复杂度不能太高,最好是 O(1) 的。因为每一步都要调用一次,时间复杂度乘在整个运算过程中。这使得启发函数不能去探测远方的状态。通常我们用当前位置到目标点的直线距离作为启发值,这个值一定小于实际路径距离,这样才能保证按启发值得到的路径一定不会比真实路径更糟糕。但在有墙和复杂迷宫的地图中,它几乎难以起到正确的引导作用。

例如,当起点在一个房间中,目标点在东边,而房间的门在西边。采用这种启发函数,算法一定会向东尝试完几乎所有路径后,才会从西边的门出去。毕竟启发函数感知不到门的位置,房间内部的东侧距离目标点的直线距离一定更近。如果房间是密闭的那就更糟了,算法会尝试完房间内的每个位置才会停下来。


有没有什么简单的方法可以改进启发函数,让它可以识别出墙,却不增加时间复杂度呢?最简单的方法是用一个地标。

在现实里,如果一个人要从北京出发去广州某地,他肯定不会从出发点地开始用 A 星算法寻路。而是先去到广州再说,北京到广州的路径是事前就已知的。到了广州再找怎么去特定地点。广州作为一个区域比较抽象,但我们可以预算计算出到广州某距离地点(例如广州塔)的路线图。对于固定目的地,可以用 Dijkstra 算法计算出到地图每个点的最短路径图( 流图 ),全部缓存下来。这样从任意点都可以用 O(1) 查询到如何去广州塔的当前移动方向。

当目的地离地标很近且当前位置离目的地很远时(从北京出发,还没进广州),按着去地标点的预设路径走一段肯定没错。直到离目的地比较近了(已经到了广州),就没必要按预设路径(去广州塔)行进了。

问题在于怎么确定离目标点比较近了?还是计算欧氏距离。

假设当前位置是 S(北京某地) ,目标点为 E (广州某地),地标点为 L (广州塔) 。这三个点可以构成一个三角形。因为三角形的任意两条边之和大于等于第三边,所以有 SE + EL >= SL 。也就是说在估价函数中,我们判断 SE 是不是大于等于 SL - EL ,即北京某地到广州某地的直线距离是不是小于等于出发地到广州塔的已知距离减去广州塔到目的地的已知距离。如果是,说明直线距离太短了,不值得按直线方向行进,应该遵循直接计算好的去广州塔的路径行进。反之,直线路径指向的方向可能是更有效的。

再看前面的房间例子:如果起点和东边的目的地之隔着一堵墙,直线距离为 1 ,但实际路径必须先绕向西侧的墙。而如果我们在目的地附近有一个预设的地标,距离目的地路程为 2,而当前位置到地标点的路程为 10 ;那么显然,从当前位置去目的地的最短路程不可能小于 10 - 2 = 8 。因为假设目的地就在去地标点的路径上,那么我们向地标行进,在剩下路程还有 2 的时候,就能抵达终点。这已经是最短路径,如果目的地偏离了这条路径,路程只能更远。

用地标的预设路程,可以更容易的排除目的地不可达的情况:如果我们可以去到地标,而地标到目的地不可达,那么目的地就不可达;同样,如果地标到目的地可达,而我们无法去到地标,目的地也不可达。如果目的地和当前位置都可以抵达地标,路径一定是存在的。只有当前位置和目的地都无法通向地标试,可达性才是未知的。


所以,我们在估价函数中,只要利用预算计算好的地标流图,就可以 O(1) 计算出是否可以复用到地标的流图给出预设方向,或是退化成传统以直线方向给出的估价值。

我们还可以多计算几个地标,比较它们哪个更有效:SL - EL 中较小的那个,决定采用到哪个地标的预设路径。地标可以是提前计算的,也可以是在多次寻路中生成的。可以想象成,如果我们没有去过广州,那么就先以一个离广州比较近的去过的地标,比如深圳为地标导引路径,一旦抵达目的地,就把新的这个目的地广州为地标记录下来,方便后续的寻路。