2016-07-05 2 views
0

안녕하세요 저는 게임에 대한 기본 계산기를하고 있지만 문제가 발생했습니다.이 프로그래밍 언어를 배우기 시작하면서 발견 한 모든 자습서를 읽었으며 지금은 코드를 만들고 경험을 쌓고 있습니다. 그래서 PHP에서 작성된 계산 코드를 작성하기 전에 PHP가 완벽하게 작동하지만 다른 기술을 사용하고 있었기 때문에 자바 스크립트에서 계산 버튼을 눌러 함수를 작성하는 함수를 작성했습니다. 내가 그녀의 장소에서 모든 데이터를 저장하고 난 체를 한 단계가 끝날 때마다 속도 속성에 의해 짧은 모든 사람에게 짧은 기능을 사용하려면 몇 루프를 사용자바 스크립트 기본 계산은 항상 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; 
}; 

: 5 플레이어의 모든 데이터를 살펴 저장하는 객체 ck 모든 것이 괜찮 으면 끝내 어떻게 든 나도 여전히 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를 사용하여 숫자로 변환 한 후 지금은 잘 작동합니다. 설명을 위해 u는 – yahoo5000

0

을 연결합니다 나는 당신이 뭘 원하는지 모르는 수치로 변환하는 방법 코드로 가정된다 작동하지만, 여기에서 코드를 살펴보면 내가 식별 할 수있는 첫 번째 오류입니다.

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

잘못된 것입니다. 배열의 요소는 0에서 시작하여 array.length - 1으로 끝납니다. 즉, name[name.length]이 존재하지 않습니다. 여기

는 자바 스크립트 배열이 작동하는 방법에 대한 몇 가지 링크입니다 :

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

입니다. 틀린 배열을 푸는 많은 방법이 있습니다. 나는 거의 그 모든 것을 알고 있습니다. 왜냐하면 그게 더 잘 맞는 것 같아서이 wai를 선택했습니다. – yahoo5000

관련 문제