Javascript 掷骰子直到达到数字
我正在学习javascript,我的项目要求我构建一个包含两个骰子图像、一个输入框和一个按钮的网页。输入完成后,可以按下按钮,javascript将告诉您获得该值所需的掷骰次数,骰子图像将显示该值。我的问题是我不能让骰子显示总数,而且我没有得到正确的掷骰数。它总是说花了一卷Javascript 掷骰子直到达到数字,javascript,jquery,html,Javascript,Jquery,Html,我正在学习javascript,我的项目要求我构建一个包含两个骰子图像、一个输入框和一个按钮的网页。输入完成后,可以按下按钮,javascript将告诉您获得该值所需的掷骰次数,骰子图像将显示该值。我的问题是我不能让骰子显示总数,而且我没有得到正确的掷骰数。它总是说花了一卷 //定义骰子对象、属性和方法 变量骰子={ 双方:6,, rollDie:函数(dice元素){ var rolled value=Math.floor(Math.random()*this.sides)+1; var d
//定义骰子对象、属性和方法
变量骰子={
双方:6,,
rollDie:函数(dice元素){
var rolled value=Math.floor(Math.random()*this.sides)+1;
var diceImage=this.getURL(rolled值);
diceElement.attr(“src”,diceImage);
},
rollDice:function(){
var-diceTotal=0;
diceTotal+=这个.rollDie($('#dice1');
diceTotal+=这个.rollDie($('#dice2');
总回报率;
},
rollDoubles:函数(n){
var die1=0;
var-die2=0;
var numRolls=0;
做{
die1=this.rollDie($('#dice1');
die2=this.rollDie($('#dice2');
numRolls++;
}而(!(die1==die2&&die1==n));
返回numRolls;
},
URL\u前缀:“http://dave-reed.com/book3e/Images/",
getURL:函数(n){
//返回n点模具的URL
返回this.URL_前缀+“die”+n+“.gif”;
}
};
//顶级函数
功能辊号(n){
var die1=Math.floor(Math.random()*骰子边)+1;
var die2=Math.floor(Math.random()*骰子边)+1;
var dicetotal=die1+die2;
var numRolls=0;
//掷两个骰子直到你达到n
做{
骰子1=骰子。滚骰子($('#骰子1');
骰子2=骰子。骰子($('#骰子2');
numRolls++;
}而(总=n);
返回numRolls;
//返回卷数
}
函数getRoll(){
var number=parseFloat($(“#num”).val();
var numRolls=卷号(编号);
$(“#时间”).text(“您在”+
numRolls+“rolls”);
}
$(文档).ready(函数(){
美元(“#R”)。点击(“点击”,获取滚动);
//$(“#滚动”)。在(“单击”,Dice.getURL);
});代码>
动态骰子
卷号
输入目标编号:
滚!
试验
问题出在卷号中
:
function roll_number(n) {
var die1 = Math.floor(Math.random() * Dice.sides) + 1;
var die2 = Math.floor(Math.random() * Dice.sides) + 1;
var dicetotal = die1 + die2;
var numRolls = 0;
do {
die1 = Dice.rollDie($('#dice1'));
die2 = Dice.rollDie($('#dice2'));
dicetotal = die1 + die2; // and recalculate dicetotal here
numRolls++;
} while(dicetotal == n); // this should be while(dicetotal != n)
return numRolls;
}
同样在骰子掷骰子中,你应该在最后返回滚骰值。
//定义骰子对象、属性和方法
变量骰子={
双方:6,,
rollDie:函数(dice元素){
var rolled value=Math.floor(Math.random()*this.sides)+1;
var diceImage=this.getURL(rolled值);
diceElement.attr(“src”,diceImage);
return rolled value;//添加了此行;
},
rollDice:function(){
var-diceTotal=0;
diceTotal+=这个.rollDie($('#dice1');
diceTotal+=这个.rollDie($('#dice2');
总回报率;
},
rollDoubles:函数(n){
var die1=0;
var-die2=0;
var numRolls=0;
做{
die1=this.rollDie($('#dice1');
die2=this.rollDie($('#dice2');
numRolls++;
}而(!(die1==die2&&die1==n));
返回numRolls;
},
URL\u前缀:“http://dave-reed.com/book3e/Images/",
getURL:函数(n){
//返回n点模具的URL
返回this.URL_前缀+“die”+n+“.gif”;
}
};
//顶级函数
功能辊号(n){
var die1=Math.floor(Math.random()*骰子边)+1;
var die2=Math.floor(Math.random()*骰子边)+1;
var dicetotal=die1+die2;
var numRolls=0;
//掷两个骰子直到你达到n
做{
骰子1=骰子。滚骰子($('#骰子1');
骰子2=骰子。骰子($('#骰子2');
dicetotal=die1+die2;//添加了此行
numRolls++;
}while(dicetotal!=n);//已修改
返回numRolls;
//返回卷数
}
函数getRoll(){
var number=parseFloat($(“#num”).val();
var numRolls=卷号(编号);
$(“#时间”).text(“您在”+
numRolls+“rolls”);
}
$(文档).ready(函数(){
美元(“#R”)。点击(“点击”,获取滚动);
//$(“#滚动”)。在(“单击”,Dice.getURL);
});代码>
动态骰子
卷号
输入目标编号:
滚!
试验
这里有几个问题。从roll_number
函数开始,在do while循环中不会重新计算dicetotal
。其次,当dicetotal==n
时,将使您脱离循环。实际上,您想要的是相反的:循环,而dicetotal
与您尝试滚动的n
不同。最后,rollDie
函数将更改显示的图像,但不会返回滚动值
rollDie
应该是:
rollDie: function(diceElement) {
var rolledValue = Math.floor(Math.random() * this.sides) + 1;
var diceImage = this.getURL(rolledValue);
diceElement.attr("src", diceImage);
return rolledValue;
}
卷号应该是这样的:
function roll_number(n) {
var dicetotal; //No need to set a total as the first total will be done in the loop
var numRolls = 0;
do {
dicetotal = Dice.rollDie($('#dice1')) + Dice.rollDie($('#dice2'));
numRolls++;
} while(dicetotal != n);
return numRolls;
}
这似乎不起作用。我尝试了“!=”,这导致我的页面crash@zgarcia看我的更新,还有一件事遗漏了