【发布时间】:2015-03-09 14:47:24
【问题描述】:
我已经创建了一个游戏板 (5x5),我现在想尽快决定什么时候移动是合法的。例如,(0,0)的一块想要去(1,1),这合法吗?首先,我试图通过计算找出这一点,但这似乎很麻烦。我想根据棋盘上的位置对可能的移动进行硬编码,然后遍历所有可能的移动,看看它们是否与棋子的目的地相匹配。我很难把它写在纸上。这就是我想要的:
//game piece is at 0,0 now, decide if 1,1 is legal
Point destination = new Point(1,1);
destination.findIn(legalMoves[0][0]);
我面临的第一个问题是我不知道如何将可能的移动列表放入数组中,例如索引 [0][0]。这一定是相当明显的,但我坚持了一段时间。我想创建一个数组,其中有一个 Point 对象列表。所以在半代码中:legalMoves[0][0] = {Point(1,1),Point(0,1),Point(1,0)}
我不确定这是否有效,但它在逻辑上比 [[1,1],[0,1],[1,0]] 更有意义,但我不喜欢这个。
我遇到的第二个问题是,我不想在每次游戏开始时都使用实例变量 legalMoves 创建对象,而是让它从磁盘读取。我认为这样应该更快?可序列化类是要走的路吗?
我的第三个小问题是 25 个位置的合法移动不平衡。有些有 8 个可能的合法动作,有些有 3 个。也许这根本不是问题。
【问题讨论】:
-
你如何计算合法移动?也许您正在尝试做的是不必要的过早优化。
-
游戏板不平衡。它来自于 BagChal 游戏,在该游戏中,您始终可以水平和垂直移动,但并不总是沿对角线移动。 upload.wikimedia.org/wikipedia/commons/thumb/e/eb/…
-
看起来如果x或y坐标的差异大于1,或者如果新点的坐标为负数则非法,否则合法。编辑:另外,如果坐标是奇数行和偶数列,那么你不能对角移动。
-
对@NeplatnyUdaj,这有强烈的过早优化的味道。
-
您是否正在寻找类似
Map<Point, Set<Point>> mapFromPointToSetOfLegalDestinations的内容?