展示HN:使用纸和笔开发的资源发展游戏,拥有自生世界
我选择了拉丁文中的名字Sortis,因为在游戏中你并不是每回合都玩,而是跳过并计算你想要对正在发生的事情进行真实改变的时刻。这是一种让计算机的机制在每回合增加1个小麦,而不需要你手动增加1个小麦的方式。字面意思是“来自命运的/来自预言者的”。它的词源可以追溯到一系列、链条或行;这对这个游戏同样相关。我希望这个词能够意味着计算上可化简的,闭合形式的概括。我最近正在开发的一个游戏是在纸上玩的,但有着类似Minecraft的程序生成游戏的自生性,而不需要强迫玩家进行通常需要的计算。我希望这个游戏能够带来进展、自动化和发现的感觉,而只需要纸和笔。我还希望它能够让我参与,而不会让我的大脑变得僵化,能够在我非常疲惫的时候也能主动进行。我觉得我达到了我所期望的。如果你接受过计算机科学的训练,你会发现规则简单易记。如果没有,那么诸如XOR和十六进制这样的概念可能需要一些研究。如果你觉得有能力去努力,游戏中的没有一个概念是难以掌握的。这个游戏基于一个网格世界,每个方格自然而然地是水、森林或山。森林可以被清理以建设,还有许多建筑物。游戏的目标是将工作坊提升到可能的最高级别,而你可以使用越来越高级别的矿石。矿石在建立在山方格上的矿井中开采。建造进程受到OGame(一个浏览器战略游戏,所有成本按二的幂增长)的启发,因此公式都是某种形式的\(2^n\)。作为唯一的玩家(游戏是独自在笔记本中进行的),你协调游戏中的每个代理,开始时你有一个。地图是一次游戏过程中地图的页面 - 已经上色。 我发现难以制作的游戏的核心部分是一个有效的程序生成地图,而不需要太多的手动计算,也不需要骰子或计算器。游戏的精神是所有事情都可以仅用纸和笔完成,没有一步比数独复杂。 我偶然发现的适合这个的算法是LFSR随机数生成器,特别是针对一个字节。它写出来看起来复杂,但简化为非常简单的东西。构建地图时,你首先选择两个0-255之间的数字,或0x0-0xFF。一个用于X,另一个用于Y。然后,当你增加X或Y时,这两个数字会使用以下公式逐步递增:$$ ext{step}(s) = ig((s ext{<<} 1)\, ext{&}\ ext{0xFF}\ig) ext{ | } (b_8 ext{ XOR } b_7 ext{ XOR } b_2 ext{ XOR } b_1)$$ 这意味着:给定一个用二进制表示的数字\(s\),取前两个和最后两个数字的异或,将该异或添加到数字的末尾,丢弃第一个数字,使它保持在8位二进制长。(从你喜欢的一端编号位数,只要你保持一致 - 拓扑位置是对称的,所以无关紧要。)这就给你两个数字序列,从你的两个种子开始,一个用于X,一个用于Y。要获取方格\((x,y)\)的值,你从X序列中取第\(x\)个数字,从Y序列中取第\(y\)个数字,并进行异或:$$v(x,y) = ext{LFSR}^{x}(s_x)\text{ XOR } ext{LFSR}^{y}(s_y)$$ 我们最终在网格的每个方格上得到了一个随机数。以下规则将数字转换为地形: 值 地形 \(v < ext{0x75}\) 水 \( ext{0x75} \le v < ext{0xE0}\) 森林 \(v ext{ }\ge ext{0xE0}\) 山 由于我们对两个随机数进行异或,因此存在并列的相关性,这导致水聚集成湖泊,山脉形成。对于地图构建规则,这正是我想要的。此外,鉴于截止值,你只需计算方格数字的前半字节(只要不是0)就能知道该方格是什么。这在我游戏时加快了地图生成。关于山还有一个进一步的细节,当我解释机制时其重要性将会清晰。方格值的尾随零数量是该方格的矿石级别。因此,具有奇数个尾随零的山是矿石(0)或石头。像E2、F2或FA这样的数字有1个尾随零,因此其矿石是矿石(1)。你可能会注意到地图上最高可能的矿石是矿石(5),在E0。这类似于比特币算法如何随着开采者的增加而变得更加困难,并且具有良好的属性:按平均计算,矿石(n+1)是矿石(n)的两倍稀有。探索地图只花费你进行异或计算和扩展一个序列所用的时间。有趣的是,你选择的种子并不会改变你玩的世界 - 只有一个世界,256×256大小。种子做的是随机地将你放置在世界上。
本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。
☕请我喝杯咖啡