44,000원
다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part2: 자료구조와 알고리즘
public Room<T> AddLast 함수 질문이 있습니다.
public Room<T> AddLast(T data) { Room<T> newRoom = new Room<T>(); newRoom.Data = data; //만약에 방이 없다면, 새로 추가한 방이 곧 Head이다. if (Head == null) Head = newRoom; //101 102 103 / 104 if (Tail != null) { Tail.Next = newRoom; newRoom.Prev = Tail; } Tail = newRoom; count++; return newRoom; } 값을 추가할 때 값을 특정 값 중간에 넣고 싶으면 삭제하는 함수처럼추가하는 값의 앞의 값과 뒤의 값을 연결하는 코드가 있어야 하는 게 아닌지 헷갈려서 질문드립니다.
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part2: 자료구조와 알고리즘
SideWinder()로 미로를 만들 때 길이 막힐 수도 있나요?
y= n번째(n은 홀수) 줄의 모든 x에 대해서 우연히 rand.Next(0,2)의 값이 전부 0이었다면 계속 오른쪽만 뚫을 것같고, y = n+1줄은 전부 Wall인 상태인 것 같은데 그럼 미로가 막히게 되나요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part2: 자료구조와 알고리즘
알고리즘의 용도
삭제된 글입니다
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part2: 자료구조와 알고리즘
플레이어 이동 강의에서 프레임관리부분 질문입니다.
static void Main(string[] args) { Board board = new Board(); Player player = new Player(); board.Initialize(25, player); player.Initialize(1, 1, board.Size -2, board.Size-2, board); Console.CursorVisible = false; const int WAIT_TICK = 1000 / 30; int lastTick = 0; while (true) { #region 프레임관리 int currentTick = System.Environment.TickCount; if (currentTick - lastTick < WAIT_TICK) continue; int deltaTick = currentTick - lastTick; lastTick = currentTick; #endregion //입력 //로직 --> 데이터가 변하는 부분은 로직. 코드로직과 렌더링을 나누면 관리하기가 편하다는 장점이 있다. player.Update(deltaTick); //렌더링 --> 최종적으로 그릴 때 렌더링. Console.SetCursorPosition(0, 0); board.Render(); } } ------------------------------------------------- 위의 전문은, Program.cs 의 전체 코드입니다.저 코드 중에서 #region 프레임관리 int currentTick = System.Environment.TickCount; if (currentTick - lastTick < WAIT_TICK) continue; <- 이 코드!! continue; 를 쓰면 콘솔화면창에 아무것도 뜨지 않습니다. 코드 하나하나 디버깅해봤더니 continue;를 쓰면 콘솔화면에 아무것도 뜨지 않아서 당황스럽습니다. 다시 영상 처음부터 따라해봐도 저부분에서 계속 저러네요.. 뭐가 문제인지 잘 모르겠습니다 바쁘실 텐데 한가로우실때 가능하시다면 답변 부탁드리겠습니다
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part2: 자료구조와 알고리즘
클래스에 아래문장 해석을 어떻게 하면 되나요?
class Room<T> { public T Data; public Room<T> Next; public Room<T> Prew; } 제너릭으로 할당된 배열 Data로 해석하면 되는건가요? int num = 0; 이런 것과 같은 맥락인지 궁금합니다 제너릭 개념이 아직 정립된것인지 클래스를 아직 정응하지 못해서 그런지 헷갈립니다.
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part2: 자료구조와 알고리즘
TreeNode 클래스 질문
밑에 질문 글 중에 class TreeNode안에 TreeNode를 쓰느것에 대해서 물어보셨는데 그럼 처음에 저희가만든 classTreeNode에만 실 객체가 존재하고 그 안에서 쓰인 TreeNode_Children들은 C언어에 포인터와 같이 새로 만들어진 다른TreeNode에 참조(주소)값을 들고있는건가요?
- 해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part2: 자료구조와 알고리즘
안녕하세요 Initialize부분에서 질문이있습니다.
if(x == 0 || x == _size-1|| y == 0|| y==size -1) 코드중에 의문이 드는 부분이 있어서 질문드립니다. 위 코드중에 y == size -1 로 적혀있는데 앞에 x부분을 보면 x ==_size -1로 되어있습니다. y ==_size-1 이 맞는건가요? 아니면 영상에 나온대로 y == size-1이 맞는건가요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part2: 자료구조와 알고리즘
블로그 포스팅에 대한 질문
안녕하세요 루키스님 제가 강사님께 배운 내용을 블로그에 필기 식으로 정리해볼까 하는데 블로그를 이제 시작하기도 하고 혹시나 의도치 않게 강사님의 저작권을 훼손하는일이 될까 우려되어 질문드립니다! 지금 미로생성 알고리즘을 배우고 있는데 강사님의 코드를 제 블로그에 인프런에 있는 루키스님의 수업이라는 출처를 밝히고 포스팅 해도 괜찮을까요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part2: 자료구조와 알고리즘
우선순위 큐 의 개념
안녕하세요 루키스님. C++ 공부하다가 C# 넘어와서 배우는 중입니다. 우선순위 큐 강의로 처음 C# 우선순위 큐를 접하게 되었는데 C++에서 말하는 우선순위 큐와 조금 다른 것 같아서, 이를 이해하는데 어떻게 이해해야할지 감을 잡기가 어렵습니다. 구현해주신 우선순위 큐는 값들을 Add만 한 시점에서는 완벽한 우선순위 큐가 아닌 것으로 보입니다. 아무래도 Heap구조로 되어 있으니 왼쪽 브랜치와 오른쪽 브랜치의 비교가 완전하게 진행되진 않으니까요. 그래서 Add가 끝난 시점에 디버깅 포인트를 잡아놓고 값을 들여다보면 값들이 완전한 순서로 나열되어 있진 않습니다. Pop을 통해 최대값/최소값을 뽑는데에는 최고의 방법이 맞지만 이 우선순위 큐의 용도가 그저 최대값/최소값을 쓰기 위한 용도라고 이해해야하는 건지, 아니면 C++ 에서 말하는 우선순위 큐 처럼 이해해도 무방한건지 헷갈립니다. 이전 강의 Heap 이론에서 조금 더 공부했을 때, MaxHeap과 MinHeap 개념이 있는 걸 알게되었는데요, 이 우선순위 큐가 MaxHeap과 같은 개념인 것으로 보여서, 여기서 또 헷갈렸습니다. 강의에 대해 의심하거나 하는 의도가 전혀 없고 절대 아닙니다! 그저 저는 게임개발을 배우고 있고 이 우선순위 큐가 C#에서 이런 구현방식으로 이용되기 때문에 이 방식으로 알려주시는 건지 궁금했고, C++의 우선순위 큐와 지금 알려주신 우선순위 큐의 개념이 조금 달라 어떻게 이해해야하는지 도움을 받고 싶어서 질문하는 것 뿐입니다. 또 MaxHeap과 같은 구조/이론 이라고 이해해도 되는지도 여쭤보고 싶습니다. 강의 잘 보고 있습니다 (: 좋은 강의 감사합니다!
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part2: 자료구조와 알고리즘
06:07부분 x==-size-2 인부분에서
06:07분 에y==_size-2 부분에서는 x=24부분에 empty가 들어갔지만 x==_size-2인부분에서 마지막 외벽부분인x=23 , y=24인부분에는 왜 empty가 들어가지않고 빨간벽으로 나오는지 궁금합니다.
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part2: 자료구조와 알고리즘
c# 엔진 그리고 새개설 강의 질의
삭제된 글입니다
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part2: 자료구조와 알고리즘
A* 알고리즘 질문입니다
안녕하세요 강사님 강의를 여러번 돌려보다보니 이해가 안되고 넘어갔었던 부분들도 조금씩 이해가 가고 있는 중입니다 A* 강의를 모두 듣고 궁금한점이 생겨서 질문드립니다 최단 거리가 아니라 방문했었던 모든 길들을 표시해보고싶어서 List<Pos> visitedPoint = new List<Pos>(); 로 리스트를 만들고 마지막에 pq.Push() 부분에서 visitedPoint.Add(new Pos(nextY, nextX)); 로 방문한 자점들을 모두 등록한 후에 플레이어 위치 업데이트 부분에서 visitedPoint 에 있는 좌표를 하나씩 표시하도록 하였는데 처음 예상에는 일단 길이 있는 부분으로 간뒤에 막히면 다시 왔던 길로 돌아간 뒤에 방문하지 않은 쪽으로 이동할 줄 알았는데 미리 예약된(?) 좌표인건지 플레이어의 위치가 이리저리 워프가 되는데 pq노드 안에 등록되었던 예약된 좌표 중에 g+h가 더 적은 위치로 이동이 되는건가요? 그리고 하나더 궁금한게 closed를 이용해서 한번 방문한 지점은 더이상 방문하지 않도록 하였는데 방문했었던 지점도 더 효율적으로 재방문 할수 있을것 같은데 한번만 방문할수 있도록 만들어져있는데 이건 현재 타일맵이라서 작성된 부분일까요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part2: 자료구조와 알고리즘
최단 경로 판단에 대하여
BFS가 최단 경로를 찾는데 사용된다고 하셨는데 어떻게 최단 경로를 파악하는지 따라 해보았지만 잘 모르겠습니다. 강의에서 길 찾는 맵을 생성하는 것은 항상 경로가 한 길밖에 없어서 그 길로만 다니는게 아닌가라는 생각이 듭니다 이전 강의에서는 distance[start] 를 사용하여 이동하는데 소모되는 값을 구하기는 했지만 이번 길 찾기에서는 그런 것을 사용하지 않고 최단경로로 간다고 하시는데 이 부분이 이해가 가지않습니다. [ 예를들어] 만약, 목적지까지 갈 수 있는 길이 2개가 있고, 1번째 길은 15걸음 2번째 길은 14걸음이 필요하다고 할 때 ,이번 수업에서 사용한 코드에서 둘 중 어떤것을 최단 경로라고 판단하는지 이해가 되지 않습니다.(비교구문을 사용하지 않아도 가능한것 인지도 궁금합니다) 코드를 보면서도 우선순위를 결정하는 코드를 못찾겠습니다. 제가 공부가 부족해서 안보이는것 일 수 있겠지만요...
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part2: 자료구조와 알고리즘
BFS, A* 질문
대각선 이동이 없다고 할 때 BFS는 도착지점과 상관 없이 모든 노드들에 대한 "확실한" 최단거리를 구하고, A*는 강의에서 사용한 h를 구하는 방식이 벽을 무시하고 계산하는 휴리스틱한 방법이라서 "적당한" 짧은 거리를 구한다고 이해했는데 맞나요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part2: 자료구조와 알고리즘
디버깅 질문
제가 코드를 따라 치다가 parent[PosY, PosX] = new Pos(PosY, PosX); 를 parent[PosY, PosY] = new Pos(PosY, PosX); 로 잘못 쳤다가 다행히 바로 알아채고 바꾸긴 했는데요 이게 제가 발견을 바로 못했다면 코드가 길고 복잡해서 틀린 부분을 찾기가 엄청 힘들었을것 같은데 큰 게임 개발같은 경우는 코드가 이것보다 훨씬 길어질 텐데 이런 오타가 발견하면 어떻게 디버깅 하나요? 브레이크 포인트를 걸어서 하려 해도, 어디가 틀린건지 모르니 어디에 브레이크 포인트를 걸지 모르겠고, 처음부터 stepInto 하자니 너무 복잡해서 답이 없는 경우 어떻게 오류를 찾는지 궁금합니다.
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part2: 자료구조와 알고리즘
트리 - GetHeight 함수..
안녕하세요 늘 강의 잘 듣고 있습니다. GetHeight함수 관련해서.. foreach 내부에 height = Math.Max(height, newHeight); 으로 큰 값을 height에 저장한다고 하셨잖아요, 그렇지만 결국 재귀함수를 계속해서 불러내는 과정에서 최초 int height = 0; 에 의해 값을 몇을 넣어놨던지간에 결국 마지막에 가서는 0으로 초기화가 될 테고 마지막 subtree, 즉 이 경우에는 "아트팀" 의 height 만 반영이 되는 것이 아닌가요? (근데 또 돌려보면 2가 나오는 것은 신기...) 재귀함수 내부에서 계속해서 height를 초기화해대고 있는데 어떻게 height 가 계속 값을 들고 있을수가 있는건지 이해가 안 됩니다. 도와주세요 ㅠㅠ!
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part2: 자료구조와 알고리즘
25x25 에서 안멈추고 반복되는거같은데 한번 봐주실수있나요??
using System; namespace algoritm { class Program { static void Main(string[] args) { // 커서 끄기 Console.CursorVisible = false; // 시간측정 const int WAIT_TICK = 1000 / 30; const char SIRCLE = '\u25CF'; int lastTick = 0; while (true) { #region 프레임 관리 // 프레임 관리 // 시스템 시작이후 경과시간 단위ms int currentTick = System.Environment.TickCount; // 만약 경과시간이 1/30 초 보다 작다면 if (currentTick - lastTick < WAIT_TICK) continue; lastTick = currentTick; #endregion // 입력 // 사용자의 키보드 및 마우스 input // 로직 // 입력에 따라 로직 실행 // 렌더링 // opengl 등에따라 그래픽 렌더링 Console.SetCursorPosition(0, 0); for (int i = 0; i < 25; i++) { for (int j = 0; j < 25; j++) { Console.ForegroundColor = ConsoleColor.Cyan; Console.Write(SIRCLE); } Console.WriteLine(); } } } } } 강사님 화면보고 작성한 코드인데 25x25에서 멈추지않고 계속 생성해서 여쭤봅니다!
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part2: 자료구조와 알고리즘
안녕하세요. 방문 체크를 해주는 이유가 있을까요?
안녕하세요. 완강은 예전에 했는데 여쭤볼 것이 있어서 오랜만에 이 강의를 다시 찾았습니다 ㅎㅎ 제가 이 강의를 통해 다익스트라 알고리즘을 처음 배웠었고 요즘 코딩테스트 풀이를 하고 있는데요. 궁금한 것이 생겨서 문의드립니다. 동일한 정점이 우선순위큐 안에 여러개 있더라도 우선순위 큐의 특성상 가장 최소 가중치합을 가진 정점부터 빠져나오기 때문에 이미 방문된 정점이라 하더라도 예약을 진행하는 for문내에서 어차피 크기비교로 인하여 걸러지게 되어있다고 생각이됩니다. 해당 다익스트라 강의에서는 우선순위큐를 사용하지 않으셔서 우선순위 큐를 사용하신 A* 알고리즘 강의의 코드로 설명을 드리자면 예약 진행하는 for문 내의 if (open[nextY, nextX] < g + h) <- 이 크기 비교 부분에서 이미 방문했던 정점은 어차피 걸러진다고 생각이 됩니다. 가장 최소의 가중치 합을 가진 정점이 제일 먼저 큐에서 빠져나오므로 동일한 정점이라도 (즉 이미 방문 한 것으로 판단되는 정점이라도) 이미 먼저 빠져나갔던 동일한 정점의 가중치합 보단 더 큰 가중치 합을 가졌을 것이기 때문에 큐에서 더 일찍 빠져나가지 못 했을 것이고 위 if 문 크기 비교를 통해 알아서 걸러지는 것 같아요. 그래서 우선순위큐 라는 특성때문에 일반 큐를 사용하는 BFS 와는 다르게 방문 체크를 굳이 할 필요가 없다고 생각이 듭니다. 항상 저도 다익스트라 관련 코테 문제를 풀면서 이 강의에서 배운대로 방문체크를 꼭 했었는데 굳이 할 필요가 있을까 하는 의문이 오늘 문득 들게 되어서요! 방문 체크를 해주지 않아도 정확한 결과가 도출 되었구요. if (closed[node.Y, node.X]) continue; if (closed[nextY, nextX]) continue; 즉 위와같이 이미 방문한 곳이라면 스킵해주는 과정을 굳이 할 필요가 없을 것 같은데 강의에서는 방문 체크를 하셨던 특별한 이유가 있을까요? (알고리즘에 대해 배우는 입장이다보니 혹시 제가 놓친게 있을까 싶어 여쭤봅니다ㅠㅠ) 좋은 강의 감사드립니다. ☺
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part2: 자료구조와 알고리즘
c# 유니티자료구조 수강중 느낌점
언리얼 c++ 추가 강좌 기다리면서 선생님의 C#유니티 로드맵을 수강하게 되었습니다. 난생 처음 C#을 따라하면서 c++과 다르게 뭔가 빼먹은듯한 느낌아닌 느낌이 들면서도 작동은 잘 되더군요. 하지만 자료구조는 쉽지가 않더군요 몇번 따라 해보고 복기 하지만 응용하려고 하면 머리속에 하얗게 되어 버린것은 이미 일상이 되었네요. 역시 언어의 난이도 문제가 아닌 제가 문제 였네요. 유니티도 난생 처음인데 남은 파트 강좌를 잘 따라 할 수 있을지 조금은 우려스려우면서도 기대하고 있습니다. 아무쪼록 모든 로드맵을 끝나고 나면 지나온 길이 헛수고가 아니었으면 좋겠습니다. 앞으로도 훌륭한 선생님의 커리큘럼을 만나거나 배우기 쉽지 않기에 c#로드맵은 이미 완강이 되어 버렸지만 c++로드맵은 아직 진행중이시니 세심한 배려 잘 부탁드리겠습니다.
- 해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part2: 자료구조와 알고리즘
강사님 추후 강의에 Behavior Tree 알고리즘도 강의할 생각은 없으실까요 부탁드립니다!
mmorpg 서버라고하면 길찾기 알고리즘도 있지만 Behavior Tree도 꼭 필요하다고 생각하는데 이부분에 대해선 없는게 조금 아쉽기도하고 그래서 혹시 지금 연재 중이신 c++강의에 추가내용으로 올리실 생각은 없으신지.. 없으셨다면 고려좀 부탁드려봅니다 ㅠㅠ.. 그리고 만약 하시게되면 언리얼 엔진을 사용해서 구현하는것보다 astar강의처럼 순수 c#이나 c++언어로 직접 구현하는 강의였으면 좋겠습니다~! 감사합니다! 코로나 조심하시고 건강하세요~!