我如何为单人游戏(如较旧的主机游戏中使用的系统)建立密码系统?
例如,Mega Man X通过为您提供一系列数字来保存工作,您可以在以后输入这些数字以加载您的保存文件。
我如何为单人游戏(如较旧的主机游戏中使用的系统)建立密码系统?
例如,Mega Man X通过为您提供一系列数字来保存工作,您可以在以后输入这些数字以加载您的保存文件。
Answers:
首先,分解游戏状态(或更确切地说,是要保存的状态的各个方面)。在《洛克人》风格的游戏中,您可能会跟踪您杀死了哪些终端老板,是否拥有类似能量罐的道具数量,等等。
将所有数据打包到一个位字段中,即为每个值分配适当数量的位:
我们的示例总共有8位,这意味着一个字符可以代表一个密码。实际上,您的游戏可能具有更多状态,因此需要更多的总位数,从而需要更多的角色。如此处和该问题其他地方的注释中所指出的,此方法适用于“复古”游戏或捕获的游戏状态大小合理的其他游戏。超过某个点,您可能会发现对状态进行编码所需的密码复杂度太大。
为了减少偶然观察发现破解密码的可能性,您可以变换位的布局,以便引入虚拟位(对游戏状态没有影响,但是当您将所有位解释为字符时会使密码看起来不同)或运行它通过一些可逆的类似于哈希的操作来对位进行加扰,以使所有“ killed X框”位都不紧挨着,使相应的顺序状态密码看起来非常不同,或引入校验和值。
如果您四处浏览,那里有一些流行的带有密码的游戏所使用的系统上的信息很多:
您可以阅读这些内容以获取更多启发。
这些游戏确实只能保存我相信的状态。密码仅引用要加载的级别。只需使用字典即可。
如果它有点复杂,例如拥有某种武器或助推器,则可以将状态加密为较短(但足够长)的哈希码。
但我强烈建议您不要使用此功能。密码会在Internet上迅速传播,很快每个人都会赢得您的比赛。
尽管像乔什·佩特里(Josh Petrie)的角色到状态系统这样的解决方案具有好处(较小的存储空间,可在游戏的所有副本上使用),但它们将游戏的设计和状态系统与密码系统本质上结合在一起。对密码,状态或设计的任何更改都会破坏整个系统。
一个简单得多的解决方案是按常规构建您的保存系统,并在顶部简单地添加一个密码系统。这可以像在保存中保存密码(可能是文件名加倍)并在加载时对其进行验证一样简单,也可以像使用周围的许多加密库之一一样复杂(这很简单)。
这个答案似乎有些混乱。
1)操作员只是要求输入密码,让他们加载保存...不需要密码作为保存。
2)当今许多游戏都有大量的保存存储需求,我们刚刚在内部构建了一个快速保存/加载系统,该系统可以生成10MB文件...用于问答游戏! 乔什·佩特里(Josh Petrie)的保存系统(虽然有效)非常有限-一旦存储系统变得不平凡,那么密码就必须具有巨大的长度才能保存所有相关数据。
例如,如果有30个老板,会发生什么?20项成就?我们是成就的一半吗?他在什么级别?我们会为健康,生命,硬币,xp留出几位数?如果快照不是处于级别之间的状态...而是处于级别的一半时该怎么办-玩家,敌人,弹丸,破坏/改变的地形的位置突然加起来需要存储很多状态。
从角度来看,假设一个30个字符的字母和一个10个字母的密码,我们大约可以存储50位信息。看到游戏/引擎最多使用320位来存储单个对象的位置,旋转和缩放的情况并不少见。当然,您可以做各种各样的优化技巧,用更少的钱做更多的事情……但是最终,您会浪费时间使游戏变得有趣,这是您可以做出的最糟糕的优化之一。