2016-07-05 18 views
0

こんにちは私はゲームの基本的な電卓をやっていますが、問題に直面しています。私はこのプログラミング言語を学び始めました。私が見つけたすべてのチュートリアルを読んで、今はいくつかのコードを作って、私はphpで書かれた計算コードをPHPで書いていますが、PHPでは完璧に機能していましたが、別のテクニックを使用していました.JavaScriptでは計算ボタンを押して関数を作成します5人の選手のすべてのデータを格納するためのオブジェクトは、見てみましょう:JavaScriptの基本的な計算は常にNaNを取得

function count(){ 

    function ninjas (name,dmg,dmgrate,dmggrow,speed,fury) { 
     this.name = name; 
     this.dmg = dmg; 
     this.dmgrate = dmgrate; 
     this.dmggrow = dmggrow; 
     this.speed = speed; 
     this.fury = fury; 
    } 
    var name = []; 
    var dmg = []; 
    var dmgrate = []; 
    var dmggrow = []; 
    var speed = []; 
    var fury = []; 
    var ninja = []; 
    for(var i = 0; i <5; i++){ 
     name[name.length] = document.getElementById("ninja" + (i +1)).value; 
     dmg[dmg.length] = document.getElementById("dmg" + (i +1)).value; 
     dmgrate[dmgrate.length] = document.getElementById("dmgrate" + (i +1)).value; 
     dmggrow[dmggrow.length] = document.getElementById("dmggrow" + (i +1)).value; 
     speed[speed.length] = document.getElementById("speed" + (i +1)).value; 
     fury[fury.length] = 50; 
     ninja[i] = new ninjas(name[i],dmg[i],dmgrate[i],dmggrow[i],speed[i],fury[i]); 
    } 

    ninja.sort(function(a, b){return b.speed - a.speed}); 

    var totaldmg; 
    var damagerate; 
    var damagegrow; 
    var furydmg; 

    for(var a = 0; a < 6; a++){ // 6 fight 
     for(var b = 0; b < 5; b++){ // 5 ninjas 
      if(ninja[b].name == "Kabuto"){ 
       if(ninja[b].fury == 100){ 
        damagerate = ninja[b].dmg/100 * ninja[b].dmgrate; 
        damagegrow = damagerate/100 * ninja[b].dmggrow; 
        furydmg = damagegrow + (damagegrow/100) * ((ninja[b].fury - 100)/0.25); 
        totaldmg += furydmg; 
        for(var c = 0; c < 5; c++){ // add fury each ninja by 25 
         ninja[c].fury +=25; 
        } 
        ninja[b].fury -= 25; 
        ninja[b].fury +=100; 
       }else if(ninja[b].fury > 100){ 
        damagerate = ninja[b].dmg/100 * ninja[b].dmgrate; 
        damagegrow = damagerate/100 * ninja[b].dmggrow; 
        totaldmg += damagegrow; 
        for(var c = 0; c < 5; c++){// add fury each ninja by 25 
         ninja[c].fury +=25; 
        } 
        ninja[b].fury -= 25; 
        ninja[b].fury +=100; 
       }else { 
        damagerate = ninja[b].dmg/100 * ninja[b].dmgrate; 
        totaldmg += damagerate; 
        ninja[b].fury += 50; 
       } 
      } else { 
       if(ninja[b].fury == 100){ 
        damagerate = ninja[b].dmg/100 * ninja[b].dmgrate; 
        damagegrow = damagerate/100 * ninja[b].dmggrow; 
        totaldmg += damagegrow; 
        ninja[b].fury = 0; 
       }else if(ninja[b].fury > 100){ 
        damagerate = ninja[b].dmg/100 * ninja[b].dmgrate; 
        damagegrow = damagerate/100 * ninja[b].dmggrow; 
        furydmg = damagegrow + (damagegrow/100) * ((ninja[b].fury - 100)/0.25); 
        totaldmg += furydmg; 
        ninja[b].fury = 0; 
       }else { 
        damagerate = ninja[b].dmg/100 * ninja[b].dmgrate; 
        totaldmg += damagerate; 
        ninja[b].fury += 50; 
       } 
      } 
     } 
    } 

    document.getElementById("result").innerHTML = totaldmg; 
}; 

