我正在尝试在动作脚本3(flash builder)中构建像http://games.yahoo.com/game/bricks-breaking这样的游戏。 我能够创建一个砖块阵列(在游戏开始时可见),但我不知道如何在阵列中找到一组砖块。
让我们说我们有这样的数组:
当用户点击任何砖红色(数组中的数字为3)时,删除所有3后的数组将如下所示:
基本上我想删除组中的所有项目并且颜色相同。
有任何建议怎么做?
我应该使用哪种algorythm?
感谢您的建议
答案 0 :(得分:1)
删除元素的一种简单方法是使用递归函数。这不是唯一的方式(甚至是好的方式),但对于这种游戏来说应该足够了。基本上是这样的:
function breakBricks(x:int, y:int, color:int):void {
if(bricks[y][x] != color) return;
bricks[y][x] = 0;
breakBricks(x + 1, y, color);
breakBricks(x, y + 1, color);
breakBricks(x - 1, y, color);
breakBricks(x, y - 1, color);
}
从用户点击的位置和该位置的颜色开始。如果颜色匹配,则会将该条目设置为0
,否则会使该元素单独使用。它以递归方式对所有相邻元素执行此操作。此代码中缺少的是您需要添加的边界检查。
在下一步中,您可以从下到上遍历每个数组列,保留对您找到的第一个0
元素的位置的引用,并将之后找到的任何非emtpy值移动到最低的空行位置。