【问题标题】:How do I make a daily challenge on a game with randomly generated levels?如何在随机生成关卡的游戏中进行每日挑战?
【发布时间】:2014-09-09 04:59:48
【问题描述】:

我目前正在制作一个包含随机关卡的游戏,但我有兴趣让每个人在每日挑战部分都玩相同的关卡,比如 Spelunky。

起初我想让客户根据他们的日期来决定种子,但日期可能会被本地欺骗。

我可以访问 parse.com 免费帐户,因此我可以在云中执行代码并期待返回结果。因此,我考虑根据当前日期向云代码询问哈希值,但这可能会被欺骗以播放不同的级别,同时向服务器发送该级别的分数而不是每日分数。

然后我想在服务器上加密日期并在客户端解密它,但是如果我使用对称加密,这可能会出现问题。那么...也许使用非对称加密?

我在这里错过了一个更简单的解决方案吗?这感觉就像我让自己过于复杂,但我不确定。这类问题有普遍接受的解决方案吗?谷歌搜索了很长一段时间后我没有找到任何东西。

P.S.:我正在使用 unity3d,以防万一。

【问题讨论】:

    标签: encryption unity3d parse-platform anti-cheat


    【解决方案1】:

    而不是按日期确定每日挑战:

    • 使用 mysql 数据库向包含挑战的客户端发送信息
    • 处理挑战客户端
    • 计算服务器端日期和时间
    • 从客户端向服务器发送数据(包含分数和挑战)
    • 检查挑战是否仍在使用服务器端日期和时间
    • 如果挑战仍在进行,请提交分数

    使用此方法的一个可能问题是,由于要下载额外的数据,可能会占用高带宽。

    【讨论】:

      【解决方案2】:

      与其使用不同的加密方法保护数据,不如在玩家完成挑战后验证发送的请求可能更容易。

      • 玩家发送请求以开始新挑战
      • 服务器检查该玩家今天是否已完成挑战,如果请求有效则继续
      • 挑战相关数据在服务器随机生成
      • 上述数据保存在服务器上
      • 将生成的数据发送给客户端
      • 一段时间后,玩家向服务器发送请求,声称自己已完成挑战
      • 对收到的数据进行验证,例如将质询 ID 与之前保存的 ID 进行比较,或检查质询是否仍然可用等。
      • 如果请求有效则更新玩家账号,否则忽略它

      假设在客户端处理的数据总是可以被黑客入侵,为了更好的游戏性能,最好在服务器端验证东西并简化客户端的数据加密/解密过程。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-18
        • 2017-05-18
        • 2018-11-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多