首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无控制循环迭代

无控制循环迭代
EN

Stack Overflow用户
提问于 2014-03-13 03:40:32
回答 1查看 95关注 0票数 0

这是我的代码:

代码语言:javascript
运行
复制
var randomCoord = function(cells) {
    var step = $('.workplace').innerWidth()/cells;
    var xCord = (Math.floor(Math.random() * (cells+1)))*step;
    var yCord = (Math.floor(Math.random() * (cells+1)))*step;
    if(plants.length != 0) {
        for (var i=0; i<plants.length; i++) {
            if (plants[i].left != xCord && plants[i].top != yCord) {
                plants.push({"top": yCord, "left": xCord});
            }
        }
    } else {
        plants.push({"top": yCord, "left": xCord});
    }
};
var multiplayer = function(func, endIteration, cells) {
    for (var i=0; i<endIteration; i++) {
        func(cells);
    };
};
    multiplayer(randomCoord, 5, 10) // will iterate diferent times

函数,多人游戏必须运行"randomCoords“5次,但它不能工作。为什么迭代的数量是不可控制的?我怎么才能修好它?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-13 03:48:02

看起来,for循环在randomCoord()中应该只在数组中不存在坐标的情况下才将条目推入数组,但这不是逻辑的工作方式。相反,您检查数组中的每一项,如果数组中的项与数组中的项不相等,则将其按下,然后对数组中的每一项执行此操作,从而最终得到数组中的大量重复项(这正是您想要防止的)。

因此,当您第一次调用randomCoord时,您将得到一个项目。下一次你叫它的时候,你会得到两件物品。第三次你称它为4项,然后是8项,然后是16项。这是一个相当简单的逻辑错误。

如果您只想每次调用randomCoord时添加一个唯一项,则可以使用如下逻辑:

代码语言:javascript
运行
复制
var randomCoord = function(cells) {
    var step = $('.workplace').innerWidth()/cells;
    var xCord = (Math.floor(Math.random() * (cells+1)))*step;
    var yCord = (Math.floor(Math.random() * (cells+1)))*step;
    var found = false;
    for (var i=0; i<plants.length; i++) {
        if (plants[i].left == xCord && plants[i].top == yCord) {
            found = true;
            break;
        }
    }
    if (!found) {
        plants.push({"top": yCord, "left": xCord});
    }
};

注意,您不需要单独的if (plants.length != 0),因为for循环已经检查过了,我们的新found变量处理数组最初为空的情况。

如果您碰巧生成了一个坐标冲突,这将不会在该函数调用中添加任何项,尽管生成两个相互冲突的随机值的几率很低,只要cells*step是一个适当的大小数(随机数生成器的范围)。如果想在这种情况下再试一次,那么如果发现冲突,则需要另一个循环再试一次。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22368589

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档