Javascript 制作D20掷骰机的困难
因此,我对一般的编码相对较新,但在过去的20周里才开始学习Javascript。我决定试着练习我所学的一些东西,制作一个骰子滚轮,滚动一个20面骰子,并从一个松散地基于D&D角色的对象中添加一个奖励 我从朋友那里得到了很大的帮助,他们甚至帮助我编写了这段代码,但是预期的结果仍然没有出来。我肯定有一些很明显的东西我遗漏了或弄糟了,但我只是没有看到 我试着记录每一个函数,看看它吐出了什么,每个函数似乎“滚动”了一个不同的数字。我最好的猜测是“atkRoll”函数是罪魁祸首,它没有像我预期的那样通过上一次返回。我还真的不确定我的参数和参数,觉得这些可能也是一个问题 如果有人能帮我指明正确的方向,我将不胜感激,尽管我还是新手,所以请温柔一点!!谢谢Javascript 制作D20掷骰机的困难,javascript,Javascript,因此,我对一般的编码相对较新,但在过去的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获取所需信息,例如。