gpt4 book ai didi

java - 游戏设计 - 玩家数据 - 我这样做对吗?

转载 作者:行者123 更新时间:2023-12-02 07:18:55 25 4
gpt4 key购买 nike

我使用 JDBC/Derby 来存储我正在编写的益智游戏的高分数据。由于游戏的性质,能够根据过滤器查看高分数据(即显示我在该级别的最高分、显示我在这台计算机上的最高分等)将很有用。

这款游戏还有“战役”模式,玩家可以朝着目标努力并解锁成就。

目前, Activity 数据存储在可序列化的 java 文件中,我将其写入磁盘。

但是,由于高分数据存储在数据库中,并且高分表中的 PlayerID 将链接到战役文件,所以感觉我也应该将战役数据存储在数据库中。

我面临的问题是我根本无法分解数据。在我看来,“玩家”表将有一百多个宽,每一列代表一个目标或成就的状态。

我不是数据库专家。我不知道这是否是一个糟糕的设计。我已阅读范式 1-5,并且我相信我符合每种形式,但我怀疑我做错了什么。

我真的想要数据库中的高分,它们非常适合。然而,作为一个副作用,我感觉到强烈的插入力将 Activity boolean 值/其他信息也存储在数据库中。将一些数据写入文件,而将其他数据写入数据库,感觉很奇怪,尤其是当两者相互引用时。

我做错了什么吗?只要表格实际上遵循范式,就可以拥有一百或两列的表格吗?

最佳答案

如果“玩家”表中的大多数列表示目标或成就的状态,您可以考虑重复数据并在子表中对其进行建模。

Player Table
PlayerId (primary key)
PlayerName

Goals Table
GoalId (primary key)
GoalName

PlayerGoals Table
GoalId (primary key, foreign key to Goal)
PlayerId (primary key, foreign key to Player)

Goals 表是一个主列表,您在编写游戏时设置一次。当玩家实现某些目标时,您可以在 PlayerGoals 中插入一行。

您应该根据预期用例对数据进行建模。以这种方式建模(与多列 Players 表相比)将使这些类型的查询更容易编写:-

  • 列出球员以及他们已完成的目标
  • 哪个目标已被最多玩家完成?
  • 任何其他一般性对待目标的查询

添加目标会更容易,因为只需在 Goals 表中插入一行,而不是添加一列。然而,也许你无论如何都需要写一堆代码,而这并没有什么意义。

另一方面,如果您有一个包含许多列的大型平面 Player 表,这些类型的查询将会更容易:-

  • 向我提供有关特定玩家的所有信息
  • 列出所有已完成目标 X 的玩家
  • 列出所有已完成目标 X 但未完成目标 Y 的玩家

最后,您需要选择是否要在数据库中明确建模目标的概念。什么是对什么是错取决于您的优先顺序。

关于java - 游戏设计 - 玩家数据 - 我这样做对吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14512348/

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