【问题标题】:Saving techniques at android text game安卓文字游戏的保存技巧
【发布时间】:2017-04-11 09:31:05
【问题描述】:

大家好,我正在为我的 Android 编程课程制作文字游戏。

我想做一个生存游戏。

所以我会把这个游戏做成 Character 类,用这个角色类。

这是生存游戏,所以如果玩家按下第二天按钮,我想保存

数据。

我想我可以通过使用 fileIO 保存我的数据来制作一个 txt 来解决这个问题

文件。

然后当应用程序启动时,我读取这个txt文件来加载播放器的数据。

但是我觉得这个案子有问题。

我认为用户可以手动修改这些数据。但我不想要这种情况。

那么我该如何解决这个问题呢?

另外,我还没有这样做。我需要改变保存游戏数据的方式吗?

我用谷歌搜索并找到了 2 种保存方法。

  1. 共享偏好
  2. Sqlite
  3. 保存文本文件

什么方法比较好?

如果我可以用txt文件保存,请告诉我如何保护数据不被手动修改。

请回答这个问题!

================================================ ======================

很抱歉不能用流利的英语..因为我不是母语人士。

【问题讨论】:

    标签: java android save sharedpreferences game-physics


    【解决方案1】:

    这样做的几个选项:

    1. 实现一个数据库并使用 SQLCipher 保护它。我以前从未尝试过,但您可以使用this 试一试
    2. 使用安全的 SharedPreference 而不是 android-stock SharedPreferences。您可以找到安全 SharedPreferences here 的用法。如示例所示:

    这就是普通 SharedPreferences 的保存方式

    <map>
         <int name="timeout" value="500" />
         <boolean name="is_logged_in" value="true" />
    </map>
    

    这就是 SharedPreferecens 的安全保存方式:

    <map>
        <string name="TuwbBU0IrAyL9znGBJ87uEi7pW0FwYwX8SZiiKnD2VZ7">
            pD2UhS2K2MNjWm8KzpFrag==:MWm7NgaEhvaxAvA9wASUl0HUHCVBWkn3c2T1WoSAE/g=rroijgeWEGRDFSS/hg
        </string>
        <string name="8lqCQqn73Uo84Rj">k73tlfVNYsPshll19ztma7U">
            pD2UhS2K2MNjWm8KzpFrag==:MWm7NgaEhvaxAvA9wASUl0HUHCVBWkn3c2T1WoSAE/g=:jWm8KzUl0HUHCVBWkn3c2T1WoSAE/g=
        </string>
    </map>
    

    【讨论】:

    • 你可以看看我编辑的例子。据称它不是防弹的,但它已经很难解码字符串。 @InhoLee
    【解决方案2】:

    使用 SQlite - 如果您的游戏依赖于设备,那么您可以创建 SQlite DataBase,这是处理游戏数据和用户信息以及游戏状态的最佳方法。

    使用 API - 如果你不想只依赖于设备,并且如果用户切换手机,那么他的游戏状态是从上一个状态同步的,那么你必须在服务器上创建数据库,@ 987654323@ 或 Oracle 并在 Android 中创建和使用 APIS

    【讨论】:

      【解决方案3】:

      1.如果您在卸载应用程序并再次安装后需要用户的数据,那么您应该使用文本文件选项,您可以使用点(.fileName)隐藏文件,它将被隐藏。 2.否则,如果要存储大数据,则使用sqlite并使用表来存储数据 3.为了存储小数据,使用sharedpreference并在应用标签的manifest中声明allowBackup =true

      【讨论】:

        【解决方案4】:

        如何对数据进行编码以使其不可读?

        我猜你目前只有文件流将玩家的数据(健康、饥饿或其他)直接写入文件。该文件可能如下所示:

        100 50 78 89 6
        

        然后你读回每个数字并将它们分配给Character 对象。

        并且您担心用户可能能够计算出哪个值对应于哪个字段并编辑文件以作弊。我说的对吗?

        您可以尝试使用ObjectOutputStreamObjectInputStreamCharacter 对象序列化为二进制。当对象是二进制时,用户将无法读取它。另外,将文件扩展名更改为.dat 或类似的名称。

        另一种使其不可读的方法是对其进行 base64 编码。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-10-16
          • 2016-01-16
          • 2016-11-06
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多