表示非方形棋盘游戏的数据结构

时间:2019-06-04 15:52:12

标签: algorithm design-patterns game-engine graph-algorithm chess

我正在尝试设计一个非方形的棋盘游戏。在这里,我们有2种不同类型的碎片(攻击者和防御者)。两者都可以移动到任何相邻的自由交叉口。如果同一行中的相邻交叉路口有空白,攻击者玩家也可以跳上防御者玩家。考虑到这些情况,我可以考虑将板存储为阵列。 但这不是正确的选择,因为我需要从每个索引中找出可攻击的位置。在设计此评估板时需要您的建议。 另一种选择是使用图形并保持节点的方向(左,右,上,下),但这将需要在板的顶部顶点上有3个下节点。  enter image description here

1 个答案:

答案 0 :(得分:1)

这两次,我不得不创建一个play_line数据类型。我有带有节点和边的规范图; play_line是一系列边。

合法地移动到相邻的自由交叉点是仅从图形来看的微不足道的属性。节点A上的一块m可以移动到任何节点n

  • 边(m,n)存在
  • 节点n为空

m越过np的地方存在

  • 边(m,n)存在
  • 边缘(n,p)存在
  • 节点n包含一块D(防御者)
  • 节点p为空
  • 包含play_line的边(m,n)沿(n,p)是该行的下一条边。

有帮助吗?


OP评论后更新

play_line对象不需要维护,因为一旦初始化,游戏路线就不会改变。这些是从游戏板上进行的硬编码,是图形的增强。例如,如果木板贴有标签

    a
b c d e f
g h i j k
l m n o p
  q r s

然后,第一整行是一个比赛行,其中依次包含五个节点[b, c, d, e, f](b, c), (c, d), (d, e), (e, f)有相应的图形边缘(通过构造校正)。请注意,您的代码必须沿任一方向遍历,或以相反的顺序进行第二次play_line