在Android文本游戏中保存技术

时间:2017-04-11 09:31:05

标签: java android save sharedpreferences game-physics

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

我想做一个生存游戏。

因此,我将使用此角色类将此游戏制作为Character类。

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

数据。

我想我可以用fileIO保存我的数据来制作一个txt

来解决这个问题

文件。

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

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

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

那么如何解决这个问题?

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

我用Google搜索并发现了两种保存方式。

  1. 共享偏好
  2. SQLite的
  3. 保存文本文件
  4. 哪种方式更好?

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

    请回答这个问题!

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

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

4 个答案:

答案 0 :(得分:0)

有几个选项:

  1. 使用SQLCipher实现数据库并对其进行保护。我之前从未尝试过,但你可以使用this
  2. 来试一试
  3. 使用安全的SharedPreference而不是android-stock SharedPreferences。您可以找到安全SharedPreferences here的使用方法。如下所示:
  4. 这是保存正常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>
    

答案 1 :(得分:0)

如何对数据进行编码以使其无法读取?

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

100 50 78 89 6

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

并且您担心用户可能能够确定哪个值对应于哪个字段并编辑该文件以作弊。我是对的吗?

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

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

答案 2 :(得分:0)

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

使用API​​ - 如果您不想仅依赖于设备,并且如果用户切换其手机,那么他的游戏状态是从上一个状态同步,那么您必须在服务器上创建数据库,{ {1}}或MySql并在Android中创建并使用Oracle

答案 3 :(得分:0)

1.如果您在卸载应用程序后需要用户的数据并再次安装,那么您应该使用文本文件选项,您可以使用点(.fileName)隐藏文件,它将被隐藏。 2.另外,如果要存储大数据,则使用sqlite并使用表来存储数据 3.仅用于存储小数据使用sharedpreference并在应用程序标记

中的manifest中声明allowBackup = true