2012-04-29 217 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