-
다시한번 개발자도전! 5일차 (이중반복문 , 콘솔 좌표이동)다시한번 개발자도전! 2026. 1. 8. 17:11
오늘은 아침부터 치과를 가야 해서 오전 수업은 들을 수 없었다ㅜㅜ
오후부터 참여하였는데 다행히도 진도가 많이 나가지 않아 수업을 잘 들을 수 있었다
다음 주에도 치과를 가야 하는데 수업을 못 들으니 너무 걱정이다😿😿
못 듣는 만큼 더 열심히 해보자! 아자자!

🎮 C# 기초: 반복문 심화 & 흐름 제어
1. 흐름 제어 키워드 (Continue, Break, Goto)
루프의 흐름을 내 마음대로 조절하는 삼대장임.
키워드 역할 continue 이번 턴만 건너뛰고 다음 반복으로 넘어감 break 반복문을 즉시 종료하고 탈출함 goto 지정한 레이블(지점)로 강제 점프함 static void Main(string[] args) { for (int i = 0; i < 5; i++) { if (i== 1) // i가 1이 될 시 현재 반복문을 종료 하고 다음 반복문을 실행 continue; else if (i== 3) // i가 3이 될 시 바로 반복문이 종료 break; Console.WriteLine(i); //0,2가 출력 됨 } }💡goto 사용법!
더보기static void Main(string[] args) { for (int i = 1; i < 5; i++) { for (int j = 1; j < 5; j++) { if (i == 3 && j == 2) goto EndLoop; // i가 3이고 j가 2일 때 모든 루프 즉시 종료 Console.Write($"{i} x {j} = {i * j}\t"); } Console.WriteLine(); } EndLoop: // 여기로 바로 날아옴 Console.WriteLine("\n루프를 완전히 빠져나옴."); }⚠️ Goto 사용 주의점
- 특징: 원하는 지점으로 바로 날아갈 수 있음.
- 정말 복잡한 이중 루프 탈출이나 공통 에러 처리 아니면 가급적 안 쓰는 게 좋음.
2. 이중 반복문 (Nested Loop)
- 반복문 안에 반복문이 들어간 형태. 게임의 **2D 좌표계(x, y)**나 맵 생성에 필수.
- 안쪽 루프가 '완전히' 다 돌아야 바깥쪽 루프가 비로소 한 번 바뀜.
static void Main(string[] args) { for (int y = 0; y < 3; y++) { for (int x = 0; x < 3; x++) //안쪽 반복문이 끝나면 바깥쪽 반복문이 돌아감 { Console.Write($"({x},{y}) "); } Console.WriteLine(); } }🔥실습예제🔥
더보기- 별찍기
- ⭐
- ⭐ ⭐
- ⭐ ⭐ ⭐
- ⭐ ⭐ ⭐ ⭐
- ⭐ ⭐ ⭐ ⭐ ⭐
static void Main(string[] args) { for(int i = 0; i < 5; i++) { for(int j = 0; j < 5; j++) { if (j <= i) Console.Write("*"); } Console.WriteLine(); } }- 미니게임 맵
- 🏠🟩🟩🟩
- 🟩 🟩 🟩 🟩
- 🟩 🟩 🟩 🟩
- 🟩 🟩 🟩⭐
static void Main(string[] args) { for (int y = 0; y < 4; y++) { for (int x = 0; x < 4; x++) { if (x == 0 && y == 0) Console.Write("🏠 "); // 시작점 else if (x == 3 && y == 3) Console.Write("🎯 "); // 목표 else Console.Write("🟩 "); // 길 } Console.WriteLine(); } }
3. 콘솔 좌표 이동 (while & switch)
- Console.CursorVisible : 콘솔창에서 커서를 보이거나 감출 수 있음.
- Console.Clear() : 콘솔창에 기록된 모든 메시지를 지움.
- Console.SetCursorPosition(); 글자가 출력될 **'커서의 위치'**를 지정.
- ConsoleKeyInfo: 사용자가 키를 눌렀을 때, 어떤키 인지 **정보를 저장해 두는 변수 타입(자료형)**임.
- Console.ReadKey(true) : 프로그램이 실행되다가 이 줄을 만나면 멈춤. 그리고 사용자가 키를 누르는 순간, 그 정보를 가지고 다음 줄로 넘어감. / true로 설정 시 키를 눌러도 화면에 표시되지 않음.
static void Main(string[] args) { int x = 10, y = 10; ConsoleKeyInfo keyInfo; //키관련된 정보 Console.CursorVisible = false; while (true) //유니티에 update 기능을 해줌 { Console.Clear(); //화면지우기 Console.SetCursorPosition(x, y); //좌표 Console.Write("●"); //현재 위치 출력 keyInfo = Console.ReadKey(true); //키 입력 받기 (화면 출력 x) //방향키 입력에 따른 좌표 변경 switch (keyInfo.Key) { case ConsoleKey.UpArrow: if (y > 0) y--; break; case ConsoleKey.DownArrow: if (y < Console.WindowHeight - 1) y++; break; case ConsoleKey.LeftArrow: if (x > 0) x--; break; case ConsoleKey.RightArrow: if (x < Console.WindowWidth - 1) x++; break; case ConsoleKey.Spacebar: Console.Write("미사일키"); break; case ConsoleKey.Escape: break; //ESC키로 탈출 } }🔥실습해보기🔥
더보기리스트를 이용하여 이전 좌표를 저장 후 따라가게 해 보았다!

static void Main(string[] args) { Console.OutputEncoding = Encoding.UTF8; Console.CursorVisible = false; Random rand = new Random(); int width = Console.WindowWidth; int height = Console.WindowHeight; int targetX = rand.Next(0, width); int targetY = rand.Next(0, height); List<(int x, int y)> snakeBody = new List<(int x, int y)> { (10, 10) }; Console.SetCursorPosition(targetX, targetY); Console.Write("☆"); while (true) { Console.SetCursorPosition(snakeBody[0].x, snakeBody[0].y); Console.Write("★"); ConsoleKeyInfo keyInfo = Console.ReadKey(true); int nextX = snakeBody[0].x; int nextY = snakeBody[0].y; switch (keyInfo.Key) { case ConsoleKey.UpArrow: nextY--; break; case ConsoleKey.DownArrow: nextY++; break; case ConsoleKey.LeftArrow: nextX--; break; case ConsoleKey.RightArrow: nextX++; break; case ConsoleKey.Escape: return; } snakeBody.Insert(0, (nextX, nextY)); if (nextX == targetX && nextY == targetY) { targetX = rand.Next(0, width); targetY = rand.Next(0, height); Console.SetCursorPosition(targetX, targetY); Console.Write("☆"); } else { var tail = snakeBody[snakeBody.Count - 1]; Console.SetCursorPosition(tail.x, tail.y); Console.Write(" "); snakeBody.RemoveAt(snakeBody.Count - 1); } } }이제 좀 비주얼적인 게 보이는 것 같다!
앞으로도 열심히 해서 바루 취업 가보자고!

'다시한번 개발자도전!' 카테고리의 다른 글
다시한번 개발자도전! 7일차 (함수,재귀함수,메모리구조,ref,out) (0) 2026.01.12 다시한번 개발자도전! 6일차 (배열,컬렉션) (0) 2026.01.09 다시한번 개발자도전! 4일차(삼항연산자,연산자 우선순위,제어문,반복문) (0) 2026.01.07 다시한번 개발자도전! 3일차 (외부입력받기,연산자,형변환) (0) 2026.01.06 다시한번 개발자도전! 2일 (깃허브,데이터 형식) (0) 2026.01.05