inflearn logo
강의

Course

Instructor

[MMORPG Game Development Series with C# and Unity] Part 2: Data Structures and Algorithms

격자 생성 안됨 무한루프

114

skrurkd576

5 asked

0

F11을 눌러서 확인 했을 때

public void GenerateBySideWinder()

{

// 일단 길을 다 막아버리는 작업

for (int y = 0; y < Size; y++)

{

for (int x = 0; x < Size; x++)

if (x % 2 == 0 || y % 2 == 0)

Tile[y, x] = TileType.Wall;

else

Tile[y, x] = TileType.Empty;

}

이 부분에서 무한루프를 돌고 있습니다

아래는 전체 코드입니다.
using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

namespace C__알고리즘_6_플레이어_이동

{

class Board

{

const char CIRCLE = '\u25cf';

public TileType[,] Tile { get; private set; } //배열

public int Size { get; private set; }

public int DestY { get; private set; }

public int DestX { get; private set; }

Player _player;

public enum TileType

{

Empty,

Wall,

}

public void Initialize(int size, Player player)

{

if (size % 2 == 0)

return;

_player = player;

Tile = new TileType[size, size];

Size = size;

DestY = Size - 2;

DestX = Size - 2;

GenerateBySideWinder();

}

public void GenerateBySideWinder()

{

// 일단 길을 다 막아버리는 작업

for (int y = 0; y < Size; y++)

{

for (int x = 0; x < Size; x++)

if (x % 2 == 0 || y % 2 == 0)

Tile[y, x] = TileType.Wall;

else

Tile[y, x] = TileType.Empty;

}

// 랜덤으로 우측 혹은 아래로 길을 뚫는 작업

// Binary Tree Algorithm

Random rand = new Random();

for (int y = 0; y < Size; y++)

{

int count = 1;

for (int x = 0; x < Size; x++)

{

if (x % 2 == 0 || y % 2 == 0)

continue;

if (y == Size - 2 && x == Size - 2)

continue;

if (y == Size - 2)

{

Tile[y, x + 1] = TileType.Empty;

continue;

}

if (x == Size - 2)

{

Tile[y + 1, x] = TileType.Empty;

continue;

}

if (rand.Next(0, 2) == 0)

{

Tile[y, x + 1] = TileType.Empty;

count++;

}

else

{

int ramdomIndex = rand.Next(0, count);

Tile[y + 1, x - ramdomIndex * 2] = TileType.Empty;

count = 1;

}

}

}

}

public void Render()

{

ConsoleColor prevColor = Console.ForegroundColor;

for (int y = 0; y < Size; y++)

{

for (int x = 0; x < Size; x++)

{

// 플레이어 좌표를 갖고 와서, 그 좌표랑 현재 y, x가 일치하면 플레이어 전용 색상으로 표시

if (y == player.PosY && x == player.PosX)

Console.ForegroundColor = ConsoleColor.Blue;

else if(y == DestY && x == DestX)

Console.ForegroundColor = ConsoleColor.Yellow;

else

Console.ForegroundColor = GetTileColor(Tile[y, x]);

Console.Write(CIRCLE);

}

Console.WriteLine();

}

Console.ForegroundColor = prevColor;

}

ConsoleColor GetTileColor(TileType type)

{

switch (type)

{

case TileType.Empty:

return ConsoleColor.Green;

case TileType.Wall:

return ConsoleColor.Red;

default:

return ConsoleColor.Green;

}

}

}

}

C#

Answer 1

0

communityai8509

안녕하세요, 인프런 AI 인턴입니다. 이강토님.

무한루프 문제로 어려움을 겪고 계신 것 같네요. 프로그램을 디버깅 중이라는 것은 코드의 동작을 추적하고 있다는 뜻이겠네요. 여러분의 상황을 이해하기 위해 코드를 살펴보았습니다.

현재 코드의 주요 문제는 무한루프와 관련하여 보이지는 않지만, 전반적인 코드에서 오류가 발생할 가능성이 존재하기 때문에 몇 가지 확인하고 수정해볼 부분을 안내드립니다.

  1. F11 디버깅: 코드의 디버깅을 위해 Visual Studio에서 F11을 사용하면 코드를 한 줄씩 실행하며 상태를 확인할 수 있습니다. for 루프가 계속 반복되는 부분에서 값을 직접 확인하여 루프의 종료 조건이 맞는지 확인하세요.

  2. Random Number Generation: 코드를 확인해보니 rand.Next를 통해 랜덤한 값을 생성하고 있네요. 이때, rand.Next(0, 2)는 0 또는 1을 생성하는데, 이 조건들이 잘 설정되어 있는지, 특히 ramdomIndex가 제대로 작동하는지 확인하세요.

  3. Table 초기화 부분: Tile[y, x] 배열이 제대로 설정되었는지 확인해 보세요. 특히 Tile 배열이 작동할 때, 무한루프 상태에 빠지지 않도록 배열을 잘 초기화했는지 확인하는 것이 필요합니다.

  4. 조건문들: ifelse if 조건이 올바르게 작동하는지 확인해야 합니다. 특히 (y == Size - 2 && x == Size - 2) 조건에서 실행이 올바르게 끝나는지 디버깅 출력에서 관찰해 보세요.

  5. 이전 유사한 질문 사례:

마지막으로, 이러한 무한루프 및 오류 상황에서 주요한 점은 조건식과 배열의 크기 및 초기화 과정이 명확하게 정의되어 있는지를 체크하는 것입니다. 제안드린 링크와 함께, 단계별로 문제를 풀어나가시면 좋겠습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

게임개발에서 주로 어느부분에 알고리즘들이 쓰이는지 궁금합니다

0

172

2

글꼴 바꿔도 자간이 좁아 찌그러져보이시는 분들

0

88

1

NullReferenceException 예외) 같은 실수하시는분 계실까봐 남겨요

0

66

1

parent를 Pos타입으로 만든 이유

0

74

1

콘솔창에 격자가 안나옴 미로 생성 X

0

133

1

BFS 질문

0

143

2

격자 무한 출력

0

167

2

A* 의 PriorityQueue 관련 질문입니다

0

155

2

vscode에서 원그리기

0

180

1

환결설정 강의 원 그리기

0

122

1

15-17분

0

87

1

3:16초에 근데 이렇게 해가지고 부분에 "{}"를 만들어서 자식 node들을 생성하던데 왜 중괄호로 감싸게 만드는 건가요?

0

141

2

동적 배열 관련 질문입니다!

0

209

1

Big-o 표기법에서 시간 복잡도

0

167

1

7:40에서 언급하신 색상이 날아가는 문제 이해를 못하겠습니다

0

151

1

트리구현연습 강의 질문있어요

0

143

1

창은 뜨는데 맵이 나타나지 않아요.

0

175

1

Ctrl F5 하면 나오는 창은 어디서 설정할까요??

0

271

1

void CalcPathFromParent(Pos[,] parent)에 대해서

0

202

2

NullReferenceException예외가 발생했을때 어떻게 해야하나요?

0

229

1

[해결] 환경설정 강의에서 원이 이상하게 그려지는 문제

3

311

2

오른손 법칙에서 플레이어 점이 안 움직입니다

0

245

2

맵 만들기 오류

0

179

1

맵 만들기 부분 오류

0

236

1