我正在开发一款游戏,其中我有一个8x8字段的游戏板,每个字段包含1到9个值。
我有一个从特定的x,y字段开始的函数,并检查它旁边的字段是否包含匹配值。如果找到匹配的字段,则应该再次调用该函数,再次检查它旁边的字段。最后,我想要一个递归发现的所有值(对象)的列表。
public void CheckForMatches(int x, int y, int value){
if (field[x,y-1].value == value){
//add to list
CheckForMatches[x,y-1,value]
}
if (field[x,y+1].value == value){
//add to list
CheckForMatches[x,y+1,value]
}
if (field[x-1,y].value == value){
//add to list
CheckForMatches[x-1,y,value]
}
if (field[x+1,y].value == value){
//add to list
CheckForMatches[x+1,y,value]
}
return null;
}
如何在执行结束时获得包含所有匹配对象的列表?
注意:我知道我需要阻止检查我开始的字段,但为了方便起见,请将其留在这里。
答案 0 :(得分:2)
将列表传递给CheckForMatches
。它只是在找到匹配时将匹配添加到列表中,并将相同的列表传递给递归调用。
在进行初始调用时传递一个空列表以开始递归搜索。
答案 1 :(得分:1)
你需要一个清单......
public void CheckForMatches(int x, int y, int value, List<something> list){
if (field[x,y-1].value == value){
list.Add(match info)
CheckForMatches(x,y-1,value, list)
}
if (field[x,y+1].value == value){
list.Add(match info)
CheckForMatches(x,y+1,value, list)
}
if (field[x-1,y].value == value){
list.Add(match info)
CheckForMatches(x-1,y,value, list)
}
if (field[x+1,y].value == value){
list.Add(match info)
CheckForMatches(x+1,y,value, list)
}
}
第一次称之为:
List<something> matches = new List<something>();
CheckForMatches(0, 0, 0, matches);
编辑:
您需要非常小心边缘情况(如上所述),因为检查匹配第一个if语句(字段[x,y-1])将导致抛出IndexOutOfBounds异常。与您离开阵列上端的另一侧相同。