gpt4 book ai didi

mongodb - 如何在 MongoDB 中存储西洋双陆棋棋盘?

转载 作者:可可西里 更新时间:2023-11-01 10:28:42 24 4
gpt4 key购买 nike

我是 NoSQL 数据库的新手,尽管我找了很多,但我找不到这类事情的最佳实践。

西洋双陆棋,对于那些不知道的人来说,是一种游戏,棋盘有 24 个点(或插槽)和一个可以包含任何颜色棋子的条(被击中的棋子放在酒吧)。另外,每个点(或槽)可以包含一个或多个相同颜色的棋子。

我正在寻找的结构应该被优化以帮助我快速计算两件事:

  • 移动是否有效?要使移动有效,目标插槽中的相反颜色必须少于两个。例如,如果我想移动到插槽 4,并且我是黑色的,则插槽 4 必须只有 1 个白色棋子(此移动后会被击中),或者没有棋子,或者有一个或多个黑色棋子。
  • 每个玩家的点数是多少?点数是我必须拥有的骰子总数,才能赢得比赛。为此,我需要能够快速检索整个棋盘上一种颜色棋子的位置。计算将在数据库之外的本地完成。如果您对我检索查询结果后如何计算点数感到好奇,请查看 Beginner's Guide to Counting Pips .

我想到的结构是这样的:

{
1: {
color: 'black',
pieces: 2
},
2: {
color: 'white',
pieces: 1
},
3: {}
// etc, until 24
24: {}
bar: {
{
color: 'white',
pieces: 1
}
}
}

正如您无疑看到的那样,这种方法的唯一问题是 bar。由于条形可以包含任何颜色的 block ,我必须在 bar 键内创建另一个对象,以便稍后可以根据需要添加颜色为 black 的 block 。

还有更好的结构吗?另外,我很感激有关此结构的性能如何/糟糕的提示和技巧。

最佳答案

考虑到您只有 1 个具有相对恒定大小的 document 这一事实,您可以安全地假设这 1 个 document 将保存在内存中,因此您不应该不要太担心性能问题,所以它只有一个文档 - 它基本上是在询问我的 HashMap 性能如何......

如果由我决定,我会把条分成 2 个条 - bBarwBar(顺便说一下,在现实生活中,每个玩家都有自己的条放在他旁边,以保留他自己的“吃掉”的部分)。

顺便说一下,任何涉及最佳着法等的计算都应该在内存中进行。您不应将中间计算结果存储在 DB

关于mongodb - 如何在 MongoDB 中存储西洋双陆棋棋盘?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30283786/

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