使用已知目标和已知数组大小,如何在Actionscript 3中搜索2D数组?

时间:2013-03-28 18:07:57

标签: arrays actionscript-3 flash

我正在构建各种棋盘游戏,目前正处理玩家运动。我想限制玩家,使他们只能在游戏板本身内移动。该板存储在嵌套数组中,Actionscript 3相当于2D数组 - 类似于数组[x] [y]。我知道长度,我知道我想找到的目标。我需要做的就是确定数组中是否存在该目标,以确认玩家是否可以实际移动到该插槽,并返回true或false。有人可以提供任何建议吗?这似乎不是一个非常简单的问题。

2 个答案:

答案 0 :(得分:0)

假设你的数组看起来像这样:

var board:Array = [
    [a,0,0],
    [0,b,0],
    [0,0,c]
]

然后检查电路板中间是否存在

if (board[1][1] != 0) {
    trace(board[1][1]) // outputs "b"
}

因此,如果您希望将b向任何方向移动一个区块,您可能会一般尝试......

function move(row:int, col:int, direction:string):void {
    switch (direction) {
        case "up":
            if (row - 1 >= 0 && row - 1 < board.length) {
                board[row-1][col] = board[row][col];
                board[row][col] = 0;
            }
            break;
        case "down":
            if (row + 1 >= 0 && row + 1 < board.length) {
                board[row+1][col] = board[row][col];
                board[row][col] = 0;
            }
            break;
        case "left":
            if (col - 1 >= 0 && col - 1 < board[row].length) {
                board[row][col - 1] = board[row][col];
                board[row][col] = 0;
            }
            break;
        case "right":
            if (col + 1 >= 0 && col + 1 < board[row].length) {
                board[row][col + 1] = board[row][col];
                board[row][col] = 0;
            }
            break;
    }
}

答案 1 :(得分:0)

我没有评论,因为它太长了,虽然这不是一个详尽的答案,只需要澄清一些事情:

  1. 它可能是也可能不是模拟2D数组的最佳选择。其他一些选择包括:单个一维数组,您可以在其中访问模数宽度的项目。这样可以加快查找速度,并且许多内置函数可以在数组上运行。缺点是行插入操作 - 你必须自己编写的东西,而在数组数组中插入一行是微不足道的。另一个选择 - 使用Cantor的映射函数(例如:Mapping two integers to one, in a unique and deterministic way),有多个这样的函数和整数哈希表。这样做的好处是可以获得与实际值一样多的空间(如果地图上只有少量元素,则会占用更少的内存)。在这样的数组中搜索项目比在普通数组中快得多(因为你不会查看“空”项 - 这些项甚至不存在。但是,你需要自己编写很多功能。

  2. 查找路径是许多算法的主题,所有算法都称为"path finding algorithms"。最好的选择因您的具体情况而异。在您选择一个(或创建自己的)之前,重要的是回答这样的问题:

    • 所有动作都有相同的费用吗?
    • 回来了,甚至只是重新访问允许的相同位置?
    • 您是否在寻找能够确保找到最佳方式的解决方案,或者只是以任何方式?
    • 如果移动不直接,您是否可能找到估算中间解决方案成本的启发式函数?
    • 最后,您在优化什么?速度?记忆?
  3. 但是,如果您只是想知道该点是否在矩形边界内,我只需要Rectangle大小的地图并使用http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/geom/Rectangle.html#containsPoint%28%29 - 这将使您无需编写开关类似于Artiace的回答。