inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part2: 자료구조와 알고리즘

오른손 법칙

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

해결된 질문

440

작성자 없음

작성한 질문수 0

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;
                }
            }
        }

C#

답변 1

0

Rookiss

컴퓨터 문제는 아니고 어느 정도 컴퓨터에 믿음(?)을 가지셔야 합니다.
사실 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