Loading [MathJax]/jax/output/CommonHTML/config.js
社区首页 >问答首页 >用于游戏/用户级别/进度的数据库设计帮助

用于游戏/用户级别/进度的数据库设计帮助
EN

Game Development用户
提问于 2011-01-29 11:57:36
回答 1查看 2.1K关注 0票数 3

抱歉,这篇文章太冗长了。我正在创建我的第一个真正的游戏化的网络应用程序,并可能需要一些帮助来思考如何构建数据。

设置

用户需要完成几个类别中的每一个任务,然后才能提升级别。我有我的Users表、Tasks表和Categories表,还有一个UserTasks表,它加入了这三个表。(“用户3在类别8中添加了Task 42,现在他们已经完成了。”)一切都很好,工作也很出色。

挑战

我不确定有什么最好的方法来跟踪每个级别在各个类别中的进展。“商业”规则是:

  1. 你必须在每个类别中达到一定数量的分数才能向上移动。
  2. 如果你得到了Cat 8所需的点数,但仍有其他工作要完成,那么任何新的Cat 8分都会对你的总分产生影响,但不要“翻滚”到下一个级别。
  3. 类别的数量很小(目前有五个),不太可能经常改变,但绝不是绝对固定的。
  4. 每个级别所需的点数都会有所不同,可能是通过公式,或者是查找表。

因此,挑战在于跟踪每个用户在每个类别中向下一个级别的进展情况。我想出了几种可能的方法:

可能的解决方案

  1. 在每个类别的user表中添加一列,并在每次用户级别上升时将它们全部重置为零。
  2. 有一个单独的UserProgress表,为每个用户设置一个行,为每个用户提供一个行,以及每个用户拥有的点数。(基本上是1号的多到多版本。)
  3. userLevel表中添加一个UserTasks列,并使用该列通过某种SUM语句导出它们的进度。

它们的当前级别将是用户表中的一个简单int。

Pros & Cons

(1)看起来是最直截了当的,但也是最不灵活的。也许我可以使用基于类别ids的命名约定来帮助克服其中的一些问题。(代码为"select cats; for each cat, get the value from Users.progress_{cat.id}.")这也是我丢失的数据最多的地方--我不知道哪几点意味着水平上升。我对此没有必要,所以也许我不在乎。

(2)似乎很复杂:每次我添加或减去一个用户或一个类别时,我都必须维护另一个表。我预见到同步挑战。

(3)介于

代码语言:javascript
代码运行次数:0
复制
SELECT categoryId, SUM(points) from UserTasks WHERE userId={user.id} & countsTowardLevel={user.level} groupBy categoryId

嗯..。看上去没那么糟。我想我在这里说的是第三条,但我很喜欢任何意见、建议或其他想法。

抱歉,交叉柱。我在上面写了这篇文章,然后记得有一个游戏是以开发为中心的。我很想知道一个地方和另一个地方是否有不同的答案.

EN

回答 1

Game Development用户

回答已采纳

发布于 2011-01-31 18:49:33

因此,挑战在于跟踪每个用户在每个类别中向下一个级别的进展情况。

我不知道为什么这是个挑战?根据我的理解,您可以从UserTasks的内容中快速而琐碎地计算这5个值中的每一个:

  • 您知道它们的级别,因为它已经作为用户的一部分缓存为整数。
  • 这意味着您知道他们在每个类别中需要多少点,因此总体上需要多少点。
  • 所以,你把他们从相关任务中获得的所有分数加起来。(哪些任务是相关的?我不知道,因为你的模式不清楚。见我对这个问题的第二个评论。)
  • 然后,当你需要的时候,你可以把它们和总数进行比较。

由于您有少量的类别,我建议只执行5个单独的查询,每个类别一个,将每个值与这个级别上的最大点数进行绑定。把它们加起来,与总数进行比较。

如果一项任务可以计算到任何给定的级别(例如。您可以在任何时候执行Task 10,并将相关的点收集到您的下一个级别),然后您可能需要某种类型的标志来显示该任务的点数已被赎回,以便上升一个级别。该标志允许您将它们排除在将来的查询之外。

您可能会做一些鬼鬼祟祟的事情,比如将usertasks中的points列设置为零,以将其标记为可赎回的,但是这类事情会导致无法维护的代码,所以我不会推荐它。

