- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
注意:这是专门针对 android 的,但最佳答案可能不是特定于平台的,因此还有其他标签。
考虑一款类似于愤怒的小鸟的游戏:您有很多关卡。每次您完成一个级别后,就可以玩下一个级别,但之前不能玩。我怎样才能让玩家更难破解我的游戏文件并解锁不应可用的关卡?假设进度数据存储在本地。
我的想法:
在 Android 上,所有应用程序文件都存储在一个文件夹中,用户只有拥有 root 访问权限才能访问该文件夹(默认情况下,他们从不这样做,但只要您稍微谷歌一下,通常很容易获得)。现在,我正在使用看起来像这样的 sqlite 数据库:
LevelId = pk | UnlockStatus = int, 0 = locked, 1 = unlocked, 2 = completed with 1 star, ...
只要用户没有 root 权限或根本不熟悉应用程序文件的存储位置,这就没问题。但是,如果他们有 root,则该文件非常容易编辑。
据我所知,愤怒的小鸟将其级别数据存储在 .lua
文件中,至少根据其名称。我找不到包含关卡信息的文本文件或数据库文件。在文本编辑器中打开此 .lua
只会显示乱码。我还没有尝试过十六进制编辑器。
用sql表很方便。有没有一种简单的方法可以将进度数据存储在 sql 表中,从而使用户更难理解它?理想情况下,实现起来也不应该太费时。作为一款离线游戏,我不太关心玩家是否破解它,所以我正在寻找最好的质量 - 实现时间权衡。然而,理论答案会产生更多的实现时间并获得更高的质量,这一点也值得赞赏。
最佳答案
最好的办法是使用某种加密方式保存数据。在 android 中,SQLite 不提供数据库级别的加密。但是,您可以将表中的值(记录)加密,查询后再解密。
另一种方法是将您的数据作为键/值对保存在内部或外部存储器中的某种文本文件(angrybirds 中的 .lua 示例)中,并对文件内容进行加密。另一方面,在运行时解密它并读取您的键/值对。
太棒了!问题解决了:)
关于android - 我怎样才能让玩家更难破解游戏关卡数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10122309/
我想根据用户在第一个下拉框中选择的值来填充第二个下拉框。这是我到目前为止所做的: 在 PHP 文件中: function displayDropDown() { $table_tester =
我需要你的帮助。 我有一个具有如下架构的数据库: 团队: ID 姓名 fundation_date 匹配: ID 日期 id_local_team(团队的外键) id_visit_team (团队的外
我是一名优秀的程序员,十分优秀!