Javascript 以最小值/最大值和固定时间生成40个随机间隔

Javascript 以最小值/最大值和固定时间生成40个随机间隔,javascript,intervals,Javascript,Intervals,我正在做一个总游戏时间为180秒的游戏,在这180秒内,需要随机出现40个项目。听起来很简单,对吧?有一个陷阱:项目之间的最小延迟不能小于1秒,也不能大于10秒 到目前为止,我得到的是: const config={}; config.squid=40; const-spawnTimeLastSquid=180-2; const fixedDelay=spawnTimeLastSquid/config.squid; //固定延迟为4.5秒 const maxDiff=Math.floorfix

我正在做一个总游戏时间为180秒的游戏,在这180秒内,需要随机出现40个项目。听起来很简单,对吧?有一个陷阱:项目之间的最小延迟不能小于1秒,也不能大于10秒

到目前为止,我得到的是:

const config={}; config.squid=40; const-spawnTimeLastSquid=180-2; const fixedDelay=spawnTimeLastSquid/config.squid; //固定延迟为4.5秒 const maxDiff=Math.floorfixedDelay; 让值=[]; 设间隔=[]; 对于let i=0;i1{ var prev=值[values.length-1]; 如果当前-prev>10,则当前=当前-10; 如果电流-prev<1,则电流=prev+1; //我正在为每只乌贼节省延迟,这样我就可以设置超时 Squid.pushcurrent-prev; }否则{ //繁殖时间如下: Squid.pushfixedDelay*i+偏移量; } //保存值,以便在下一次迭代中使用上一个值 电流值; } //最后的乌贼延迟 SquidInterval.push180-产卵时间最短的Squid;
console.logvalues 这是我的看法。 您可以将其复制粘贴到控制台并查看输出。第一个输出未定义,正常

let secondsFromStart;
let secondsFromAnotherItem;
setInterval(() => {
    if (typeof secondsFromStart !== 'undefined') secondsFromStart++;
    if (typeof secondsFromAnotherItem !== 'undefined') secondsFromAnotherItem++;
}, 1000);
createItem = () => {
  console.log('random item created at ' + secondsFromStart + ' seconds from the start of the game and ' + secondsFromAnotherItem + 'seconds since last item was created');
  secondsFromAnotherItem = 0;
  if (typeof secondsFromStart === 'undefined') secondsFromStart = 0;
}
generateRandomItem = (min, max) => {
    let timeout = Math.floor((Math.random() * (min - max)) + max);
    return new Promise((resolve, reject) => {
        if (secondsFromStart > 180) {
            reject('Time is up');
        }
        setTimeout(() => {
            setTimeout(() => {
                createItem();
                generateRandomItem(min, max);
            }, timeout);// worst case scenario - item is created at last second
        }, min);// dont even start the clock until minimum time has passed
    });
}
generateRandomItem(1000, 10000);

我认为问题在于这方面

if ((current - prev) > 10) current = prev - 10;
if ((current - prev) < 1) current = prev + 1;
如果你改成

if ((current - prev) > 10) current = current- 10;
if ((current - prev) < 1) current = current + 1;

谢谢

我会这样做:

为每个squid生成间隔[1;10],计算总时间,通常大于180,因此现在可以减少随机间隔,直到满足持续时间限制:

函数生成对象{ 设r=[]; 设s=0; 对于设i=0;i=180{ 设d=Math.random; 设i=Math.floorMath.random*40; 如果r[i]-d>=1.0{ r[i]=d; s-=d; } } //为了确保在s<180时,可以使用类似于上面的方法。如果需要,可以循环并增加随机间隔以完全填满180秒 返回r; } 函数drawObjectsobjs{ 设c=document.getElementById'canvas'.getContext'2d',{alpha:false}; c、 fillStyle='白烟'; c、 fillRect0,0,360,10; c、 fillStyle='黑色'; 设s=0;
因为let i=0;我感谢所有人的帮助!我把这一次投了更高的票,因为我最喜欢它。非常感谢!@Franky没问题,如果你打算发布它,请用游戏链接ping我-我很想看到它的实际应用