我对此有一个可行的解决方案,尽管我相信必须有一个更好的实现。简而言之,问题是这样的:
我正在开发一个 connect>=3,宝石风格的益智游戏。当“板”的状态发生变化时,我将所有部分分组,以便如果它们水平或垂直“连接”,它们共享一个 ID。这就是我目前的做法:
[伪]
for all( array object* )
{
if !in_a_group() check_neighbours( this )
}
void check_neighbours( ID )
{
if ( check_is_same_type( left ) )
{
if !in_a_group() this.ID = ID ; check_neighbours( ID )
else if( in_a_group ) change_IDs(this.ID, ID )
}
same for right ...
up ...
down ...
}
那是我所做的一个非常肮脏的伪版本。我递归调用 check_neighbours,将第一个分支的 ID 向前传递(我使用这个指针作为 ID,而不是生成一个)。
如果我发现一个连接的具有不同 ID 的片段,我会用新 ID 覆盖具有该 ID 的所有片段(我在这里有一个 ASSERT 因为它实际上不应该发生。到目前为止还没有进行大量测试)
除非该作品没有 ID,否则我不会在原始分支检查_neighbours。
这工作得很好,虽然我的伪可能缺少一些小逻辑。我的问题是它有可能使用许多分支(这可能是我正在处理的硬件的问题)。我已经在这个问题上工作了很长时间,以至于我看不到另一个解决方案。有没有感觉到你错过了一些非常明显的东西?
我也是stackoverflow的新手,对编程相当陌生,任何关于礼仪等的建议都值得赞赏。