所以,就像:select sum(points) from usertasks where redeemed=0 and category=1 --这就是你所建立的第1类点数。

还有:select min(sum(points), 20) from usertasks where redeemed=0 and category=1 --如果你只需要20分的话,你就能得到多少个1类点数。

如果您有一个单独的“category_level”表,其中有一个当前级别的字段,以及该级别上该类别中所需点数的字段,那么我认为您可以使用一个查询来完成所有这些工作:将用户任务连接到分类级别(如果需要的话通过类别),按类别分组,汇总点数,并从分类级别表中获取点数上限。但是,当5个简单的查询就足够时,这是非常复杂的。

票数 0
EN
页面原文内容由Game Development提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://gamedev.stackexchange.com/questions/7861

复制
相关文章
在Ubuntu中修改hosts配置
最近在使用ubuntu开发,难免需要配置hosts,下面介绍以下使用命令进行配置的操作流程。
程思扬
2022/01/11
20.5K0
在docker-compose.yml中定义命令修改hosts文件
因为使用了他人提供的docker镜像,想对其中某个网络操作修改一下,需要修改某域名指向的IP,这就要修改容器内的/etc/hosts文件。又觉得每次重创建docker后手动去修改很麻烦,所以想到在docker-compose.yml中定义该操作。
用户2135432
2023/10/21
7540
Kubernetes在pod中配置hosts解析域名
当 DNS 配置以及其它选项不合理的时候,通过向 Pod 的 /etc/hosts 文件中添加条目,可以在 Pod 级别覆盖对主机名的解析。在 1.7 版本后,用户可以通过 PodSpec 的 HostAliases 字段来添加这些自定义的条目。
聂伟星
2020/09/11
7.2K0
在Ubuntu 20.04中禁用motd欢迎消息
本篇文章重点讲解一下在Ubuntu 20.04中禁用motd欢迎消息具体方法,有需要的小伙伴可以参考一下。
会长君
2023/04/25
2.6K0
Android – 在Gradle中更改APK文件名
默认情况下,Android Studio中的Gradle构建命名为.apk文件app-release.apk。对应用程序build.gradle文件进行了一些小的更改,可以将.apk名称更改为<app name>-release-<version>.apk。 需要在app的目录下面修改build.gradle文件。 第一步是将project.archivesBaseName设置为您的应用程序名称。 android { compileSdkVersion 25 buildToolsVersio
code_horse
2018/07/02
2.9K0
在 .NET 应用程序中运行 JavaScript
前几天我在做一个副业,意识到我需要使用一些 JavaScript 功能。一想到要再次处理 Node.js 和 npm,我就完全放弃了,所以我决定研究一下在 .NET 应用程序中运行 JavaScript 的可能性。很疯狂吧?实际上,这出乎意料的简单。
独立观察员
2022/12/06
2.6K0
在 .NET 应用程序中运行 JavaScript
在vmware中安装Android
首先可以前往https://osdn.net/projects/android-x86/下载自己喜欢的镜像,这里以安卓9的镜像为例
阿龙w
2022/12/25
2.7K0
在vmware中安装Android
Android模拟器修改hosts文件详解
在开发中遇到这样需求,需要在hosts文件中将某个网址域名与其对应的IP地址建立一个关联,比如关联这样一个ip:
全栈程序员站长
2022/11/01
4.1K0
Android模拟器修改hosts文件详解
在Android中调用WebService
某些情况下我们可能需要与Mysql或者Oracle数据库进行数据交互,有些朋友的第一反应就是直接在Android中加载驱动然后进行数据的增删改查。我个人不推荐这种做法,一是手机毕竟不是电脑,操作大量数据费时费电;二是流量贵如金那。我个人比较推荐的做法是使用Java或PHP等开发接口或者编写WebService进行数据库的增删该查,然后Android调用接口或者WebService进行数据的交互。本文就给大家讲解在Android中如何调用远程服务器端提供的WebService。 既然是调用WebService
欢醉
2018/01/22
2.3K0
【DB笔试面试727】在Oracle中,如何禁用HAIP?
说明,ora.cluster_interconnect.haip的ENABLED属性的原始值为1:
AiDBA宝典
2020/01/20
1.8K0
在Android中调用WebService
某些情况下我们可能需要与Mysql或者Oracle数据库进行数据交互,有些朋友的第一反应就是直接在Android中加载驱动然后进行数据的增删改查。我个人不推荐这种做法,一是手机毕竟不是电脑,操作大量数据费时费电;二是流量贵如金那。我个人比较推荐的做法是使用Java或PHP等开发接口或者编写WebService进行数据库的增删该查,然后Android调用接口或者WebService进行数据的交互。本文就给大家讲解在Android中如何调用远程服务器端提供的WebService。 既然是调用WebService
全栈程序员站长
2022/07/05
1.9K0
[译] 在 Android Instant App(安卓即时应用程序)中启用 ProGuard (混淆)
原文地址:Enabling ProGuard in an Android Instant App 原文作者:Wojtek Kaliciński 译文出自:掘金翻译计划 本文永久链接:github.com/xitu/gold-m… 译者:JayZhaoBoy 校对者:hanliuxin5 Instant Apps(即时应用)和 4 MB 字节的限制 把一个已经存在的应用程序转换成 Android Instant App(安卓即时应用程序)是很有挑战性的,但对于模块及结构化你的项目而言却是一个很好的练习,更
Android 开发者
2018/05/31
2.6K0
Hosts文件修改
有时访问某些国外网站很卡(不包括无法访问的网站),很大的原因是这些网站的 CDN 的域名遭到 DNS 污染了。这时就可以选择直接访问源网站 IP ,绕过 DNS 解析,即通过修改主机 hosts 文件的方式,将域名和 IP 的对应关系直接记录下来,来加速对这些网站的访问。
hotarugali
2022/03/01
6.1K0
mac 技术篇-修改hosts文件,hosts文件位置
hosts 文件就在 /etc/hosts 路径里,我们直接是无法编辑的,需要通过下面的方法来修改我们的 hosts 文件。
小蓝枣
2020/09/23
43.7K0
ssh 协议中known_hosts文件
A通过ssh首次连接到B,B会将公钥1(host key)传递给A,A将公钥1存入known_hosts文件中,以后A再连接B时,B依然会传递给A一个公钥2,OpenSSH会核对公钥,通过对比公钥1与公钥2 是否相同来进行简单的验证,如果公钥不同,OpenSSH会发出警告, 避免你受到DNS Hijack之类的攻击。。
用户8418197
2022/02/14
3.2K0
在IPA中重签名iOS应用程序
当我们在对iOS应用程序执行黑盒安全测试时,我们一般只能从AppStore来访问和获取iOS应用程序。但是在大多数情况下,客户都会给我们提供一个IPA文件。在黑盒测试过程中,我们无法访问目标应用的源代码,因此通过Xcode将其部署到设备并进行测试,几乎是不可能的。但是有一种可行的解决方案,即使用我们手头上的配置文件来重新启动应用程序,并将其部署到我们的测试设备上。
FB客服
2020/03/10
2.3K0
在Flutter中制作指纹认证应用程序
现在许多手机都配备了指纹传感器,这使得用户登录和本地身份验证更容易,而且比使用密码更安全。
徐建国
2021/07/31
2.5K0
hosts文件是什么?hosts文件有什么作用?
对网络比较熟悉的朋友应该都知道hosts文件,在windows系统中和手机中,hosts文件有非常多的作用,但是具体来说有哪些作用呢?很多人却并不清楚,下面来为大家具体介绍一下hosts文件是什么、hosts文件有什么作用,希望能够为各位用户提供更多有关hosts文件的经验。
用户8715145
2021/07/02
5.6K0
Android 判断是否在通话中
转载请以链接形式标明出处: 本文出自:103style的博客 最后的判断代码: /** * 是否正在电话通话中 */ private boolean phoneIsInUse() { TelephonyManager mTelephonyManager = (TelephonyManager) activity.getSystemService(Context.TELEPHONY_SERVICE); int state = mTelephonyManager.getCallSt
103style
2022/12/19
1.3K0
点击加载更多

相似问题

关于dlib::frontal_face_detector优化

15

再现dlib frontal_face_detector()训练

116

使用python dlib时导入错误

11

无法使用全局安装的Dlib编译Dlib示例

10

使用pip安装Dlib时出错

60
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档