【发布时间】:2018-03-25 22:55:59
【问题描述】:
我正在着手实施国际象棋,在深入兔子洞之前,如果您不介意的话,我想征求社区的意见,因为我已经走入了死胡同哈。我正在努力找出将碎片与坐标相关联的最佳方法。
现在,我有一个包含各个部分的列表列表,其中每个列表代表一个板。
对于坐标,我使用了这个列表理解
coordinates = [[(i,j) for i in range(0,8)] for j in range(0,8)]
这给了我一张这样的桌子
[(0, 0), (1, 0), (2, 0), (3, 0), (4, 0), (5, 0), (6, 0), (7, 0)]
[(0, 1), (1, 1), (2, 1), (3, 1), (4, 1), (5, 1), (6, 1), (7, 1)]
[(0, 2), (1, 2), (2, 2), (3, 2), (4, 2), (5, 2), (6, 2), (7, 2)]
[(0, 3), (1, 3), (2, 3), (3, 3), (4, 3), (5, 3), (6, 3), (7, 3)]
[(0, 4), (1, 4), (2, 4), (3, 4), (4, 4), (5, 4), (6, 4), (7, 4)]
[(0, 5), (1, 5), (2, 5), (3, 5), (4, 5), (5, 5), (6, 5), (7, 5)]
[(0, 6), (1, 6), (2, 6), (3, 6), (4, 6), (5, 6), (6, 6), (7, 6)]
[(0, 7), (1, 7), (2, 7), (3, 7), (4, 7), (5, 7), (6, 7), (7, 7)]
关于如何将棋子与其坐标联系起来以找到潜在的移动,有什么强烈的想法吗?起初我在考虑字典,但你有多个相同类型的棋子(例如两个骑士),并且随着棋盘的发展,这并不理想。
一如既往的感谢。
【问题讨论】:
-
您可以创建字典。每对都与某个部分相关联,或者什么都没有。您如何表示一块或什么都不表示:例如,您可以使用另一个元组,例如 (color/piece)
-
但是,我发现创建二维数组更简单。数组的每个值都是一个片段(例如我描述的元组)。恕我直言,使用元组来表示网格的协调似乎不太实用。见stackoverflow.com/questions/4878881/…
-
将依靠您的专业知识并接受您的建议,因为我大部分时间都是盲目的。我只是在考虑你的评论。如果我理解正确,您的建议是有一个 2d 数组,其中它只是游戏板,并且可以用各种字母来描述各个字母,大写和小写描述侧面(即忽略坐标并在列表中操作列表,因此它被视为二维数组)?
-
是的,关于使用数组索引作为棋盘的坐标。您将作品表示为单个字母的描述更多Joe Iddon's suggestion,并且具有简单且易于打印的优点。我认为这是一个合理的方法。
标签: python artificial-intelligence