2012-03-06 7 views
1

私は私のウェブサイトのダイスローラーを書いています。私の他の質問のおかげで、私は自分の機能でデータを入力することができます。Javascriptダイスロール返却不明

  //Constant 
     var consDie = new Array(3); //Implanté les élément de constance des dés. 
      for (var i = 0; i <= 2; i++){ 
       consDie[i] = 12 - (i * 2); 
       console.log("D" + consDie[i]); 
      } 

      var consNDice = 6; //Constante pour le nombre de dés 
      var consAlign = { 
       UnAl : consDie[2], 
       Bal : consDie[1], 
       Phys : consDie[0], 
       Ment : consDie[0] 
      }; 
      //declaration of an object that contain the kind of dice that is rolled by powerup 

     //Variable integers 
     var intDice = new Array(6); // contenant pour les résultats de dé. 
     var intPhys = 0; //Phys Aligned answer counter 
     var intBal = 0; //Neutral/balanced aligned answer counter 
     var intMent = 0; //Mental aligned answer counter 


     //Dice Roll function 

     function Dice (consAlign) { 
      //Variables constant 
      this.dicekind = consAlign; 
      this.rollDice = function() { 
       return Math.floor(Math.random()*dicekind); 
      }; 

     } 

     console.log(Dice(consAlign["Ment"])); 

どうしたのですか?

+0

私は()内の数値を送信しない場合、NaNを取得しますが、私のconsAlign []値を取得する関数が必要ですか? – Delarn

+0

NaNを取得する理由を説明するために私の答えを拡張しました。 – Douglas

+0

これで動作します!私は自分のコードの "質問"の部分を攻撃しようとしています...私はその部分のJSonを作らなければならないと思います。 – Delarn

答えて

2

Dice関数は値を返しません。あなたの編集dicekindが定義されていないNaNので、あなたが取得しているとフォローアップするには:

console.log(new Dice(consAlign["Ment"])); 

編集:あなたは、新しいオブジェクトを構築するためにそれを使用するためのもののように見えます。 5 * undefinedNaNに "Not a Number"と表示されます。

Diceの内部でthis.dicekindを使用する必要があります。ここで働くそれを行うための一つの方法です:

function Dice(kind) 
    { 
     this._kind = kind; 
    } 

    Dice.prototype.roll = function() 
    { 
     return Math.floor(Math.random() * this._kind) + 1; 
    }; 

    var dice = new Dice(6); 

    console.log(dice.roll()); 

値の範囲ではなく0..5の、1..6からであるように、私もロール法では1を追加しました。

+0

この回答に感謝します! – Delarn

+0

私はそれをして、それは私にサイコロがあるはずのものを与える。 'var nDice; \t \t \t nDice =新しいダイス(consAlign); \t \t \t console.log(nDice); ' これは私にサイコロのオブジェクトを与えます...今、どのようにサイコロを動かすのですか? – Delarn

+0

ロールメソッド「nDice.rollDice()」を呼び出すことができます。あなたがすでに 'Dice'オブジェクトであることを知っているので、私の例では' roll'だけに名前を変更しました。そのため、メソッド名で繰り返す必要はありません。 – Douglas