2012-08-10 5 views
0

임의의 게임 조각 (이미지)으로 게임 보드 (8x8)를 채우려하고 있지만 전체 보드가 채워지지 않았습니다. 일부는 비어 있습니다. 그렇게하기 위해, 보드에서 x, y 좌표를 무작위로 생성하고 난수를 할당하고 있습니다. 필 보딩 (fillBoard)은 모듈의 개인 함수이기 때문에 공용 함수 인 copyBoard에 복사합니다.slice()를 사용하여 배열 배열을 복사하는 방법

아이디어는 무작위로 x, y 좌표를 생성하여 배열 [x], 배열 [y]에 넣는 것입니다. 배열 배열을 복사하는 데 문제가 있습니다. 모든 배열이 정의 된 것은 아니기 때문입니다. 너는 어떻게 그렇게 생각하니?

여기까지가 있습니다. splice()가 정의되지 않은 변수에서 작동하지 않기 때문에 오류가 표시됩니다.

function fillBoard(){ 
    var x, y; 
    monsters=[]; //empty array 

    x = Math.floor(Math.random()*cols); 
    y = Math.floor(Math.random()*rows); 

    monsters[x] = []; /* making x variable an array */ 
    monsters[x][y] = Math.floor(Math.random() * numMonsterTypes); 
} 

function copyBoard() { 
    var copy = [], 
     x; 

    for (x = 0; x < cols; x++) { 
     if(monsters[x]){ 
      copy[x] = monsters[x].slice(0); //slice(array) -> returns the selected elements in an array 
     }; 
    }; 
    return copy; 
} 
+1

정말 당신이 저장하는 몬스터의 종류에 따라 달라집니다. – karim79

+2

아마 당신이 해결하려고하는 실제 문제를 묘사한다면 우리는 적절한 해결책을 더 잘 도울 수있을 것입니다. 지금 당장은 코드를 보여주는 것이별로 의미가 없으므로 실제로하려는 것을 알 필요가 있다고 생각합니다. – jfriend00

답변

0

를 저장할 수있는 유일한
또는
요소를 초기화 복사 할 수 있습니다 솔루션 :

function fillBoard(){ 
    var x, y; 
    monsters=[]; //empty array 

    x = Math.floor(Math.random()*cols); 
    y = Math.floor(Math.random()*rows); 

    monsters[x] = []; /* making x variable an array */ 
    monsters[x][y] = Math.floor(Math.random() * numMonsterTypes); 
} 

function copyBoard() { 
    var copy = [], 
     x; 

    for (x = 0; x<cols; x++){ 
     copy[x] = []; 
     if(monsters[x]){ 
      copy[x] = monsters[x].slice(0);; 
     }; 
    }; 

    return copy; 
} 
0

무작위 배열 요소가 초기화 될 때 발생하는 문제입니다.
당신은 모든 행과 열을 반복하고 다른 곳 initilised 요소의 목록/배열 (배열 요소 maxRow + 1/maxCol + 1?) 여기