java - 如何防止玩家在Java中编辑stat文件

标签 java

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

是否有更安全、更可靠的方法来执行此操作,如果有人可以将教程链接到它?

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

最佳答案

首先,一些一般性建议:如果您的所有内容都位于客户端,则您无法采取任何措施来保护它们。你只能增加别人解密它所需的时间。因此,如果您真的担心玩家操纵他们的保存游戏,则必须将您的游戏转变为始终在线的云存储解决方案(这有其自身的问题,而不仅仅是技术问题)。

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

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

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

以下是一些如何让篡改变得更加困难的技巧:

  • 在保存游戏时使用校验和
  • 使用代码中存储的 key 对其进行加密,或者(很脆弱!)使用游戏中某些文件的 SHA1 作为加密 key
  • 保留“有效”状态列表并检测不可能的情况,例如具有 9000 生命值的 3 级角色或故事中未完成第 2 章的 20 级角色,或在云堡地牢外挥舞末日污染之刃的角色
  • 检测到保存游戏被操纵,但让玩家继续,只是让他们知道不会为该保存游戏的问题提供技术支持。

关于java - 如何防止玩家在Java中编辑stat文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15859335/

相关文章:

Project Euler Q20 的 Java 算法

java - 接口(interface)和实现签名不匹配

java - 说明资源路径位置类型缺少包括 : test. xsl

java - Android:简单的 Listview 不使用 startActivityForResult() 显示数组中的字符串

java - 扫描仪在使用 next() 或 nextFoo() 后跳过 nextLine()?

java - Play框架和图像缓存

java - Nexus 5 Camera.Face 对象为空?

java - 取前如何查看BlockingQueue头元素?

java - 在数组中存储数据 (Java)

java - 缩短 switch block 内 case 语句中的代码行