2014-12-15 2 views
-2

나는이 질문이 몇 가지 다른 질문처럼 보임을 알고 있습니다. 하지만 나는 작은 차이 때문에 이것이 Stackoverflow의 나머지 부분에서 찾을 수있는 것보다 완전히 다른 문제라고 생각합니다.색인으로 제시된 2 차원 배열의 경계를 찾으십시오.

내 문제는 내가 약간의 작은 보드 게임을 만드는 것이므로 상하 좌우로 움직이기를 원합니다. 내가 이것을 할 때, 나는 각 방향이 내 경계인지 알 필요가있다. 나는 이것을 위해 어떤 일을하고 싶다. 왜냐하면 나는 어떤 숫자라도 갖고 있다면 나는 어떤 방향으로 나아갈 수있다. 나는 경계 세포가 무엇인지를 계산할 수 있었다. 나는 11시에 출발하여 왼쪽으로 가고 싶다. 그래서 국경 넘버 9가되어야한다. 내가 6 세부터 시작하여 내려 가고 싶다면 14 개를 국경 넘버로 사용할 것이다.

이것은 내 보드를 나타내는 방식입니다. 그래서 저는 그것들이 보드 상에있는 숫자 인덱스 + 1을 가진 1 차원 배열에서 그것을합니다.

+--+--+--+--+ 
|1 |2 |3 |4 | 
+--+--+--+--+ 
|5 |6 |7 |8 | 
+--+--+--+--+ 
|9 |10|11|12| 
+--+--+--+--+ 
|13|14|15|16| 
+--+--+--+--+ 

경험이있는 사람은 누구입니까? 이 국경 번호를 얻는 방법을 누가 알 수 있습니까?

감사합니다 1D에서

+1

2 차원 배열을 사용하는 것이 더 간단 할 것 같습니다. 프로그래머의 작업을 더 어렵게 만들면 컴퓨터가 할당하기가 더 쉬운 배열 일지는 중요하지 않습니다. – Kevin

+0

알아,하지만이 표현은 프로그램의 나머지 부분에서 훨씬 간단 해. 그렇지 않으면 2 차원 배열을 사용합니다. – Digihash

답변

0

변환은 2 차원 좌표에, x 및 필요에 따라 y 값을 변경 1D 좌표에 다시 변환 조정합니다.

function boundary(idx, direction){ 

    rows = 4; 
    cols = 4; 

    idx -= 1; 

    x = idx % cols; 
    y = int(Math.floor(idx/cols)); 

    if (direction == "left"){ 
     x = 0; 
    } 
    else if (direction == "right"){ 
     x = cols-1; 
    } 
    else if (direction == "up"){ 
     y = 0; 
    } 
    else if (direction == "down"){ 
     y = rows-1; 
    } 

    return cols * y + x + 1; 
} 
+0

국경의 일부 값으로 계산을하면 잘못된 결과가 나오기 때문에 이것은 내 문제에 대한 정답이 아닙니다. 그러나 이것은 나의 논리로 나를 도왔다. 도와 줘서 고마워! – Digihash

+0

죄송합니다. 귀하가 0이 아니라 1 세부터 계산을 시작했다고 생각했습니다. 편집 됨. 그래도 잘못된 결과를 얻는다면 색인, 방향, 예상 결과 및 실제 결과를 알려주십시오. – Kevin