작성
·
215
·
수정됨
0
using System;
using System.Collections.Generic;
using System.Text;
namespace Algorithm
{
class Pos
{
public Pos(int y, int x) { Y = y; X = x; }
public int Y;
public int X;
}
class Player
{
public int PosY { get; private set; }
public int PosX { get; private set; }
Random _random = new Random();
Board _board;
enum Dir
{
Up = 0,
Left = 1,
Down = 2,
Right = 3
}
int _dir = (int)Dir.Up;
List<Pos> _points = new List<Pos>();
public void Initialize(int posY, int posX, Board board)
{
PosY = posY;
PosX = posX;
_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 };
_points.Add(new Pos(posY, posX));
//목적지 가기 전까지 실행
while (PosY != board.DestY || PosX != board.DestX)
{
//1.바라보는 방향 기준으로 오른쪽으로 가지는지 확인
if (_board.Tile[PosY + rightY[_dir], PosX + rightX[_dir]] == Board.TileType.Empty)
{
//오른쪽으로 90도 회전
dir = (dir - 1 + 4) % 4;
//앞으로 한칸 전진
PosY = PosY + frontY[_dir];
PosX = PosX + frontX[_dir];
_points.Add(new Pos(posY, posX));
}
//2.오른쪽이 안된다면 바라보는 기준으로 가지는지 확인
else if (_board.Tile[PosY + frontY[_dir], PosX + frontX[_dir]] == Board.TileType.Empty)
{
//한칸 전진
PosY = PosY + frontY[_dir];
PosX = PosX + frontX[_dir];
_points.Add(new Pos(posY, posX));
}
else
{
//왼쪽으로 90도 회전
dir = (dir + 1 + 4) % 4;
}
}
}
const int MOVE_TICK = 10;
int _sumTick = 0;
int _lastIndex = 0;
public void Update(int deltaTick)
{
if (_lastIndex >= _points.Count)
return;
_sumTick += deltaTick;
if (_sumTick >= MOVE_TICK)
{
_sumTick = 0;
PosY = points[lastIndex].Y;
PosX = points[lastIndex].X;
_lastIndex++;
}
}
}
}
강의를 보면서 작성을 했는데 미로 생성과 파란 점, 도착 지점까지는 생성되어도 파란 점이 이동을 하지 않는데 코드에 무슨 문제가 있을까요 오류도 안 뜨고 빌드는 성공하는데 정말 움직이지만 않습니다...
답변 2
1
0
안녕하세요, 인프런 AI 인턴입니다. Baekin님의 문제를 해결하기 위해 유사한 상황에서의 기존 답변을 찾아보았습니다. 질문하신 내용은 “오른손 법칙”을 사용하여 플레이어가 미로 속에서 목적지까지 이동하는 로직과 관련이 있습니다. 답변을 제공하기 전 해당 내용과 관련하여 비슷한 문제를 겪었던 다른 수강생의 경우를 살펴보겠습니다.
비슷한 문제를 겪은 수강생은 코드의 논리를 따라가는 과정에서 멈춤 없이 끝나지 않는 디버깅 문제를 겪었습니다. 이를 해결하기 위해 해당 사용자는 프로그램의 주요 부분에 브레이크포인트를 설정하고, 단계별 실행을 통해 코드의 작동을 확인하라는 제안을 받았습니다. 특히 “디버깅이나 실행 시 너무 오래 걸립니다…“라는 제목의 게시글에서 이와 같은 문제 해결 방안이 지식공유자에 의해 제시되었습니다.
함께 참고하면 좋은 유사한 질문 및 답변으로는 두 가지가 있습니다:
1. 플레이어 이동이 제대로 작동하지 않았던 상황에서, 프레임 관리와 관련된 문제에 대한 해결책이 제안되었습니다. 참조: 플레이어 이동 강의에서 프레임관리부분 질문입니다.
2. 플레이어가 예상 경로를 따라가지 않는 문제에 대해, 해당 상황에서 오타나 논리적 실수를 점검하라는 조언이 주어졌습니다. 참조: 실수한 부분에서 나온 증상에 대한 이해
위 내용을 기반으로, Baekin님의 문제를 해결하기 위해 다음 점검 사항을 추천합니다:
- 변수명 오타 검증: 코드 내에서 잘못된 변수명 (예: _dir를 사용했는데 실제 코드에서는 다른 이름을 사용) 이나 오타가 없는지 확인하세요.
- 논리적 순서 점검: Update
메서드가 올바르게 호출되고 있는지, while
반복문과 조건문의 논리적 순서가 정확한지 검증하세요.
- 디버깅: 브레이크포인트를 사용하여 Initialize
및 Update
함수의 실행 과정을 디버깅하면서 변수의 변화를 관찰하세요.
- 프레임 관리 로직 점검: 프레임 관리와 관련된 코드가 잘못 설정되어 있지는 않은지 검토하세요.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.