Java 找到一块石头所剩下的自由?

Java 找到一块石头所剩下的自由?,java,logic,capture,Java,Logic,Capture,我正在制作一款基于亚洲棋盘游戏的游戏,名为“围棋”。我目前正在尝试实现捕获系统。基本上,一旦一块石头被敌人包围,它就会被拿走。在屏幕截图中,应移除黑石 同样,如果你把石头连接在一起,那么自由是结合在一起的,例如,这就是你捕获两块石头的方式。这里还有另一个黑人被抓获的例子/lbg8BsC 我有一个19x19的2D阵列,它存储了我所有的石头位置。黑色表示为1,白色表示为2。这是我从第一张图像打印出的数组 0000000000000000000 0000000000000000000 000000

我正在制作一款基于亚洲棋盘游戏的游戏,名为“围棋”。我目前正在尝试实现捕获系统。基本上,一旦一块石头被敌人包围,它就会被拿走。在屏幕截图中,应移除黑石

同样,如果你把石头连接在一起,那么自由是结合在一起的,例如,这就是你捕获两块石头的方式。这里还有另一个黑人被抓获的例子/lbg8BsC

我有一个19x19的2D阵列,它存储了我所有的石头位置。黑色表示为1,白色表示为2。这是我从第一张图像打印出的数组

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


如果你不知道递归,这个解释很好:

你可以检查所有具有相同颜色的片段,计算自由度,并跟踪哪些片段已被检查,如果你没有要检查的片段,并且没有自由度,那么这组片段已被捕获

因此,本质上:

  • 从一块开始(x,y)
  • 检查工件左侧(x-1,y)
    • 如果颜色相同(且尚未选中),请检查碎片自由度(可以递归执行此操作)
    • 如果为空,则增加自由计数
    • 如果颜色相反,什么也不做
  • 对下方(x,y+1)、右侧(x+1,y)和顶部(x,y-1)零件重复上述步骤
  • 检查完所有部分后,将其标记为“已检查”(可以是单独的布尔数组或其他内容)

  • 我不能说,因为我们在帖子中看不到任何代码,这将是有帮助的。然而,这里是指针,首先检查黑色石头是否被白色包围,如果您遇到另一个黑色石头(比如底部),则转到该位置并检查该位置的剩余(即左、右和底部)程序,确保您已检查白色石头是否为第一个黑色石头。