gpt4 book ai didi

JavaScript 检查数组越界

转载 作者:行者123 更新时间:2023-12-01 02:52:34 26 4
gpt4 key购买 nike

我有一个矩阵作为竞技场和一个小矩阵作为玩家。使用 key ,用户可以四处走动。 move(pos) 接受参数和内部检查

if(pos=="down")
if (!collide(pos)) player.pos.y++;

碰撞的效果就像

if(pos=="down")
for (i = 0; i < player.matrix.length; i++)
{
for (j = 0; j < player.matrix[i].length; j++)
{
if ((player.matrix[i][j] && arena[player.pos.y + i + 1][player.pos.x + j]) != 0) result = true;
}
}

在你到达竞技场边缘之前,这一切都很完美。当你到达边缘时,因为没有长度+1索引,如果检测给你Cannot read property of ""undefined。我尝试首先检查 typeof index 是否超出范围 == undefined 但即使这样也给了我同样的错误。然后我尝试 try catchcatch 中的下一个函数卡在第一个函数和它本身之间。有什么想法可以找到一个简单的解决方案来检查债券吗?

最佳答案

我的建议只是通过长度比较来保护arena[player.pos.y + i + 1][player.pos.x + j]调用:

for (i = 0; i < player.matrix.length; i++)
{
for (j = 0; j < player.matrix[i].length; j++)
{ // here we have an additional protection of arena dimensions
if(player.pos.y + i + 1 < arena.length && player.pos.x + j < arena[player.pos.y + i + 1].length)
{
if ((player.matrix[i][j] && arena[player.pos.y + i + 1][player.pos.x + j]) != 0)
result = true;
}
}
}

您还可以在 arena 对象上实现一个附加方法:

arena.isValid = function(a, b) {
// check for dimensions
if(a >= arena.length || b >= arena[a].length) {
return false;
}
// check if the value is undefined/null/0/false/""
if(!arena[a][b]) {
return false;
}
return true;
};

所以

for (i = 0; i < player.matrix.length; i++)
for (j = 0; j < player.matrix[i].length; j++)
if(player.matrix[i][j] && arena.isValid(player.pos.y + i + 1, player.pos.x + j))
result = true;

关于JavaScript 检查数组越界,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46879056/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com