GeezerVisonThe World Wide Web, restored to 800 pixels of glory. |
| Home|About|Gaming cabinet|Archives|How it works|Starter sites |
GeezerVison is showing blog.codingnow.com — 云风的 BLOG 云风的 BLOG思绪来得快去得也快,偶尔会在这里停留November 09, 2026复活 ABC 输入法最近有网友用 AI 逆向了智能 ABC ,把里面的笔划码表导了出来,用 RIME 复刻了一版。 众所周知,我是 ABC 的忠实用户。从 DOS 版天汇 ABC 用到 Windows 上智能 ABC 彻底退役,一直念念不忘。在 10 年前我曾经动过念头自己写一个,后来被 IME 开发的繁杂劝退了。当时用 C 从头写了一个简单的 IME 框架,又给网上不少开源的 IME 框架提过 PR ,最终没坚持下来。有朋友提醒我说 RIME 经过过年的发展已经可以高度定制了,我一直没在意,直到这次、我才正正经经的研究了它。 试用了上面那个智能 ABC 复刻版,和我记忆中的手感还是有不少差距。原本我想先在这个基础上改改的,随之发现改不太动 AI 生成的代码。细想了一下,在 RIME 基础上做开发工作量并不大。而关键的码表已经是现成的了,就自己动手玩了一下,果真一天时间就搭了个雏形。最花时间的倒不是实现,而是搞明白 RIME 的逻辑。这部分值得记录下来。 October 20, 2026QWERTY 键盘布局的发展历史在我最初学习键盘打字时,曾今为看似随机的键盘字母排列困惑不已。当时为找到一个字母就需要看半天键盘,我觉得键盘按字母表次序排列不好吗?当时流行的解释是:机械键盘在输入时,一些常用的字母组合的连杆,在快速连续击打时容易卡在一起。所以,现在的 QWERTY 排列“旨在降低打字速度”。这个说法至今广为流传,而我最近读了一篇 Koichi Yasuoka 和 Motoko Yasuoka 写的论文《 On the Prehistory of QWERTY 》,更清晰的描述了 QWERTY 键盘的发展脉络,我觉得可信度更高。 论文分两个部分,第一部分阐述了先进流行的 QWERTY 键盘是怎样演变到今天的布局的,第二部分驳斥了“旨在降低打字速度”的说法。后者源于 1980 年东京大学 Hisao Yamada 教授发表的论文《 A Historical Study of Typewriters and Typing Methods 》。论文中有这么一段话: :
这段话被一些书和论文(例如 Keyboard Entry—Can It Be Simplified? )转述时被错误理解为:
October 11, 2026点老救世记的深度体验我最近重新玩了两百小时的《Dotage 点老救世记》,对这个游戏有了很多新的认识。之前是在今年初玩了一百多小时,对这款一个人花了十年以上时间做的游戏相当佩服。经过近 400 小时的游戏时间,我对这个游戏的理解慢慢发生了变化。有不少游戏设计方面的东西值得研究,但却很难说清楚,需要用文字整理一下。 这是一款关于规划和选择的游戏。它固定了回合数(标准模式下,共 310 回合),所以玩家实际上需要规划整个游戏过程,无法通过控制游戏发展节奏来决定是速通(注:实际上有手段更快结束并赢得游戏)还是慢慢发展。但玩家可以选择怎样规划这个游戏过程:是把发展节奏拉长,平缓延续到游戏结束;还是快速发展到一定阶段,停留在某个规模对抗系统直到终末。这会导致非常不一样的游戏体验,并没有最优通解。 本质上,玩家需要积累健康、希望、温度、自然四个维度的点数,对抗终局的天灾点数:即玩家在终局点积累的对应点数需要和系统设定的点数相当。在整个游戏过程中,还会动态设定若干检查点(事件),在检查点处,玩家积累的点数会重置,根据检查点处点数和系统设定的点数比较,来决定获得增益还是惩罚。 September 18, 2026Caves of Qud 初体验关注 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 也是做个汇总小结。 September 09, 2026暑假的英语补习对云豆来说,这个暑假特别长。 他小学毕业了,6 月中就已放暑假,9 月 1 日方开学进入初中。自然没有学校布置的暑假作业。我不想他整个假期都沉迷在短视频和蛋仔派对中,所以每天给他安排了英语学习。 7 月初,我记录过对孩子之前的英文辅导。先前,我用的《英语在用:剑桥初级英语语法》给他补习基础语法。学习的效果还可以,原本以为可以在暑假过渡到中级本。但读了两天后就发现完全进行不下去。倒不是中级语法难度大了很多,而是他本身的阅读能力跟不上。 阅读不仅仅是 “英文” 语言的问题,换成中文也一样。所以,我换了一套书:《Basic Reading 1200 Key Words》 August 20, 2026银河竞逐的乐趣和策略银河竞逐是我最喜欢的桌游之一。我曾经为它写过两篇 blog :银河竞逐的设计 及 如何教人玩银河竞逐 。 最近我教会了小孩玩这个游戏,我自己也在电脑上玩了 200 多盘。主要是在 BGA 上和人对战,以及在官方授权的电子版 中挑战最高难度的 AI 。和过去喜欢多人混战不同,这段时间我主要玩双人规则。虽然在线下,我玩这个游戏的水平超过一般桌游玩家,但在线上,我只有略高于 40% 的胜率。说明这个游戏的策略还有很高的天花板我没能摸到。和最高难度的 AI 相比,我的胜率超过了 50% 。 这是为数不多有着极深的策略,却又超快节奏的桌游。在 BGA 上默认只给两个选手各 3 分钟的总时间,通常在 5~6 分钟就可以完成一局游戏。应了它名字里的 Race ,玩起来颇有竞速的感觉。我在游戏过程中总是觉得思考时间不够,如果纯凭借经验(感觉)打牌,很容易输掉。特别在最后两个回合,往往需要精算自己和对手的各种可能性,找到取胜的可能。胜负比分通常差距非常小,运气成分虽然存在,但总有希望通过计算挽回。而判断上的一个小的失误却会迅速落下对手一大截。 这个游戏核心目标就是:在触碰结束条件的那一刻,比对手拿到更多的 VP 。新手则往往理解成单一的如何更高效的获取 VP 。这两者是有区别的。因为比拼获取 VP 的效率往往会减少 PvP 游戏的对抗性,变成埋头干自己的事情。初玩 RFTG 的时候,我也一度觉得这是个对抗性不强的游戏。但在实战中却发现,必须时刻关注对手在做什么。首先是通过判断对手的行动,帮助自己更高效的获取 VP ,其次是根据对手的节奏,扭转游戏结束的时间,做到在结束那一刻超过对手的 VP (而不是追求获得更多 VP)。 August 09, 2026用地标改进 A star 寻路的启发函数今天读到 redblobgames 写的关于如何改进寻路算法中启发式函数的文章 ,感觉很棒。我们可以用很简单的方法改进 A star 算法中的传统计算欧氏距离的方式实现启发函数的方法。 这意味着,可以直接利用之前写好的寻路模块 改变一下启发函数,就可以大幅提升性能。 July 24, 2026对抗系统的桌游最近比较难找到人一起开桌游,所以我玩了不少人对抗系统规则的游戏。 桌游中人和人对抗的比较常见,设计一套规则、让玩家在这套规则下博弈;但需要找到(足够水平的)人一起玩。虽然很多桌游也会设计 solo 模式,但大多是设计一个自动机来模拟对手。这会损失相当的博弈性,要么变成了可预测的系统行为,要么沦为半随机事件。而游戏规则的原始设计中通常都会有相当部分依赖人之间的博弈才有趣。例如,我最喜欢的桌游《银河竞逐》在第一个扩展包中就加入了自动机,允许 solo ,但我觉得远没有和人玩有趣。 也有设计得不错的自动机。例如之前介绍过的《Star Trek : Captain's Chair》在玩家社区中就公认单人模式非常有趣,我也只一个人玩过。还有我前段超喜欢的《deep future》也是一个多人对抗游戏,但很多玩家包括我也喜欢一个人玩。我甚至还制作了 solo 模式的电子版本 。 如果一开始就围绕玩家对抗系统规则去设计,去掉人和人之间的博弈,那么游戏会有不太一样的体验。关于这种 PvE 游戏,去年我在整理卡牌构筑类桌游规则时提过不少:Legendary 系列、Aeon's End 系列(以及后续的 Astro Knights )、XenoShyft 、Legacy of Yu、Kingdom Legacy,等等。还有今年我玩过的 voidfall 和 spirit island 。 这类游戏一般除了可以单人游戏外,一般还会设计多人合作模式。刚接触这类合作破解系统的游戏时,许多人会自然有一个疑问:如果几个人可以合作完成游戏,那和我自己一个人操作多个角色有什么区别?这其实是合作类游戏中的经典“指挥官问题”。有一类经验丰富的玩家系统称为 alpha player :指那种控制欲很强,喜欢替合作玩家做决定,主导整个局势。过去很多此类游戏会在机制上加一些限制,最著名的是《瘟疫危机 Pandemic》禁止玩家亮出手牌(但不禁止玩家描述自己的牌),这会加大 Alpha 玩家的决策成本:他无法在制定策略时纵览全局。像 Arkham Horror 卡牌版规则上明确规定不准交流手牌的精确信息。 但近年的合作类游戏,通常会设计多个玩法差异很大的角色。鉴于桌游玩家不会常年玩同一款游戏,熟悉一个角色的玩法就有很大的学习成本了,同时精通合作伙伴的角色玩法就更加困难。同时、规则上还会增加长期运营的复杂度,玩家需要记住更多的信息并作更长远的规划。这些高复杂度导致了 alpha player 难以同时计算所有人的最优解。以我前段玩得最多得 spirit island 为例,单操一个角色就很累了,同时控制两个甚至更多角色过于烧脑,游戏的乐趣都被烧没了。 July 10, 2026高尿酸血症确诊我在 2024 年底左脚大拇指根部曾肿痛一周 ,结合多年体检高尿酸结果,怀疑是痛风。但后来没有什么症状,身体也一直很好,就没去医院看。 最近一年多一直通过跑步降低体重 ,减少了 9~10kg 体重。攀岩保持在一周两到三次。自己在家查血尿酸,一直在 500~600 之间,偶尔在 480 左右。虽然戒掉了含糖饮料,也无饮酒,作息规律,精神放松(不用工作了)。但尿酸一直降不下来。 July 09, 2026小孩的英语辅导今年花了很多时间给云豆补习英语。 他今年小学毕业了,我意识到他在英语学习方面遇到了障碍需要额外介入,是在今年过年期间。云豆在很小的时候,直到三岁还不太会说话。长点的句子都说不下来,但是英文字母认得却很快,似乎对英文有点兴趣,就给他报了个英语兴趣班,一周上两小时的课。但很快就遇到了疫情,几乎都在上无效网课,也就停了。从三年级开始,我督促他在多邻国上每日打卡。有一段时间他特别着迷于在多邻国上冲击钻石等级,每天甚至能刷上近两小时的积分。要说多邻国上学英文到底有没有用,我也说不上来,不过至少能培养一点基本的语感,看见单词即使不认识也能读出来。去查字典时,也不需要反复查看拼写,见过一眼的生词背过去在键盘上能一次输入正确。光这点,比我小时候学英文强。 他在五年级之前,学校英文课的成绩还不错。但考试分数从五年级开始就快速下降(从九十多分下降到八十多分),高年级换了英语老师,家长会上能感觉到新的英语老师把他归为成绩不是很好的学生。我问过他为什么成绩下降,也检查过他每次考试的试卷,他归纳为英语“语法”太难了。我意识到,对他来说,光靠过去的积累的一点语感对继续学习英语是不够的。只有更系统的学习才有效率。况且,多邻国对他已经沦为一个积分游戏,他宁可花很多时间去已经熟悉的章节里刷分,也不愿意增加有效的练习强度。 当然,学习语言最好是有足够量的应用环境。但他不爱阅读(短期也不可能培养出足够的兴趣),也不喜欢看电影/动画片。每每他问起,为什么我们要学习英语,我是这样回答的:学习英语有两个主要的用途;英语是事实上的世界语,这个世界上大多数受过教育的人,或多或少都会说一点英语,我们和世界打交道,就用得上;这个世界上绝大多数知识是用英语记载的,翻译成中文的过程很容易曲解和丢失原本的意思,用英语学习知识很多时候都是必要的,而且效率更高。 June 25, 2026从猎户座之王到群星每个经典电子游戏的游戏设计都多少有一些之前作品的痕迹。我认为原因有二:成功的玩法必须有大量玩家实际游戏体验的打磨证明其有效,在经典玩法上培养出来的玩家习惯可以极大的减少游戏的学习门槛,一个新玩法如果门槛过高就无法吸引足够的玩家去玩,也就得不到打磨。 我一直想搞清楚一款吸引我的游戏的核心规则部分到底是怎么设计出来的。为什么我可以玩成百上千小时还可以发掘出新乐趣,而开发者在看似不算太长的时间就设计出了它们。当我这两年有足够的时间,我开始用一种慢方法弄清楚这点:玩一些更古老的游戏,找到它们和现代游戏之间的发展脉络。 Stellaris 群星是我游戏时间第二长的游戏(第一是 Factorio),我从 1.0 版就开始玩,并从 1.2 版开始维护它的中文翻译 mod ,断断续续玩了接近 900 小时。只是由于时间关系(玩其它游戏)最近两年的新版本还没有体验。 一开始玩这个游戏是因为 Paradox 在战略游戏上名声显赫,当时 P 社四萌众人皆知。我特别喜欢维多利亚 2 ,已在上面花了上百小时。我深知 P 社游戏如果不是一开始就跟着开发玩,游戏系统的复杂度就会像雪崩一样压下来,上手门槛会越来越高。跟住一款新品,乘它还不那么复杂的时候跟着游戏更新一点点学习体验会更好,更别说我对太空科幻题材情有独钟。所以我在 Stellaris 发售前就开始关注开发 log ,第一天就进入了游戏。 由于 P 社已有十字军之王、维多利亚、欧陆风云、钢铁雄心在前,我想当然的认为群星是他们招牌大战略类型游戏的科幻版延续。我在游戏系统里也发现了大量 P 社游戏中熟悉的东西:更加肯定了这个想法。招牌式即时带暂停玩法,靠战争点数和驱动的战争系统,相互堆叠的 Modifiers ,这些都太熟悉了。至于不一样的部分,我觉得是在一个新游戏项目上的创新尝试。虽然我短时间未能体验所有的游戏系统,作为一个新游戏老说还是太庞杂了,但通过翻译游戏文本,我还是深刻感受到这个游戏的设计量。即使去掉在 P 社其它大战略游戏中已有的系统,剩下不一样的“原创”部分还是相当多。而我作为一个萌新进入却能感觉到大多数游戏系统都玩起来那么自然。 June 11, 2026对基本有序的序列排序算法quicksort 是基于比较的排序中表现最好的算法,它在大多数情况下都能接近时间复杂度 O(n log n) ,所以 qsort() 也是 C 标准库中排序的默认实现。但是,quicksort 是非稳定排序,即当原始序列中出现相同的元素时,经过 qsort ,这些相同元素的次序可能被调整。即两个 key 相同的元素,经过排序可能调换次序。 在某些场合,我们希望排序是稳定 stable 的。因为元素的 key 相同,但元素本身可以不相同。这些有着相同 key 的元素一开始以某种次序放入序列,我们不希望对 key 排序后,打乱原有的次序。当需要稳定性时,还有许多经典排序算法可供选择,例如插入排序,它非常简单,每次从无序序列中选择一个元素和有序序列的最后一个元素比较,要么追加在最后,要么向前依次比较,直到找到合适的位置插入。对已经有序的序列,插入排序的时间复杂度为 O(n) ,但对于逆序的序列,它会退化到 O(n^2) ,因为每个元素都要和之前所有元素比较一次,插入到最前。所以插入排序对于非特定场景(无特定规律的数据)的平均时间复杂度接近 O(n^2) 超过快速排序的 O(n log n) 。 但需要注意,光看大 O 时间复杂度是不够的。在 n 很小的时候,对实际开销影响更大的并非算法复杂度。因为复杂度是基于执行算法中每个单步操作的数量估算的,忽略了操作本身的时间差异。而 n 很小时,单个操作的开销占比就变大了。所以在 n 很小时,简单的算法每个操作都更短,对 CPU cache 也更友好,导致实际的总时间开销也越少。大部分排序算法的实现都选择在 n 很小时退化成插入排序。 对无规律数据集,基于比较的排序算法的理论极限是 O (n log n)。因为你需要至少对所有元素做一次比较,采用二分的形式分而治之是最好的方法,不断二分数据集的深度大致为 log n 。归并排序 merge sort 直观的体现了这个想法,它把数据不断对分,展开为一个完全平衡的二叉树,然后从叶节点逐级向根节点调整次序并合并,一路执行到根节点,就可以完成排序。所以它可以严格(即使在最坏情况)做到 O (n log n) 。或者这么看,合并两个有序序列只需要扫描两个序列各一遍,每次都挑出两个序列头部更考前的元素,插入新序列,就能得到合并后的有序序列。假设一共有 128 个元素,不断对分,就能分成 64 组元素每组 2 个。这两个元素调整位置合并成 32 组 4 元组,再继续为 16 组 8 元组,等等。 显然,merge sort 是很容易做到 stable ,但缺点是它难以在原地 in-place 排序,需要额外的空间。这导致实际实现时,需要额外的内存复制。在大多数要求 in-place 排序(大多数 sort api 都是这样)的场合,比 quicksort 要慢,且需要额外的运行空间。 但在真实世界的应用场合,大多数需要排序的数据并非毫无规律。针对有规律的数据排序就可以在工程上针对规律做出改进。一个普遍的规律是:往往需要排序的数据本身就是基本有序的,至少很多片段是局部有序的。因为你很难一次性获得海量的完全随机的数据集。数据都是逐步变多的,如果它们之前的片段是有序的,在整合到一起后,大部分还保持着次序;或者是原有的次序经过少量的调整,破坏了局部的次序。针对这点,就可以对 merge sort 做大幅改进。python 最早的版本直接封装 C 的 qsort() 实现排序,但随着 stable sort 的需求日益增加,在 2002 年 Tim Peters 针对这类情况改进了 merge sort 算法,最终成为 python 排序算法的标准实现。这是一个混合排序算法,一开始并未正式命名,但随着它作为一个比 merge sort 更能适应现实数据集的算法被引入 java 等其它语言的标准库,大家就用第一次工程实现者的名字命名为 timsort 。btw , 它的核心想法并不新,在 Knuth 的计算机算法艺术第三卷的排序算法中就有提到。 May 23, 2026缺氧和异星工厂的比较缺氧(Oxygen Not Included, ONI)和异星工厂(Factorio)都是自动化领域的神作,它们在 Steam 上都有自动化、基地建设、资源管理的标签,可见游戏体验上有相当多的相似之处。玩家群体也高度重合。但是什么造就了它们的独特性?而不会像 Satisfactory 或戴森球计划之于异星工厂那样,有着深深的同类基因。 从游戏核心上看: 缺氧把玩家放在一个有限资源的环境下,一切都是资源转换。玩家玩游戏是一个熵治理过程,把无序变为有序。除了玩家的主动行为,还有丰富的、半随机的、环境自然推演。缺氧的物理系统在很大程度上模拟现实,这减少了玩家的学习成本。但在细节上和现实有所不同:质量和能量都不是守恒的,随着玩家活动,物质会减少,热量可以被主动删除…… 这给了许多玩家对付系统熵增的武器。而一个封闭系统中的热力学熵增,就是玩家需要对抗的系统崩塌。 异星工厂(原版)这提供给玩家一个无限地图。扩张面对的是物流和自动化的指数级复杂度上升。(在原版中)玩家不断追求更大更快的自动化生产线,在这个过程中,需要增进对游戏系统的理解,找到在下一个指数级上的自动化解决方案。玩家很少会面临系统崩溃,虫子的威胁虽然存在,但几乎可以忽略。即使去掉虫灾威胁,游戏也几乎不会损失太多体验。 Misc
SearchArchives
Recent PostsRecent Comments
|
| You are visitor 01402520 — GeezerVison does not store the pages you look up. Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required. |