那么,游戏中如何进行随机生成呢?海外开发者John Harris分析了三种比较经典的做法。以下为GameLook整理的详细内容:
您对游戏中的随机生成投入了多少心思?如果没有,那么我建议您花点时间思考一下它是什么以及可能会出现什么问题。
有些人认为游戏中不应该添加随机性,或者像掷骰子这样的游戏玩法应该是“边缘角色”。向玩家展示所有信息。如果攻击有效,那么结果应该是清楚的,排除了不确定性。在动作游戏中,如果你用枪指着玩家并扣动扳机,如果目标是真实的,那么它肯定会击中,并且不应受到漂移或描述值的干扰。
还有一些人非常担心人们误解90% 的命中率意味着他们掷骰子的方式混淆了数学,所以实际上应该是98% 的命中率。
真正随机的电脑游戏屈指可数,而在我们生活的宏观现实世界中,随机性实际上很少见。当我们掷骰子时,决定数字的主要因素是我们掷骰子的力度,用随机性来解释它实在是出于无知。我们不知道骰子在空中运行时运动矢量的结果,也不知道它撞到桌子时会如何反应,如何滚动和停止。
您可以在量子级别获得真正的随机性,但这通常超出了传统电子技术的范围。这个问题非常重要。有些Unix系统实际上是通过玩家精确的实际输入和其他资源形成一个无序的状态池,并作为操作系统级别的服务来响应使用请求。这些请求非常重要,可以用来阻止和暂停请求过程,直到获得足够的值。这种方法常用于加密。
不太重要的请求通常以其他方式提出。大多数时候,我们在游戏中需要做的就是伪随机数生成器。它们很容易理解,在大多数编译器的标准库中提供,如果需要,您可以自己制作。
《最终幻想1》:从预先生成的数字中顺序读取
最初的《最终幻想》以及一系列Square Famicom游戏是由传奇的8位程序员Nasir Gebelli编写的,他在Apple II计算机时代就已经非常有名了。 Apple II和Famicom都使用6502微处理器,因此Gebelli在编写这款游戏时已经掌握了很多技巧。
大多数生成的随机遭遇是通过向上或向下行走来确定的,由ROM 中存储的256 个预设值随机确定。玩家角色每走一步,参数都会更新,每个参数对应一个阈值。如果该参数低于阈值,则会触发遭遇。
然而,这并不是《最终幻想》 原版游戏中唯一的随机数生成器。在战斗中,当涉及到掷骰子时,使用类似的系统,具有256个完全不同的值,并且按顺序读取它们。与遭遇生成器的参数不同,该生成器存储在电池供电的RAM 中。换句话说,如果你在特定区域加载保存后遇到一场战斗,重新加载游戏,你就可以在同一区域再次遇到它,而且会是相同的敌人,相同的难度。
有趣的是,虽然战斗状态随机发生器存储在RAM 中,但它并不直接与玩家的保存文件关联。一旦战斗开始,战斗引擎就会做一件非常聪明的事情。游戏每两帧调用一个数字函数,但不使用结果,因此很难预测。
在RPG游戏中,这一点尤为重要。你需要确保玩家无法掌握随机数生成的规则,以确保战斗系统不会白费。如果提前知道某个区域有自己不喜欢的遭遇,那么玩家就会主动去另一个遭遇区域,甚至利用这个漏洞区域去购买物品,寻找自己想要的道具。对战斗最有利。
避免这种情况的唯一方法就是通过编程获取一些外部值和外部无序资源来生成多种运行状态。在Commodore 64上,声卡芯片和噪声振荡器的输出虽然并不完美,但总体上提供了足够好的shuffle资源。有时,在NES 和SNES 上,游戏可以为部分或全部帧调用随机数生成器。由于玩家输入的反馈发生在不同的帧,随着玩家的行为向系统提供了大量无序的资源,游戏运行结果就会出现越来越大的差异。
具有实时时钟的系统将使用它来初始化伪随机生成器,但是玩家通常可以设置时钟,因此这也是一个漏洞。最好始终有一个好的分辨率。我们所说的时间单位是毫秒。如果通过这么小的单位来取阈值,就能得到一个玩家很难有效控制的数值。
让我们回到《最终幻想》。对于大多数休闲玩家来说很难找到随机生成器的漏洞。但是,如果玩家出于某种原因想要避免或触发特别困难的遭遇怎么办?
游戏中的一个房间里,有一个名为Warmech 的伪Boss。当他出现在一个房间时,遇到的概率很高,但它是遇到的第8组敌人之一,而且只有三个值可以触发,也就是说,你会遇到它256场战斗中出现过3次。如果你知道战斗发生器的状态,你可以故意触发遭遇,使其必须发生。
《超级马力欧64》:线性同余发生器
一种非常流行的伪随机数生成器称为线性同余生成器(LCRNG),可以在不产生破坏游戏效果的情况下对其进行操作。如果想了解它的详细解释,读者可以去维基百科上查一下。
LCRNG 的好处是它不计算顺序遭遇,它的值会跳跃,但它同时涵盖所有步骤。
你从子值开始,经过基本操作产生结果值,结果值返回调用者并再次产生值,最终得到每个子值产生的一系列值,最终形成一个循环。随机数生成器需要避免这种情况,但这也是LCRNG 的优点:除非字段耗尽,否则它永远不会重复。
《超级马力欧64》使用了这样的随机发生器。在YouTube 上制作挑战视频的Pannenkoek 也发布了相关视频。一个问题是它的算法会在65114 个值之后循环,因为它的生成器只有这么多可能的结果,所以如果玩家操作超出这个值范围,他们将无法获得相应的随机数。
《口袋妖怪绿宝石》:不良种子行为
控制《最终幻想》之间的随机数生成器可以确定敌人出现的时机和具体类型,但这需要玩家投入大量的时间去尝试。单个生成器《马力欧64》可以影响金币复活和敌人行为,但这不会对游戏产生巨大影响。《口袋妖怪》 更频繁地使用随机数生成器。
当神奇宝贝产生时,所产生的值可能会存在很长一段时间。其中一些数字对于玩家来说是神秘且看不见的,但它们具有长期影响。控制这些值会给游戏带来严重破坏,而且由于玩家可以互相交易,最终伤害的不仅仅是游戏本身。
由于生成器在《口袋妖怪》 系列中非常重要,因此许多现代续集都使用特别强大的伪随机算法,例如Mersenne Twister 算法。由于该系列的受欢迎,玩家探索了许多破解系统的方法。
这些作弊的目标之一是获得外观更好的神奇宝贝,这些神奇宝贝不会带来战斗优势,但非常罕见。在《红宝石》、《钻石》和《翡翠》系列中,随机数生成器每帧都会发生变化,在战斗中变化的频率是其两倍,更不用说无处不在的随机性了。然而,Smogon 网站专门用一个页面来研究如何控制游戏的生成器,因为它有一个不寻常的缺陷:启动时,Emerald 不会将内部时钟应用于生成器,而是将其重置。设置为0,其他两个游戏只有在断电后才会这样做。
由于游戏的生成器根据计划处理种子值,因此有特定数量的帧来确定是否生成特殊的神奇宝贝。了解这些帧率并不能保证你会得到好看的神奇宝贝,但至少概率会大大提高。
需要注意的是,游戏的生成器使用玩家ID 和秘密ID,这些ID 隐藏在存储文件中,无法轻易更改。因此,在一个保存文件中很容易捕获的神奇宝贝可能会更改为另一个保存文件。需要等待很长时间。
用户评论
对!很多经典游戏就是因为可以重复玩,才这么耐玩!突然发现不少老游戏的核心设计都是利用随机性的,这下明白了,这才是让玩家愿意肝的秘诀吗?
有7位网友表示赞同!
我个人觉得经典游戏虽然好玩,但有时候流程固定下来就会显得单调。用随机生成来打破局面的做法确实很妙,很多小细节都被我忽略了,看来要回头再体验一遍那些老游戏啦!
有17位网友表示赞同!
讲得真好啊!这篇文章让我重新认识到了经典游戏的魅力所在。从小玩各种游戏长大,一直没想明白为什么有些游戏能让人沉迷很久,原来是他们巧妙地利用随机生成来保持可重复性啊!
有18位网友表示赞同!
我倒是觉得有些游戏中过度依赖随机生成的元素,反而让人体验感下降了。比如战斗结果完全看随机,玩家的策略和技巧在它面前毫无作用,这让我感觉游戏缺乏真实的游戏体验;
有17位网友表示赞同!
经典游戏的可重复性非常重要,我同意作者的说法。毕竟谁都不想每次都玩着相同的套路吧? 巧妙的随机生成机制能够给玩家带来新的惊喜和挑战!
有13位网友表示赞同!
总觉得很多游戏现在过度追求科技感和复杂的故事剧情,却忽略了最基本的乐趣,就是可重复体验带来的新鲜感。看了这篇文章,我觉得那些经典老游戏的玩法还是值得我们学习。
有18位网友表示赞同!
我曾经就喜欢玩那些随机要素比较多得游戏,每次都能有不一样的挑战和结果!这种充满偶然性的玩法确实让人欲罢不能啊,看来我天生是偏好新奇不按套路出牌的游戏玩家吧?
有12位网友表示赞同!
我是觉得有些随机生成的元素设计是很有趣的,比如地图生成、任务变化等等,这些都能让玩家保持新鲜感。但如果太过于依赖随机,可能就让人感到非常失控了,难以体验到游戏的乐趣。
有5位网友表示赞同!
这篇文章说得真好,游戏设计师要明白如何巧妙地运用随机生成吧!不能过分依靠它,毕竟玩家还是要追求一些策略、技巧和成就感的!
有13位网友表示赞同!
我发现很多现代游戏反而没那么耐玩了,因为流程都是固定的,没有太多的惊喜。经典老游戏的魅力 justement就在于它的可重复性,玩家可以选择不同的路线、策略来体验不同的剧情,这就是它能够经久不衰的原因吧?
有11位网友表示赞同!
我也觉得有些时候过度依赖随机生成也会让人失望的。比如我之前玩过一款卡牌游戏,所有的战斗结果完全看运气,没有战术的空间,这就让人感觉非常无趣了。
有19位网友表示赞同!
的确,很多经典游戏都设计得非常巧妙,利用随机性来改变玩家的游戏体验,让每个 playthrough 都变得新颖独特。
有16位网友表示赞同!
看来我以后玩游戏要多留意一些细节,看看它们是怎么利用随机生成来增强可重复性的呢?也许这篇文章给我开了一个新的思路!
有14位网友表示赞同!
其实很多时候我认为随机生成的元素并不一定能够提升游戏的质量,如果它只是为了单纯地增加难度或者让玩家感觉“新鲜”,那么这样的设计就显得较为肤浅了。游戏应该是一次完整的体验,而不是一场不断变动的猜谜游戏。
有13位网友表示赞同!
这篇文章很有启发性,让我意识到随机元素在游戏设计中确实扮演着重要的角色。有些游戏巧妙地运用随机生成来增强可重复性和玩家互动性,而有些则过于依赖随机元素导致游戏的平衡被破坏,这一点需要设计师们认真考虑和把握。
有8位网友表示赞同!
看来玩经典游戏不仅仅是享受故事情节,更重要的是去探索其中的细节设计和机制,比如那些巧妙的随机生成!
有10位网友表示赞同!