2012-04-29 18 views
1

JavaScriptを初めて使用しています。 私はLearning JavaScript(o'reilly)を通して仕事をしましたが、最初のJavaScriptを作成しようとしています。初心者用JavaScript

私が興味を持っているものに取り組むのが最善だと思っていましたが、それはかなり複雑です。

私は基本的に、ジェーンステイラーが彼とスペースマリンの間に12歩のスペースハルク(ボードゲーム)の状況をシミュレートしようとしています。 最初のステップでは、いずれかのダイスで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> 

EDIT:私は最終的に友人から多くの援助でそこに着きました。ここでは、現在のコードです:あなたは本当にあなたが数学を使用する必要があり、「最も近い」整数に丸めたい場合

... 
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()は(CEILは切り上げ...名前を考える)切り捨て。円形()。あなたのケースでは

あなたは6掛けると切り捨て場合は、5

よりも数値が高いほど得ることは決してないだろう、私は唯一のあなたのコードをちらっと見たが、これはあなたの問題である疑いがあるので、場合私を許してそれは単なる間違いであり、あなたの問題の原因ではありません。

[編集]さらに反映されたら、上記を無視してください。問題は、あなたのメソッドは2つのパラメータを期待していますが、あなたは1つしか渡していないということです。

パラメータの受け渡しの仕方を誤解していると思います。

jamCheck(p1, p2){}これらの名前は関連しません。これらのラベルは、メソッド内にのみ存在します。私はあなたが混乱させているのは、渡している変数とメソッドの変数に同じラベルを使用しているということです。したがって、jamCheck(roll1)メソッドを呼び出すと、2つの変数で動作するように設計されている必要があるため、このメソッドを呼び出すことができません。それ以外にも、結果が何であれ、ブラウザは構文が壊れているコードを補うだけのものです。 CやJavaなどの言語では、このようなコードをコンパイルすることさえできません。これらの行はコンパイラによって意味をなさないと指摘されます。

だから、解決策は(何かのような)...

var roll1,roll2; 

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

しかし、あなたのdiceRoll方法であなたがする必要があります最後のものは、(それぞれまたはroll2)return roll1;ある

だから、initメソッドでは、このすべてを包む方法について答えるのをkireanために見ますあなたは体のonloadコールバックから4つ(またはそれ以上)のメソッドを呼び出すわけではありません。

1

ここではいくつかのことが間違っていますが、最初はグローバルスコープ変数と関数スコープ変数を混同しています。

この機能

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

は、2つのパラメータを期待していますが、結果として、ここでbody onload="...jamcheck()"

なしに渡しているその真の当然のように未定義のは、未定義に等しいです。

あなたはこの

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

    jamCheck(dice1, dice2) 
} 

そしてボディのonloadで、この関数を呼び出すと似ラッパー関数を必要としています。

+0

皆さんありがとうございます!試してみると良いことがいくつかあります。私は彼らに行くとあなたすべてに戻ってきます。私は学ぶべきことがたくさんある! – snoopyj