如何修改JavaScript for循环 按指定尺寸数量随机放置舰船
修改方案
原代码双层循环生成10艘船的核心逻辑是内层循环次数为6-size,对应各尺寸生成数量:
- size=5:1艘
- size=4:2艘
- size=3:3艘
- size=2:4艘
总和正好10艘,和给出的原尺寸集合完全匹配。
需要的目标尺寸集合* {2,3,3,4,5} *对应各尺寸生成数量为:5格船1艘、4格船1艘、3格船2艘、2格船1艘,总和5艘。只需要调整内层循环的终止条件,匹配对应尺寸的生成数量即可,其余随机放置逻辑无需改动。
修改后的代码段如下:
randomize(ShipClass = Ship) { this.removeAllShips(); for (let size = 5; size >= 2; size--) { // 匹配目标集合的各尺寸舰船数量 const count = size === 2 ? 1 : size === 3 ? 2 : size === 4 ? 1 : 1; for (let n = 0; n < count; n++) { const direction = getRandomFrom("row", "column"); const ship = new ShipClass(size, direction); while (!ship.placed) { const x = getRandomBetween(0, 9); const y = getRandomBetween(0, 9); this.removeShip(ship); this.addShip(ship, x, y); } } } }
修改后运行会严格按照要求的尺寸集合生成共5艘舰船,原有随机方向、随机坐标、放置失败重试的逻辑完全保留,不会破坏原有功能。
内容的提问来源于stack exchange,提问作者Quo
相关产品推荐
相关产品推荐

