gpt4 book ai didi

php - PHP 中的 Flood-It 游戏递归函数算法

转载 作者:搜寻专家 更新时间:2023-10-31 21:45:16 26 4
gpt4 key购买 nike

我正在尝试制作 Flood-It 风格的游戏,但我遇到了主要算法的问题。

该算法会检查您已经控制的每个方 block ,并找到具有您无法控制的所选颜色的相邻方 block 。

变量:

1 - $board:保存棋盘状态的二维数组

  • 你在数组中控制的方 block 为=0
  • 不受您控制的方 block 范围为 1、6,代表不同的颜色。

2 - $color: 是用户选择的颜色

3 - $size: 是棋盘的正方形大小

4 - $rkey/$ckey : 二维数组中的行和列

主要问题是它适用于起始角的前几个方 block ,可能是 2 或 3 个,然后它就停止控制新的方 block 。

这是我正在尝试制作的游戏示例:http://floodit.appspot.com/

function checkRecursive($rkey, $ckey)
{
global $board, $size, $color;
if ($board[$rkey][$ckey] == 0)
{
if ($rkey < $size-1 && $board[$rkey + 1][$ckey] == $color)
{
$board[$rkey + 1][$ckey] = 0;
checkRecursive($rkey + 1, $ckey);
}
if ($ckey < $size-1 && $board[$rkey][$ckey + 1] == $color)
{
$board[$rkey][$ckey + 1] = 0;
checkRecursive($rkey, $ckey + 1);
}
if ($rkey > 0 && $board[$rkey - 1][$ckey] == $color)
{
$board[$rkey - 1][$ckey] = 0;
checkRecursive($rkey - 1, $ckey);
}
if ($ckey > 0 && $board[$rkey][$ckey - 1] == $color)
{
$board[$rkey][$ckey - 1] = 0;
checkRecursive($rkey, $ckey - 1);
}
}
}

最佳答案

阅读您的代码,看起来如果您总是从 (0,0) 开始,那么一旦紧邻该单元格的方 block 处于玩家控制之下,进一步的检查将不会通过它们。

你会去:

  • 从 (0,0) 开始
  • 检查 (0,1) :已设置为 0,什么都不做。
  • 检查 (1,0) :已设置为 0,什么都不做。

我认为您可能需要删除“控制”方 block 的概念。您要做的就是重复执行 flood fill不同颜色的算法。

我认为这样的事情可能会更好,其中 $oldcolor 是开始前起始单元格的颜色,$newcolor 是用户选择的颜色:

function checkRecursive($rkey, $ckey)
{
global $board, $size, $oldcolor, $newcolor;
if ($board[$rkey][$ckey] == $oldcolor)
{
$board[$rkey][$ckey] = $newcolor
if ($rkey < $size-1 && $board[$rkey + 1][$ckey] == $oldcolor)
{
checkRecursive($rkey + 1, $ckey);
}
if ($ckey < $size-1 && $board[$rkey][$ckey + 1] == $oldcolor)
{
checkRecursive($rkey, $ckey + 1);
}
if ($rkey > 0 && $board[$rkey - 1][$ckey] == $oldcolor)
{
checkRecursive($rkey - 1, $ckey);
}
if ($ckey > 0 && $board[$rkey][$ckey - 1] == $oldcolor)
{
checkRecursive($rkey, $ckey - 1);
}
}
}

关于php - PHP 中的 Flood-It 游戏递归函数算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4800744/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com