Actionscript 3.0 Cube Crash就像游戏一样

时间:2012-01-31 19:10:21

标签: arrays actionscript-3 flash-builder flash-cs5

我正在尝试在动作脚本3(flash builder)中构建像http://games.yahoo.com/game/bricks-breaking这样的游戏。 我能够创建一个砖块阵列(在游戏开始时可见),但我不知道如何在阵列中找到一组砖块。

让我们说我们有这样的数组:

  • 1 2 2 1 3 3 1 1 1 1 1 1
  • 1 2 1 1 1 3 1 1 1 1 1 1
  • 1 2 1 1 1 3 1 1 1 1 1 1 3
  • 1 1 2 1 1 3 3 3 1 1 1 1 3
  • 1 1 1 2 1 3 1 3 3 1 1 1 3
  • 1 1 1 3 3 1 1 3 3 1 1 1 3
  • 1 1 1 1 1 1 1 3 3 1 1 1 1

当用户点击任何砖红色(数组中的数字为3)时,删除所有3后的数组将如下所示:

  • 1 2 2 0 0 0 0 0 0 1 1 1 1
  • 1 2 1 1 0 0 1 0 0 1 1 1 1
  • 1 2 1 1 1 0 1 0 0 1 1 1 3
  • 1 1 2 1 1 0 1 0 1 1 1 1 3
  • 1 1 1 1 1 0 1 1 1 1 1 1 3
  • 1 1 1 2 1 0 1 1 1 1 1 1 3
  • 1 1 1 1 1 1 1 1 1 1 1 1

基本上我想删除组中的所有项目并且颜色相同。

有任何建议怎么做?

我应该使用哪种algorythm?

感谢您的建议

1 个答案:

答案 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值移动到最低的空行位置。