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

data structure for representing non square board game

我正在尝试设计一个不是正方形的棋盘游戏。这里我们有 2 种不同类型的棋子(攻击者和防御者)。两者都可以移动到任何相邻的自由路口。如果在同一行的相邻路口有空位 space,进攻方玩家也可以跳到防守方玩家身上。考虑到这些情况,我可以考虑将电路板存储为数组。 但这不是一个正确的选择,因为我需要从每个索引中对可攻击位置进行硬编码。需要您对设计此板的建议。 另一种选择是使用图形并保持节点的方向(左、右、上、下),但这需要在板的顶部顶点有 3 个下节点。

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

仅从图表来看,合法移动到自由的相邻交叉路口是微不足道的 属性。节点 m 处的一块 A 可以移动到任何节点 n 其中

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

存在从 mnp 的跳转,其中

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

有帮助吗?


OP评论后更新

play_line 对象没有什么需要维护的,因为一旦初始化,游戏路线就不会改变。这些是来自游戏板的 hard-coded,是图表的增强版。例如,如果电路板被标记为

    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