private List <GroundNode> FindNeighbors(GroundNode _ground) { int x, y; List <GroundNode> _neighbors = new List <GroundNode>(); x = _ground.GetIndex()[0]; y = _ground.GetIndex()[1]; if (x > 0) { //field 가장 왼쪽일 때 if (allNode[x - 1, y].IsPassable()) { _neighbors.Add(allNode[x - 1, y]); } } if (x < field.sizeOfFieldWidth - 1) { //field 가장 오른쪽일 때 if (allNode[x + 1, y].IsPassable()) { _neighbors.Add(allNode[x + 1, y]); } } if (y > 0) { //field 가장 아래쪽일 때 if (allNode[x, y - 1].IsPassable()) { _neighbors.Add(allNode[x, y - 1]); } } if (y < field.sizeOfFieldHeight - 1) { //field 가장 위쪽일 때 if (allNode[x, y + 1].IsPassable()) { _neighbors.Add(allNode[x, y + 1]); } } //대각선 움직임을 포함할 때만 사용 /*if (x > 0) * { * * if (y > 0) * { * if (allNode[x - 1, y].IsPassable() && allNode[x, y - 1].IsPassable() && allNode[x-1,y-1].IsPassable()) * { //대각선 좌측하단 노드 * _neighbors.Add(allNode[x - 1, y - 1]); * } * } * if (y < field.sizeOfFieldHeight - 1) * { * if (allNode[x - 1, y].IsPassable() && allNode[x, y + 1].IsPassable() && allNode[x-1, y+1].IsPassable()) * { //대각선 좌측상단 노드 * _neighbors.Add(allNode[x - 1, y + 1]); * } * } * * } * if (x < field.sizeOfFieldWidth - 1) * { * * if (y > 0) * { * if (allNode[x + 1, y].IsPassable() && allNode[x, y - 1].IsPassable() && allNode[x + 1, y - 1].IsPassable()) * { //대각선 우측하단 노드 * _neighbors.Add(allNode[x + 1, y - 1]); * } * } * if (y < field.sizeOfFieldHeight - 1) * { * if (allNode[x + 1, y].IsPassable() && allNode[x, y + 1].IsPassable() && allNode[x + 1, y + 1].IsPassable()) * { //대각선 우측상단 노드 * _neighbors.Add(allNode[x + 1, y + 1]); * } * } * * }*/ return(_neighbors); }