Javascript 以最小值/最大值和固定时间生成40个随机间隔
我正在做一个总游戏时间为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;iJavascript 以最小值/最大值和固定时间生成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
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我-我很想看到它的实际应用