Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/439.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 制作D20掷骰机的困难_Javascript - Fatal编程技术网

Javascript 制作D20掷骰机的困难

Javascript 制作D20掷骰机的困难,javascript,Javascript,因此,我对一般的编码相对较新,但在过去的20周里才开始学习Javascript。我决定试着练习我所学的一些东西,制作一个骰子滚轮,滚动一个20面骰子,并从一个松散地基于D&D角色的对象中添加一个奖励 我从朋友那里得到了很大的帮助,他们甚至帮助我编写了这段代码,但是预期的结果仍然没有出来。我肯定有一些很明显的东西我遗漏了或弄糟了,但我只是没有看到 我试着记录每一个函数,看看它吐出了什么,每个函数似乎“滚动”了一个不同的数字。我最好的猜测是“atkRoll”函数是罪魁祸首,它没有像我预期的那样通过上

因此,我对一般的编码相对较新,但在过去的20周里才开始学习Javascript。我决定试着练习我所学的一些东西,制作一个骰子滚轮,滚动一个20面骰子,并从一个松散地基于D&D角色的对象中添加一个奖励

我从朋友那里得到了很大的帮助,他们甚至帮助我编写了这段代码,但是预期的结果仍然没有出来。我肯定有一些很明显的东西我遗漏了或弄糟了,但我只是没有看到

我试着记录每一个函数,看看它吐出了什么,每个函数似乎“滚动”了一个不同的数字。我最好的猜测是“atkRoll”函数是罪魁祸首,它没有像我预期的那样通过上一次返回。我还真的不确定我的参数和参数,觉得这些可能也是一个问题

如果有人能帮我指明正确的方向,我将不胜感激,尽管我还是新手,所以请温柔一点!!谢谢

让myCharOne={
姓名:“佐尔达”,
类:“向导”,
最大马力:100,
当前HP:75,
atkBonus:7,
magicBonus:10
}
功能卷(最小值、最大值){
设minNum=min;
设maxNum=max;
让mathLogic=Math.floor(Math.random()*(max-min+1))+min;
返回数学逻辑
}
atkRoll功能(最小值、最大值){
让骰子结果=骰子滚动(最小,最大);
diceResult+myCharOne.atkBonus;
返回结果;
}
函数makeAtk(最小值、最大值){
让theRoll=掷骰子(最小值、最大值);
设addingBonus=atkRoll();
让printedStatement=`您掷了一个${theRoll},总共${addingBonus}!`;
返回printedStatement;
}

log(makeAtk(1,20))
diceResult+myCharOne.atkBonus
没有做任何有用的事情;它将两个数字相加,但对结果没有任何影响。如果要将奖金添加到
骰子结果
,请使用
+=

makeAtk()
中,您正在调用
atkRoll()
,没有任何参数。它需要
min
max
参数

但是如果你调用
diceRoll()
,然后
atkRoll()
也调用它,他们会得到不同的骰子。如果您需要知道原始掷骰和奖金,
atkRoll()
应该将原始掷骰作为参数,而不是再次调用
diceRoll()

让myCharOne={
姓名:“佐尔达”,
类:“向导”,
最大马力:100,
当前HP:75,
atkBonus:7,
magicBonus:10
}
功能卷(最小值、最大值){
设minNum=min;
设maxNum=max;
让mathLogic=Math.floor(Math.random()*(max-min+1))+min;
返回数学逻辑
}
atkRoll函数(结果){
返回diceResult+myCharOne.atkBonus;
}
函数makeAtk(最小值、最大值){
让theRoll=掷骰子(最小值、最大值);
让addingBonus=atkRoll(theRoll);
让printedStatement=`您掷了一个${theRoll},总共${addingBonus}!`;
返回printedStatement;
}

console.log(makeAtk(1,20))
首先,您收到掷骰子的两个不同输出,因为您在代码中调用了两次
dicerll
makeAtk
包含一个
dicerll
atkRoll
调用,但
atkRoll
本身包含一个
diceRoll
调用:

function atkRoll(min, max) {
  //you call diceRoll here:
  let diceResult = diceRoll(min, max);
  ...
}
我建议将返回的
dicerll
作为如下参数传递到
atkRoll

function atkRoll(roll) {
  let rollPlusAddedBonus = roll + myCharOne.atkBonus;
  return rollPlusAddedBonus;
}

function makeAtk(minimum, maximum) {
  let theRoll = diceRoll(minimum, maximum);
  let addingBonus = atkRoll(theRoll);

  let printedStatement = `You rolled a ${theRoll} for a total of ${addingBonus}!`;
  return printedStatement;
}

console.log(makeAtk(1, 20))  

预期的结果是什么?你得到了什么?欢迎!您在
函数makeAtk
中调用
atkRoll()
时没有参数(最小值和最大值)。由于骰子是20边的,从1到20的连续值,无需传递参数,只需使用:
Math.floor(20*Math.random())+1
。如果将播放器作为参数传递,您可以自定义“printedStatement”.我会做一系列的球员。这样,我就可以控制转弯,并将统计数据放在手边。然后,您可以调用
someFunction(playerIndex)
并从
玩家[playerIndex]
玩家[playerIndex].atkBonus获取所需信息,例如。