• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    해결됨

디버깅이나 실행 시 너무 오래걸립니다...

21.07.24 03:52 작성 조회수 236

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로 보내주시면 살펴보겠습니다.

그럼 수고하세요~~

송준규님의 프로필

송준규

2021.07.25

아, 원인을 찾았습니다ㅠㅠ

올려주신 코드를 하나하나 다 대조해보아도 문제점을 찾지 못했었는데,

코드에서의 오류보다는 Board에서 미로의 완성도를 높힌답시고 y-2,x-2부분을 모두 Empty로 만들지 않고 랜덤을 돌려서 어느 부분은 Wall로 만들어 player가  최종적으로 [23,23]을 찾지 못하였습니다.. 

브레이크 포인트를 여기저기 다 해보다가, Update 부분에 Initailize를 넣어 콘솔창에서 움직임을 확인해보았더니 위의 문제점을 찾았습니다.

너무 허망한 제 실책이었네요 ㅠㅠ

도움 주셔서 감사합니다! 열심히 계속 해보겠습니다.