我已经尝试了几个小时,以弄清楚为什么我的随机“骰子”滚动功能无法产生我想要的结果。
我的掷骰功能:
function roll(min, max, count) {
min = Math.ceil(min);
max = Math.floor(max);
var result = []
for (var i = 0; i < count; i++){
result.push(Math.floor(Math.random() * max) + 1);
}
return result;
}
我的通话功能:
var stats = [];
var STR = roll(1,6,STRrolls);
Logger.log(STR);
STRrolls的值为3。日志如下所示:
[19-03-20 23:26:12:730 GMT] [1.0,3.0,5.0]
这是我旅行的地方。我试图将这三个值求和,然后将其作为单个值存储在“状态”数组中,以便我也可以使用其他一些数组重复该过程。
这是我的脚本的更好示例:
function roll(min, max, count) {
min = Math.ceil(min);
max = Math.floor(max);
var result = []
for (var i = 0; i < count; i++){
result.push(Math.floor(Math.random() * max) + 1);
}
return result;
}
function sumArr(array) {
return array.reduce(function(a,b){
return a + b
}, 0);
}
function CHAR {
var C_R = SpreadsheetApp.getActive().getSheetByName('Char_Ref')
var STRrolls = C_R.getRange("F2").getValue();
var DEXrolls = C_R.getRange("F3").getValue();
var RESrolls = C_R.getRange("F4").getValue();
var EMProlls = C_R.getRange("F5").getValue();
var STArolls = C_R.getRange("F6").getValue();
var stats = [];
var STR = roll(1,6,STRrolls);
Logger.log(STR);
var DEX = roll(1,6,DEXrolls);
var RES = roll(1,6,RESrolls);
var EMP = roll(1,6,EMProlls);
var STA = roll(1,6,STArolls);
stats.push([STR,DEX, RES, EMP, STA])
rangeStats.setValues(stats);
rangeClass.setValue(CLASSval);
rangeLevel.setValue(1);
}
问题在于,运行此功能之前和之后都会提供相同的日志:
[PDT 19-19-20 17:03:13:560] [3.0,1.0,4.0] [19-03-20 17:03:13:561 PDT] [3.0,1.0,4.0]
答案 0 :(得分:2)
喜欢吗?
function getSum(total, num) {
return total + num;
}
var stats = [];
var STR = roll(1,6,STRrolls);
stats = STR.reduce(getSum);
Logger.log(STR);
您推送了数组中的每个值,并且未执行任何加法操作。
答案 1 :(得分:1)
我发现这是一个有趣的问题。建立每个滚动的最大和最小并不像人们最初猜测的那么明显。
function repeatRolls(cnt) {
var cnt= cnt || 100;
var mindie=100000;
var maxdie=-100000;
var s='<style>th,td{border: 1px solid black;padding:5px;}</style><table>';
for(var i=0;i<cnt;i++) {
var rObj=rollTheDice(12,-12,20);
if(i==0) {
s+='<tr><th>Roll</th>';
for(var k=0;k<rObj.roll.length;k++) {
s+=Utilities.formatString('<th>Die %s</th>',k+1);
}
s+='<th>Sum</th></tr>';
}
s+=Utilities.formatString('<tr><td>%s</td>',i+1);
for(var j=0;j<rObj.roll.length;j++) {
s+=Utilities.formatString('<td>%s</td>', rObj.roll[j]);
if(rObj.roll[j]>maxdie){maxdie=rObj.roll[j];}
if(rObj.roll[j]<mindie){mindie=rObj.roll[j];}
}
s+=Utilities.formatString('<td>%s</td></tr>',rObj.total);
}
s+=Utilities.formatString('</table><br />maxdie: %s<br />mindie: %s',maxdie,mindie);
var userInterface=HtmlService.createHtmlOutput(s).setWidth(1200);
SpreadsheetApp.getUi().showModelessDialog(userInterface, 'Rolling the Dice');
}
具有最大骰子,最小骰子和骰子参数数量的滚动功能真正起作用。
function getSum(total,num) {
return total + num;
}
function rollTheDice(max,min,num) {
var num = num || 6;
var min = min || 1;
var max = max || 6
var roll=[];
for (var i=0;i<num;i++){
roll.push(Math.floor(Math.random() * (max-min+1))+min);
}
return {roll:roll,total:roll.reduce(getSum)};
}