2012-04-29 336 views
1

我是JavaScript新手。 我已经通过学习JavaScript(o'reilly)工作我的工作,但我只是想做我的第一个JavaScript。初学者JavaScript

我认为最好在我感兴趣的事情上工作,事实证明它相当复杂。

我基本上是试图模拟(最终)在太空绿巨人(Boardgame)中一个Genestealer在他和太空海洋之间有12个步骤的情况。 第一步它的6个骰子杀死Genestealer,之后5或6杀死。 如果骰子上的数字相同,则枪支卡塞。

我只是想模仿这里的第一步。我认为问题是与jamCheck

基本上这个输出总是正确的,即使我改变它为!=它总是显示枪塞。

我想知道是否需要将变量传递到另一个局部变量,但它适用于killCheck而无需执行此操作。 (我试过了,虽然我可能做错了)

这是完全可能的,这里有一些非常简单的错误。

我希望你能帮忙,或者指点我正确的方向。

非常感谢!

 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> 
     <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> 
     <head> 
     <title>SH</title> 
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
     <script type="text/javascript"> 
     //<![CDATA[ 

    function diceRoll1() { 
     iValue = Math.random(); // random number between 0 and 1 
     iValue *= 6; // multiply by 6 to move the decimal 
     iValue = Math.floor(iValue)+1; // round to nearest integer. +1 to 1-6. 
     var roll1 = iValue; 
     document.getElementById('result1').innerHTML = 'Dice roll 1 : ' + roll1; 
     killCheck (roll1); 
     jamCheck (roll1); 
     return; 
    } 

    function diceRoll2() { 
     iValue = Math.random(); // random number between 0 and 1 
     iValue *= 6; // multiply by 6 to move the decimal 
     iValue = Math.floor(iValue)+1; // round to nearest integer. +1 to 1-6. 
     var roll2 = iValue; 
     document.getElementById('result2').innerHTML = 'Dice roll 2 : ' + roll2; 
     killCheck (roll2); 
     jamCheck (roll2); 
     return; 
    } 

    function killCheck(roll1,roll2){ 
     if (roll1==6 || roll2==6) 
     { 
     document.getElementById('kill').innerHTML = 'GS KILLED'; 
     } 
     return; 
    } 

    function jamCheck(roll1,roll2){ 
     if (roll1 == roll2) 
     { 
     document.getElementById('jam').innerHTML = 'GUN JAMMED'; 
     } 
     return; 
    } 

    //]]> 
    </script> 
    </head> 
    <body onload="diceRoll1();diceRoll2();killCheck();jamCheck();"> 
     <p id="result1">Dice roll 1</p> 
     <p id="result2">Dice roll 2</p> 
     <p id="kill">GS ALIVE</p> 
     <p id="jam">GUN FINE</p> 

    </body> 
    </html> 

编辑:我最终与很多来自朋友的帮助了那里;这里是当前的代码:

... 
function getDiceValue() { 
var diceValue = Math.random(); 
diceValue *= 6; 
diceValue = Math.floor(diceValue) + 1; 
return diceValue; 
} 

function killCheck(roll1, roll2) { 
if (roll1 === 6 || roll2 === 6) { 
document.getElementById('kill').innerHTML = 'GS KILLED'; 
} 
return; 
} 

function jamCheck(roll1, roll2){ 
if (roll1 === roll2) { 
document.getElementById('jam').innerHTML = 'GUN JAMMED'; 
} 
return; 
} 

function rollDice() { 
var roll1 = getDiceValue(), 
roll2 = getDiceValue(); 
document.getElementById('result1').innerHTML = 'Dice roll 1 : ' + roll1; 
document.getElementById('result2').innerHTML = 'Dice roll 2 : ' + roll2; 
killCheck (roll1, roll2); 
jamCheck (roll1, roll2); 
} 
//]]> 
... 
<body onload="rollDice();"> 
+1

只是一个不相关的注释,不要在函数末尾使用空返回(它们将不会返回任何内容)。你为什么要使用空回归的唯一原因是停止函数(类似于循环中断) – ajax333221

+0

如果你想清理一些东西,这里有一个方便的模具卷功能:function rollDie(min,max ){ return Math.floor(Math.random()* max)+ min; } 6面例子:rollDie(1,6); – pdizz

+0

@ ajax333221我读过它会将它返回给killCheck和JamCheck,是否根本不需要? – snoopyj

回答

4

Math.floor()向下取整(想想名字......小区四舍五入)如果你真的要舍入到“最近”整你需要使用数学。回合()。

在你的情况,如果你乘以6,并四舍五入你永远不会高于一批5

我怀疑这是你的问题,虽然我只在你的代码一眼,所以如果,原谅我这只是一个错误,而不是你的问题的原因。

[编辑]经过进一步思考,不顾以上情况。问题是你的方法需要2个参数,但你只传入一个参数。

我认为你误解了参数传递的工作方式。

jamCheck(p1, p2){}这些与您的名称无关。这些标签只存在于您的方法中。我怀疑是什么让你感到困惑的是,你使用相同的标签来传递你传入的变量,以及你的方法中的变量。所以,当你调用jamCheck(roll1)方法时,它不能做它所需要的,它使得它被设计用于2个变量。除此之外,你得到的结果只是浏览器试图弥补其语法被破坏的代码。在C或Java等语言中,你甚至不能编译这样的代码;编译器会指出这些行不具有任何意义。

所以,解决方案是(类似)...

var roll1,roll2; 

roll1 = diceRoll1(); 
roll2 = diceRoll2(); 
jamCheck(roll1,roll2); 
killCheck(roll1,roll2); 

但在你diceRoll方法,你需要做的最后一件事是return roll1;(或分别ROLL2)

,并期待kirean对如何在init方法包装这一切了答案,所以你不会从身体的onload回调中调用4(或更多)方法。

1

如果您在这里做了一些错误的事情,首先是将函数作用域变量与全局作用域变量混淆。

此功能

function jamCheck(roll1,roll2){ 
    if (roll1 == roll2) 
    { 
    document.getElementById('jam').innerHTML = 'GUN JAMMED'; 
    } 
    return; 
} 

需要两个参数,但你传递没有这里body onload="...jamcheck()"

结果,不确定等于不确定的,所以当然它的真实。

您需要与此类似

function executeGame(){ 
    var dice1 = rollDice1(); 
    var dice2 = rollDice2(); 

    jamCheck(dice1, dice2) 
} 

然后调用身体的onload这种功能的包装功能。

+0

真棒谢谢大家!我有很多事情要尝试!我会给他们一个去找你。我有很多要学习! – snoopyj