2014-06-06 3 views
0

저는 루프로 연습하고 있습니다. 나는 단순한 전함으로 재미있게 만들 것이라고 생각했습니다. 왜 그런지 모르겠지만 doBattle 루프는 다른 것을 경고하지 않고 battleMenu 만 호출합니다. 나는 무엇을 놓치고 오해 하는가? 코드 개선에 대한 권장 사항은 언제나 환영합니다.루프 만 첫 번째 문장을 실행합니다.

doBattle(player, goblin_01); 

function battleMenu(){ 
     selection = prompt("\n Battle menu\n1: Attack\n2: Defend\n3: Abilities\n4: Status\n5: Enemy Status\n Enter a choice: "); 
     // Checks for valid input 
     while (selection > 5 || selection < 1){ 
      selection = prompt("Invalid choice.\n Enter a choice(1-5)"); 
     } 
} 

function doBattle(x,y){ 
    do { battleMenu(); 
     switch(selection){ 
      case 1: // do stuff 
       break; 
      case 2: // do other stuff 
       break; 
      case 3: // alternative stuff 
         break; 
      case 4: // not stuff but things 
       break; 
      case 5: // something irrelevant to the topic 
       break; 
       } // End of Selection Switch 

      } while // condition that became false 

    } 

편집 : 첫번째 이안에 의해, 영업에 논평 한 것처럼, 문제는 내가 문자열을 전달하지만, 정수를 테스트 한 것이 었습니다. 형식을 변환하는 것을 잊었으며 짝수를 문자열로 입력했습니다. 이 사건으로 인해 코드가 복잡해 졌기 때문에 그 코드가 보류 상태 인 것으로 추정됩니다. 하지만 잘하면 지금은 사용 중입니다.

+0

입니다 수 있습니다. – user2672165

+1

'selection'은 ** case **와 ** numbers **를 사용하는 동안 문자열을 보유합니다. 문자열을 사용하도록 스위치/대소 문자를 변경하거나'prompt' 리턴 값을 숫자로 변환하십시오 – Ian

+1

'프롬프트'앞에 '+'를 쓰면 "수정"됩니다 : http://jsfiddle.net/3m9Qb/- 그래도 코드에 더 많은 작업이 있습니다. – Ian

답변

1

코드의 문제점은 dataTypeselection입니다. 변수 selectionString으로 처리되지만 switch 문에서는 비교를 위해 IntegerdataType을 사용하고 있습니다. 그래서 당신은 ... Integer 값을 얻을 수

var m=parseInt(selection); 
     switch(m){ 
     ............ 
     ............ 

dataType 변환 방법을 사용 그리고 여기 당신이 큰 루프를 리팩토링을 시도해야한다고 생각 작업 Fiddle

-1

선택 변수가 정의되지 않았거나 doBattle에 전달 된 것으로 보입니다. 플레이어 및 goblin_01을 선언하는 코드 맨 위의 변수를 선언하십시오. 객체

+1

나는 그것을 시험해 보았다. 그것은 문제가 아니며 간결함을 위해 포함하지 않았습니다 (이 코드 주위에는 많은 것이 있지만 대부분 관련이 없습니다). – Legato

관련 문제