2013-05-18 5 views
0

나는 팩맨 게임을 만들고 있는데, 나는 현재 유령 ai로 작업 중이다. Dijkstra의 길 찾기 알고리즘을 사용할 계획입니다. 내 문제는 내 게임이로드 될 때 그래프의 정점이 매트릭스에 저장된다는 것입니다. 나는 문제가 가끔 경계 예외 밖으로 배열을 발생한다는 것이다이그래프를 정점으로 바꾼다

for(int x = 0; x<40; x++) 
    { 
     for(int y = 0; y<40; y++) 
     { 
      Vertex vertex = map[x][y]; 
      vertex.adjacencies = new Edge[]{new Edge(map[x-1][y], 1), new Edge(map[x+1][y], 1), new Edge(map[x][y-1], 1), new Edge(map[x][y+1], 1)}; 
     } 
    } 

처럼 각 정점에게 가장자리를 모두 지정하려합니다. 현재 vertex가 그래프의 가장자리에 있는지 확인하기 위해 if 문을 여러 개 넣지 않고이 문제를 해결할 수 있습니까?

+0

if 문이 많이 필요하지 않습니다. 그냥 4. 다른 한편으로는 그들을 저장할 필요가 있습니까? 필요에 따라 단순히 매트릭스에서 가져 오지 않는 이유는 무엇입니까? –

+0

각 모서리마다 하나씩 그리고 모서리가 아닌 각 모서리마다 하나씩 –

+0

오류 번호. 북쪽에 하나, 남쪽에 하나, 서쪽으로 하나, 동쪽으로 하나씩 필요합니다. –

답변

0

쉬운 방법 중 하나는 가장자리를 통과 할 수없는 경계선을 포함시키는 것입니다.

예를 들어 실제지도가 40x40 인 경우 42x42 배열을 선언 할 수 있습니다. 행 0과 행 n은 비 통과 행렬이 될 수 있습니다.

왼쪽 측면과 오른쪽 측면에서 팩맨의 원통형 이동을 처리해야합니다.

0

당신은 다음과 같이 1의 "경계"로 루프를 시작해야합니다

for(int x = 1; x < 39; x++) 

때문에, 당신은지도와 가장자리를 만들 때 [X-1] [Y] 도끼가 0으로 시작하여, 배열 인덱스로서 -1을 취해, Array Out of Bounds 예외를 Throw합니다.