1

我正在创建一个游戏,我在其中使用文件来记录玩家统计数据(速度、级别等),这样您就可以在退出游戏后继续使用您的角色。我的问题是在我的测试版本中,我使用基本的 Java Filewriter 来保存/读取统计文件,但有人可以用记事本打开它并更改统计信息(我不想要)。

有没有更安全的方法来做到这一点,如果有人可以将教程链接到它?

我听说使用 XML 可能会有所帮助,但我不知道从哪里开始。

4

1 回答 1

1

首先,一些一般性的建议:如果你所有的东西都在客户端,你就无法保护它。您只能增加某人解密它所需的时间。因此,如果您真的担心玩家操纵他们的存档游戏,您必须将您的游戏变成一个始终在线的云存储解决方案(这有其自身的问题,而不仅仅是技术问题)。

其次,如果您的游戏不在线,您为什么要阻止玩家编辑他们的存档游戏?很多游戏玩家(包括我)喜欢一些好的故事讲述但不一定是所有游戏,而且不止一次我达到了我不再喜欢玩游戏但想知道故事和角色如何发展的地步,或者我只是想尝试一下。如果没有存档编辑器,我会完全脱离游戏,但是由于作弊,我度过了愉快的时光,看到了其余部分的展开(以及单枪匹马击杀某些顽固的敌人的罪恶感)。如果玩家想在单人游戏中作弊,为什么不呢?这是他们的经验,可以让他们保持参与。

防止作弊的两个原因是支持和竞争场景。如果单枪匹马阻止了一个本应以 50% 生命值运行的事件,并且如果我随后抱怨我的游戏处于无法获胜的状态,那么您需要额外的工作来确定保存游戏被操纵并且它不是你身边的虫子。在竞争方面,如果你有成就或排行榜,作弊者是个问题。

但话又说回来,你不能在客户端上 100% 的游戏中拥有竞争元素,因为你无法做任何事情来防止篡改。

以下是一些如何使篡改更加困难的提示:

  • 在存档游戏上使用校验和
  • 使用存储在代码中的密钥对其进行加密,或者(很脆弱!)使用游戏中某些文件的 SHA1 作为加密密钥
  • 保留“有效”状态列表并检测不可能的情况,例如具有 9000 生命值的 3 级角色或未超过故事中第 2 章的 20 级角色,或在云城地牢
  • 检测到存档游戏被操纵但让玩家继续,只是让他们知道不会为该存档游戏的问题提供技术支持。
于 2013-04-08T16:28:17.687 回答