私は彼女の場所ですべてのデータを保存するために、いくつかのループを使用し、各ステップは、私がCHEをした後、速度属性によって短い全員に短い関数を使用しますもしすべてが大丈夫だけど最後にどういうわけか私はまだNaNの結果を得ています。これを解決するために誰かが私を助けてくれるかもしれません。何度も自分のコードをチェックしましたが、間違いがあるかも知れません。

+0

[mcve]に問題をコンパクトにしようとすると、私たちはあなたを助けることができますが、問題がどこから来ているのかを理解することもできます – BeyelerStudios

+1

あなたは文字列で数学を行っています。 –

+0

[JavaScriptへようこそ](https://www.destroyallsoftware.com/talks/wat) – Nixon

答えて

1

がtotaldmg + =値がtotaldmg =「未定義の+値にはなりません0

このように、あなたの総変数を初期化逃しました。 DOMから値を読み込むときにも

var totaldmg = 0; 
var damagerate = 0; 
var damagegrow = 0; 
var furydmg = 0; 

、文字列リテラルは

for(var i = 0; i <5; i++){ 
    name[i] = parseInt(document.getElementById("ninja" + (i +1)).value, 10); 
    dmg[i] = parseInt(document.getElementById("dmg" + (i +1)).value, 10); 
    dmgrate[i] = parseInt(document.getElementById("dmgrate" + (i +1)).value, 10); 
    dmggrow[i] = parseInt(document.getElementById("dmggrow" + (i +1)).value, 10); 
    speed[i] = parseInt(document.getElementById("speed" + (i +1)).value, 10); 
    fury[i] = 50; 
    ninja[i] = new ninjas(name[i],dmg[i],dmgrate[i],dmggrow[i],speed[i],fury[i]); 
} 
+0

大丈夫だから私はそれらの変数に0を設定する必要があるかどうかわからないDOMからtypeof値をチェックするために、文字列だったので、数値に変換するためにparseIntを使用して、今はうまくtnxを説明してくれました – yahoo5000

0

を連結しますように私はあなたが何をしたいのか分からない数値に変換し、どのようにコードがになっていますここであなたのコードを見てから、私が識別できる最初のエラーです:

name[name.length] 
dmg[dmg.length] 
dmgrate[dmgrate.length] 
speed[speed.length] 
//etc 

これは間違っています。配列内の要素は、0から始まり、末尾がarray.length - 1になります。つまり、name[name.length]は存在しません。ここで

はjavascript配列がどのように機能するかについて、いくつかのリンクです:

http://www.w3schools.com/js/js_arrays.asp

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array

私はこれがあなたを助け願っています。私は私が私の答えに追加するつもりです他のエラーを見つけた場合、私はあなたのコードを見続けるとなります

2)この動作するようになっている方法:

for(var i = 0; i <5; i++){ 
    name[name.length] = document.getElementById("ninja" + (i +1)).value; 
    dmg[dmg.length] = document.getElementById("dmg" + (i +1)).value; 
    dmgrate[dmgrate.length] = document.getElementById("dmgrate" + (i +1)).value; 
    dmggrow[dmggrow.length] = document.getElementById("dmggrow" + (i +1)).value; 
    speed[speed.length] = document.getElementById("speed" + (i +1)).value; 
    fury[fury.length] = 50; 
    //... 
} 

あなたは要素を追加しようとしている場合javascriptの配列には、name[name.length]はできません。上記のリンクでは、array.push(arg);機能を使用して、それを行う方法を見ることができます。

+0

u間違っている配列をプッシュするための多くの方法があります、私はそれらのほとんどすべてを知っている私はそれが私が良いと思うので、このwaiを選んだ – yahoo5000

関連する問題