Arrays 在已知目标和已知数组大小的情况下,如何在Actionscript 3中搜索2D数组?
我正在开发一款棋盘游戏,目前正在处理玩家的移动。我想限制玩家,使他们只能在游戏板内移动。该板存储在一个嵌套数组中,Actionscript 3相当于一个类似2D数组的数组[x][y]。我知道长度,我知道我要找的目标。我所需要做的就是确定该目标是否存在于阵列中,以确认玩家是否可以实际移动到该位置,并返回true或false。有人能提供一些建议吗?这似乎不是一个很容易的问题 假设您的数组如下所示: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], [
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
我没有发表评论,因为它太长了,虽然这不是一个详尽的答案,但有几件事需要澄清:
- 所有的运动都有相同的成本吗
- 是否允许搬回去,甚至只是重新访问同一地点
- 您是在寻找能够保证您找到最佳方式的解决方案,还是仅仅是任何方式
- 如果运动不是直接向前的,您是否可能找到一个启发式函数来估计中间解决方案的成本
- 最后,你在优化什么?速度?内存
然而,如果你只是想知道点是否在矩形边界内,我只需要一个
矩形
地图的大小并使用-这将使你不用编写类似于Artiace答案中的开关。我假设这是一个先检查新的x,y索引<数组长度-1的问题。取决于y的类型我们的嵌套数组包含,如果x,y索引有效,您可能还需要检查null/positions。在某种程度上,这听起来像是您在问一个非常基本的语法问题,但我怀疑您是否真的在问。请您详细说明您的问题以及具体的问题是什么?