Java 找到一块石头所剩下的自由?
我正在制作一款基于亚洲棋盘游戏的游戏,名为“围棋”。我目前正在尝试实现捕获系统。基本上,一旦一块石头被敌人包围,它就会被拿走。在屏幕截图中,应移除黑石 同样,如果你把石头连接在一起,那么自由是结合在一起的,例如,这就是你捕获两块石头的方式。这里还有另一个黑人被抓获的例子/lbg8BsC 我有一个19x19的2D阵列,它存储了我所有的石头位置。黑色表示为1,白色表示为2。这是我从第一张图像打印出的数组Java 找到一块石头所剩下的自由?,java,logic,capture,Java,Logic,Capture,我正在制作一款基于亚洲棋盘游戏的游戏,名为“围棋”。我目前正在尝试实现捕获系统。基本上,一旦一块石头被敌人包围,它就会被拿走。在屏幕截图中,应移除黑石 同样,如果你把石头连接在一起,那么自由是结合在一起的,例如,这就是你捕获两块石头的方式。这里还有另一个黑人被抓获的例子/lbg8BsC 我有一个19x19的2D阵列,它存储了我所有的石头位置。黑色表示为1,白色表示为2。这是我从第一张图像打印出的数组 0000000000000000000 0000000000000000000 000000
0000000000000000000
0000000000000000000
0000000000000000000
0000000000000000000
0000000000000000000
0000000000000000000
0000000000000000000
0000000000000000000
0000000002000000000
0000000021200000000
0000000002000000000
0000000000000000000
0000000000000000000
0000000000000000000
0000000000000000000
0000000000000000000
0000000000000000000
0000000000000000000
0000000000000000000
正如你所看到的,中间的黑石被白色的石头包围着。在这种情况下,很容易检查石头是否被包围,但我不知道如何做,一旦你有多个石头一样,在上面的两个其他屏幕截图。非常感谢您的帮助 我想你可以递归地做 假设你运行数组,得到一个1。你检查1的周围,你检查(2),你检查左边(2),你检查下面(1)。当你到达那个额外的1时,你需要对那个位置进行检查。为了简单起见,我会使用一个临时数组,将以前的1改为2。所以现在你检查向上(2)、向左(2)、向下(2)、向右(2)等等,如果两个1都对被包围感到满意,你就把它们变成2
如果你不知道递归,这个解释很好:你可以检查所有具有相同颜色的片段,计算自由度,并跟踪哪些片段已被检查,如果你没有要检查的片段,并且没有自由度,那么这组片段已被捕获 因此,本质上:
- 如果颜色相同(且尚未选中),请检查碎片自由度(可以递归执行此操作)
- 如果为空,则增加自由计数
- 如果颜色相反,什么也不做
我不能说,因为我们在帖子中看不到任何代码,这将是有帮助的。然而,这里是指针,首先检查黑色石头是否被白色包围,如果您遇到另一个黑色石头(比如底部),则转到该位置并检查该位置的剩余(即左、右和底部)程序,确保您已检查白色石头是否为第一个黑色石头。