gpt4 book ai didi

php/mysql - 我正在做一个具有 'achievements' 的网络应用程序(有点像 xbox 成就) - 最好的编程方式是什么?

转载 作者:可可西里 更新时间:2023-11-01 08:21:00 27 4
gpt4 key购买 nike

我会取得这样的成就

获得1000分

登录20次

在 24 小时内完成 2 个任务

等等

最好的编程方式是什么? (例如,它背后的逻辑。在每个页面加载时检查所有可能的成就将是浪费资源)

最佳答案

这是一个相当开放的问题。一种方法是将用户已经取得的进展存储在数据库表中(每项成就一列),每次取得进展时,增加进度值。当达到目标时,可以为每个成就设置一个魔法值(null、100 万,等等),然后您只需要检查每个用户条目中的哪些列具有魔法值。

你可以只存储进度并计算每次访问的成就状态,但我认为这对于你提到的限时任务之类的事情会有问题,如果你出于任何原因改变目标,人们可能会感到厌烦,他们失去他们之前获得的成就。

可以说更正确的方法是使用静态“成就”表,其中每一行都详细说明一项成就以及目标。然后,您将拥有一个单独的“进度”表,其中每个用户都会为他们正在努力实现的每项不同成就各占一行。这需要更多的工作来实现,但与将目标硬编码到进度表中的列名称相比,您可以在以后更轻松地添加/删除/更改目标。我认为您不应该低估这将在以后给您带来的值(value)。这样,进度表可以为每个用户/成就组合包含多个列,这允许您存储诸如达到的时间成就等内容,并且您可以非常简单地获得这样的成就列表:

SELECT achievement_id
FROM progress
WHERE user_id = $user
AND achievment_time IS NOT NULL

如果你想在每个页面上显示成就,你必须为每个页面加载检查一些东西,但如果你以这些方式之一记录进度,你就不会回到第一个原则和每次计算已进行了多少登录、已完成多少任务等 - 只需从您的数据库中选择一个 SELECT,我认为这就是您的意思。

记录进度对于诸如登录次数之类的事情来说很简单(每次他们执行操作时只需增加一个计数器),但是您显然必须更仔细地考虑在限时保持进度标签的逻辑成就。在这里,您需要跟踪在单独的表中执行操作的时间戳(当然,您可能已经在这样做)并且每次创建新的时间戳时,计算之前时间段内的时间戳以查看是否成就已经达成。

关于php/mysql - 我正在做一个具有 'achievements' 的网络应用程序(有点像 xbox 成就) - 最好的编程方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10446525/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com