Я использую ГАЗ для случайного выбора врагов для настольной игры. Я дошел до случайного выбора строк из списка, удаления первого элемента внутреннего массива и подачи его обратно на лист. Он работает по большей части, но время от времени удаляет неправильные элементы.
Я искал здесь и на других форумах, переписал сращивание, изменил массив и часами смотрел на него, и я думаю, что достигТочка, в которой я не вижу леса за деревьями и нуждаюсь в свежих глазах.
//--------------------------------------------------------------------------------------------------------//
function selectRandomElements(fromValueRows, count) {
var pickedRows = []; // This will hold the selected rows
for (var i = 0; i < count && fromValueRows.length > 0; i++) {
var pickedIndex = getRandomInt(0, fromValueRows.length);
// Pick the element at position pickedIndex, and remove it from fromValueRows.
var pickedRow = fromValueRows.slice(pickedIndex)[0];
// Add the selected row to our result array
pickedRows.push(pickedRow);
}
return pickedRows;
}
//--------------------------------------------------------------------------------------------------------//
function getRandomInt(min, max) {
min = Math.ceil(min);
max = Math.floor(max);
return Math.floor(Math.random() * (max - min)) + min;
}
//--------------------------------------------------------------------------------------------------------//
function enemyTeam() {
// How many enemies?
var count = getRandomInt(1,5);
// Enemy Database - each enemy should follow the below layout.
// Player level required to encounter || Name || Level || Race || Class || HP || Max HP || Damage || Def || Initiative || Max Initiative || Damage callout
var fromValues = [
['1','Goblin Thug','1','Goblin','Tank','6','6','1','2','1','1','Blurgh!'],
['1','Goblin Snot','1','Goblin','DPS','4','4','2','1','1','1','Oww!'],
['1','Goblin Stitcher','1','Goblin','Healer','2','2','1','2','1','1','Gahh!']
]
// Define enemy list
var enemylist = selectRandomElements(fromValues, count);
Logger.log(enemylist);
enemylist.forEach(function(array){
array.splice(0,1);
});
Logger.log(enemylist);
var ssBS = SpreadsheetApp.getActive().getSheetByName('Battle Stats');
var enemyrange = ssBS.getRange(7,1,count,11);
// Place in Battle Stats tab
enemyrange.setValues(enemylist);
}
Как я уже сказал, это работает по большей части и возвращает 1-4 случайных врагов из списка, но каждыйвремя от времени он удаляет неправильный элемент или даже удаляет два и выдает «Число столбцов в данных не соответствует количеству столбцов в диапазоне. У данных 9, а у диапазона 11. ошибка. Например, только сейчас я запустил его, и он работал дважды, затем я получил ошибку ...
Первый журнал показывает:
[19-10-12 18:38:35: 711 BST] [[1, Goblin Thug, 1, Goblin, Tank, 6, 6, 1, 2, 1,> 1, Blurgh!], [1, Goblin Thug, 1, Goblin, Tank, 6, 6, 1, 2, 1, 1, Blurgh!], [1,> Goblin Stitcher, 1, Goblin, Healer, 2, 2, 2, 1, 1, 1, Gahh!]]
Второй журнал показывает:
[19-10-12 18: 38: 35: 711 BST] [[1, Гоблин, Танк, 6, 6, 1, 2, 1, 1, Blurgh!], [1,> Goblin, Tank, 6, 6, 1, 2, 1, 1, Blurgh!], [Goblin Stitcher, 1, Goblin, Healer,> 2, 2, 2, 1, 1, 1,Гахх!]]
Что бы я хотел увидеть:
[19-10-12 18: 38: 35: 711 BST] [[Гоблин Бандит,1, Goblin, Tank, 6, 6, 1, 2, 1,> 1, Blurgh!], [Гоблин Бандит, 1, Goblin, Tank, 6, 6, 1, 2, 1, 1, Blurgh!], [Goblin Stitcher, 1, Goblin, Healer, 2, 2, 2, 1, 1, 1, Gahh!]]
Любая помощь приветствуется.
РЕДАКТИРОВАТЬ: Сделал перерыв и подумал, что понял, почему это происходит спорадически. Кажется, что это происходит только тогда, когда одна и та же строка выбирается несколько раз - я полагаю, потому что она объединяет одну и ту же строку дважды. Просто нужно знать, как это остановить.