Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 在已知目标和已知数组大小的情况下,如何在Actionscript 3中搜索2D数组?_Arrays_Actionscript 3_Flash - Fatal编程技术网

Arrays 在已知目标和已知数组大小的情况下,如何在Actionscript 3中搜索2D数组?

Arrays 在已知目标和已知数组大小的情况下,如何在Actionscript 3中搜索2D数组?,arrays,actionscript-3,flash,Arrays,Actionscript 3,Flash,我正在开发一款棋盘游戏,目前正在处理玩家的移动。我想限制玩家,使他们只能在游戏板内移动。该板存储在一个嵌套数组中,Actionscript 3相当于一个类似2D数组的数组[x][y]。我知道长度,我知道我要找的目标。我所需要做的就是确定该目标是否存在于阵列中,以确认玩家是否可以实际移动到该位置,并返回true或false。有人能提供一些建议吗?这似乎不是一个很容易的问题 假设您的数组如下所示: var board:Array = [ [a,0,0], [0,b,0], [

我正在开发一款棋盘游戏,目前正在处理玩家的移动。我想限制玩家,使他们只能在游戏板内移动。该板存储在一个嵌套数组中,Actionscript 3相当于一个类似2D数组的数组[x][y]。我知道长度,我知道我要找的目标。我所需要做的就是确定该目标是否存在于阵列中,以确认玩家是否可以实际移动到该位置,并返回true或false。有人能提供一些建议吗?这似乎不是一个很容易的问题

假设您的数组如下所示:

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;
    }
}
函数移动(行:int,列:int,方向:字符串):void{
开关(方向){
案例“up”:
如果(第1行>=0和第1行<线路板长度){
董事会[第1行][col]=董事会[第1行][col];
线路板[行][列]=0;
}
打破
案例“向下”:
如果(行+1>=0和行+1=0&&列-1=0&&列+1
我没有发表评论,因为它太长了,虽然这不是一个详尽的答案,但有几件事需要澄清:

  • 它可能是模拟二维阵列的最佳选择,也可能不是。其他一些选择包括:单个一维数组,您可以在其中访问以宽度为模的项。这样做的好处是查找速度更快,而且许多在阵列上工作的内置函数都可以在开箱即用的情况下工作。缺点是行插入操作——这是您必须自己编写的操作,而将一行插入到数组数组中是很简单的。另一种选择-使用Cantor的映射函数(这里的示例:),有多个这样的函数和整数哈希表。这样做的优点是占用的空间与实际值相同(如果地图上只有很少的元素,则占用的内存会更少)。在这样的数组中搜索项目要比在普通数组中搜索快得多(因为你不去寻找“空”项目——这些项目根本不存在。但是,你需要自己编写很多功能

  • 寻找路径是许多算法的一个主题,这些算法都被称为。最佳的选择将因您的环境而显著不同。在选择路径(或发明自己的路径)之前,回答以下问题很重要:

    • 所有的运动都有相同的成本吗
    • 是否允许搬回去,甚至只是重新访问同一地点
    • 您是在寻找能够保证您找到最佳方式的解决方案,还是仅仅是任何方式
    • 如果运动不是直接向前的,您是否可能找到一个启发式函数来估计中间解决方案的成本
    • 最后,你在优化什么?速度?内存

  • 然而,如果你只是想知道点是否在矩形边界内,我只需要一个
    矩形
    地图的大小并使用-这将使你不用编写类似于Artiace答案中的开关。

    我假设这是一个先检查新的x,y索引<数组长度-1的问题。取决于y的类型我们的嵌套数组包含,如果x,y索引有效,您可能还需要检查null/positions。在某种程度上,这听起来像是您在问一个非常基本的语法问题,但我怀疑您是否真的在问。请您详细说明您的问题以及具体的问题是什么?