2016-07-23 4 views
0

전함을 자바 스크립트로 만들고 있습니다. 지금은 보트를 놓고 보트가 서로의 위에 놓이지 않도록 노력하고 있습니다.자바 스크립트에서 재시작하는 방법

이렇게하려면 배에 대한 위치를 선택하는 방법, 보트를 만들고 경계를 만드는 방법,이 두 가지 방법을 실행하는 세 가지 방법을 사용하고 있습니다. 두 번째 방법은 보트 주위에 경계를 만들 때 boatHere1으로 설정 한 다음 세 번째 함수에서 첫 번째 함수가 이미 속성이 boatHere = 1 인 위치를 선택했는지 확인합니다. 나는 보트가 이미 있는지 확인하고 다른 곳에 보트를 배치하기 위해 세 번째 기능을 다시 시작합니다.

for (boatNum = 1; boatNum < 4; boatNum++) { 
     do { 
      this.selectPos(); 
     } while (document.getElementById(boatPos).boatHere == 1); 
     this.buildBoat();    
    } 

즉 :

placeBoat : function() { //chooses position, checks to see if eligible and builds boat 
     for (boatNum = 1; boatNum < 4; boatNum++) { 
      this.selectPos(); 
      if (document.getElementById(boatPos).boatHere == 1) { 
       return; 
      } 
      else { 
       this.buildBoat();    
      } 
     } 
    }, 

    selectPos : function() { //chooses position 
      xPos = Math.floor(Math.random() * 8); 
      yPos = Math.floor(Math.random() * 10 + 1); 
      boatPos = "cell_" + xPos + "_" + yPos; 
    }, 

    buildBoat : function() { //builds boat 3 tiles long and boundary 7 tiles long 
     for (boatLen = 1; boatLen < 4; boatLen++) { 
      xPos = xPos + 1; 
      boatPos = "cell_" + xPos + "_" + yPos; 
      document.getElementById(boatPos).hasBoat = 1; 
      document.getElementById(boatPos).style.backgroundColor = "brown"; 
      console.log("placed one tile"); 
     } 
     xPos = xPos - 6; 
     for (boatBox = 1; boatBox < 8; boatBox++) { 
      xPos++; 
      boatPos = "cell_" + xPos + "_" + yPos; 
      document.getElementById(boatPos).boatHere = 1; 
      document.getElementById(boatPos).innerHTML = " X";//visual reminder of where boundary is 
     } 
+2

조심, 신고되지 않은 전역 변수를 everywere! –

답변

-1

당신의 묘사에서 당신이 원하는 것 같습니다 : 여기에 코드입니다 이미 점령되지 않은 곳을 찾을 때까지 새로운 직책을 계속 선택하고 보트를 세우십시오.

+0

내가 사용할 수있는 스팟이 3 개 미만이라면 나는 말하려고했다. while 루프는 무한대가됩니다. –

+0

@AwakeningByte 사실이지만, 호출 코드에 의해 정적으로 배제 될 수 있습니다 (보드에 항상 모든 보트에 충분한 타일이 있음을 확인). – melpomene

2

성공한 보트를 반환하기 위해 별도의 placeSingleBoat() 함수를 사용할 수 있습니다. 성공할 때까지 placeBoat() 함수는 필요한만큼 자주 placeSingleBoat() 호출 할 수 있습니다

placeSingleBoat: function(boatNum) { //chooses position, checks to see if eligible and builds boat 
    this.selectPos(); 
    if (document.getElementById(boatPos).boatHere == 1) { 
     return false; 
    } 
    else { 
     this.buildBoat();    
    } 
    return true;  
}, 

placeBoat : function() { 
    for (boatNum = 1; boatNum < 4; boatNum++) { 
     var placed = false; 
     while (!placed) { 
      placed = this.placeSingleBoat(boatNum); 
     } 
    } 
}, 
+0

'else {'''}'부분을 제거 할 수 있습니다. while 루프는 while (! this.placeSingleBoat (boatNum)) {}'으로 줄일 수 있습니다. – melpomene

+0

사용할 수있는 스팟이 3 개 미만인 경우. while 루프는 결코 멈추지 않을 것입니다. –

+0

@AwakeningByte : 사용할 수있는 스팟이 3 개 밖에 없다면 4 척을 배치하는 것이 어떻게됩니까? – sth

관련 문제