디버깅이나 실행 시 너무 오래걸립니다...
440
작성자 없음
작성한 질문수 0
이처럼 브레이크 포인트를 잡고 디버깅을 하였는데 아무리 기다려도 끝나지 않습니다.
브레이크 포인트를 program의 player.Initialize(1, 1, board);에 잡고 실행하고 f10이 아닌 f11를 통해 코드 작동을 확인하면 잘 작동하는 것은 확인했습니다.
혹시 컴퓨터의 성능에서 오는 문제인가요?
혹시 몰라 우수법 부분의 코드도 함께 올립니다.
public void Initialize(int posY,int posX, Board board)
{
PosX = posX;
PosY = posY;
_board = board;
int[] frontY = new int[] { -1, 0, 1, 0 };
int[] frontX = new int[] { 0, -1, 0, 1 };
int[] rightY = new int[] { 0, -1, 0, 1 };
int[] rightX = new int[] { 1, 0, -1, 0 };
_point.Add(new Pos(PosY, PosX));
while (PosY != board.DestY || PosX != board.DestX)
{
//1. [현재 바라보는 방향]을 기준으로 오른쪽으로 갈 수 있는지 확인.
if (_board.Tile[PosX + rightX[_dir], PosY + rightY[_dir]] != Board.TileType.Wall)
{
//오른쪽 방향으로 90도 회전 : 시계방향
_dir = (_dir - 1 + 4) % 4;
//[현재 바라보는 방향]으로 앞으로 한 보 전진
PosX = PosX + frontX[_dir];
PosY = PosY + frontY[_dir];
_point.Add(new Pos(PosY, PosX));
}
//2. [현재 바라보는 방향]을 기준으로 전진할 수 있는지 확인.
else if (_board.Tile[PosX + frontX[_dir], PosY + frontY[_dir]] != Board.TileType.Wall)
{
// 앞으로 전진
PosX = PosX + frontX[_dir];
PosY = PosY + frontY[_dir];
_point.Add(new Pos(PosY, PosX));
}
else
{
// 왼쪽 방향으로 90도 회전
_dir = (_dir + 1 + 4) % 4;
}
}
}
답변 1
0
컴퓨터 문제는 아니고 어느 정도 컴퓨터에 믿음(?)을 가지셔야 합니다.
사실 10년 전 컴퓨터도 이 정도 수준의 연산은 눈깜짝할 사이에 매우 쉽게 합니다 ㅎㅎ
코드를 직접 타이핑하시는건 매우 권장드릴 사항이지만,
그렇다면 강의 코드와 100% 동일하게 만드셨는지를 다시 체크해보셔야 합니다.
위 아이콘을 누르면 강의 소스코드를 다운로드 받을 수 있는데,
강의 소스를 실행해봐서 정상적으로 잘 실행되면
컴퓨터 및 환경 문제가 아니라 '어딘가' 다른 부분이 있을 것으로 예상할 수 있습니다.
그러면 함수 단위로 하나씩 복붙해서 교체해보면서, 범인을 색출하면 되겠죠.
살짝 보니 저는 PosY, PosX 순서로 접근하는 것을 뒤바꾼다거나,
~하는 몇몇 수정 사항을 하셨는데 이런 부분의 영향일 수도 있습니다.
(정확한 원인을 알려면 전체 코드를 봐야 합니다. Board에서 누락한 부분이 있을 수도 있겠죠)
그리고 DestY, DesX가 정상적으로 세팅되어 있어야 빠져나올텐데 이 부분도 확인해봐야겠죠.
breakpoint를 여기다 걸고 조건들이 잘 설정되어 있는지 확인해보시기 바랍니다.
사실 이런 류의 문제들이 학습할 땐 짜증날 수 있지만
은근히 중요한 디버깅 연습 문제입니다.
디버깅은 누가 가르쳐줄 수 없고 스스로의 감(?)을 길러야 하기 때문에
한 두 시간 정도 코드를 멈추고 살펴보고 진행하고 하는 실습을 해보시기 바랍니다.
그래도 정 문제 해결이 힘드시면 전체 프로젝트 압축해서 rookiss@naver.com로 보내주시면 살펴보겠습니다.
그럼 수고하세요~~
0
아, 원인을 찾았습니다ㅠㅠ
올려주신 코드를 하나하나 다 대조해보아도 문제점을 찾지 못했었는데,
코드에서의 오류보다는 Board에서 미로의 완성도를 높힌답시고 y-2,x-2부분을 모두 Empty로 만들지 않고 랜덤을 돌려서 어느 부분은 Wall로 만들어 player가 최종적으로 [23,23]을 찾지 못하였습니다..
브레이크 포인트를 여기저기 다 해보다가, Update 부분에 Initailize를 넣어 콘솔창에서 움직임을 확인해보았더니 위의 문제점을 찾았습니다.
너무 허망한 제 실책이었네요 ㅠㅠ
도움 주셔서 감사합니다! 열심히 계속 해보겠습니다.
게임개발에서 주로 어느부분에 알고리즘들이 쓰이는지 궁금합니다
0
169
2
글꼴 바꿔도 자간이 좁아 찌그러져보이시는 분들
0
86
1
NullReferenceException 예외) 같은 실수하시는분 계실까봐 남겨요
0
66
1
parent를 Pos타입으로 만든 이유
0
74
1
콘솔창에 격자가 안나옴 미로 생성 X
0
133
1
격자 생성 안됨 무한루프
0
113
1
BFS 질문
0
143
2
격자 무한 출력
0
166
2
A* 의 PriorityQueue 관련 질문입니다
0
154
2
vscode에서 원그리기
0
179
1
환결설정 강의 원 그리기
0
122
1
15-17분
0
85
1
3:16초에 근데 이렇게 해가지고 부분에 "{}"를 만들어서 자식 node들을 생성하던데 왜 중괄호로 감싸게 만드는 건가요?
0
140
2
동적 배열 관련 질문입니다!
0
209
1
Big-o 표기법에서 시간 복잡도
0
167
1
7:40에서 언급하신 색상이 날아가는 문제 이해를 못하겠습니다
0
150
1
트리구현연습 강의 질문있어요
0
142
1
창은 뜨는데 맵이 나타나지 않아요.
0
174
1
Ctrl F5 하면 나오는 창은 어디서 설정할까요??
0
271
1
void CalcPathFromParent(Pos[,] parent)에 대해서
0
201
2
NullReferenceException예외가 발생했을때 어떻게 해야하나요?
0
227
1
[해결] 환경설정 강의에서 원이 이상하게 그려지는 문제
3
306
2
오른손 법칙에서 플레이어 점이 안 움직입니다
0
243
2
맵 만들기 오류
0
177
1





