본문 바로가기
Development/멋쟁이사자처럼 게임개발 부트캠프

[멋쟁이사자처럼 Unity 게임 부트캠프 4기] 4일차 (2) - 반복문

by jjeondeuk1008 2025. 3. 5.

 

[ 목차 ]

 


     

    오늘은 반복문!!

     

    뉴비에겐 조건문과 반복문부터 이제 머리가 점점 띵하기 시작한다..

    알 것 같으면서도 모르겠고,

     

    문제 보고 하려면 손이 멈춰버린다..

     

     

    하지만 아직 기초 단계이다 . . .. 

     

    컴퓨터랑 대화하기 정말 어렵다😢

     

     

     


     

    1. for 문

     

     

    반복문이란? 무엇일까

     

    조건에 벗어날때까지 반복! 한다.

     

    라는 의미이다.

     

    여기에서 '조건'이 붙는다는 것은 조건식과도 연관이 많다는 것이다.

    그러니 알아야겠지? 조건문?

     

    조건문을 잘 이해해야 반복문도 이해가 쉽게 다가온다.

    (조건문부터 막혔던 사람 나야 나..)

     

     

     

     

    for문은

     

    for (초기화 / 조건문 / 증감식) 이렇게 쓴다.

     

    막상 이렇게 보니 못알아보겠죠?

     

    코드로 보면

    for (int i = 1; i <= 5; i++){}

     

     

    for (변수 변수명 = 1; 변수명 <= 5; 변수명++) {}

               초기화;              조건문;       증감식;

     

     

    이제 정수형 변수가 1일 때, (초기화)

    변수는 5보다 작거나 같을 때이니까 조건 충족해 출력! (조건문)

    조건에 만족하는 출력 후에 정수형 변수가 1씩 더해짐 (증감식)

     

     

    그렇게 조건문에 부합하지 않을 때까지 이 과정을 반복하는 것이다.

    //반복문
    //초기화 / 조건문 / 증감식
    for (int i = 1; i <= 5; i++) //여긴 선위 후위 없음, 정수형 변수를 for 안에서 정의하고, i가 5보다 작거나 같을 때 끝, i 1씩 증가한다
    {
        Console.WriteLine("숫자: " + i);
    }
    

     

    추가적으로 알아야 할 것은 증감식에서 선위 후위를 배웠던 기억이 있다.

    for 문에서는 선위 후위의 개념이 없다. 상관 없다는 것이다.

     

     

     

     

     

    이러한 for문을 이용해서 다양한 실습을 할 수 있다.

     

     

     

    첫 번째로 무한반복을 만들 수 있다.

     

    초기화 조건문 증감식 작업이 모두 뺀 for 문으로

    별도의 종료 조건이 없어 무한 반복이 되는 것이다.

    //응용 : 무한 반복
    for (; ; )
    {
        Console.WriteLine("중요한 건 꺾이지 않는 마음");
    }
    

     

     

     

     

    두 번째로 0부터 9까지 출력하기이다.

     

    조건을 10보다 작게 하고 초기화와 증감식을 작성하면 0부터 9까지 출력이 가능하다.

    //0부터 9까지 출력하기
    for (int i = 0; i < 10; i++)
    {
        Console.WriteLine(i);
    }
    

     

     

     

     

     

    세 번째로 1부터 10까지의 합을 구하기이다.

     

    우선 더할 값을 출력할 변수를 선언한 뒤에

     

    for문을 통해 1부터이니

    int i = 1;          →  초기화

     

    10까지이니

    i <= 10;          →  조건식

     

    그리고 i ++ 증감식을 넣는다.

     

     

    반복문 안에는

    sum += i   (sum = sum + 1)

    연산자를 넣어 완성하고 출력 메서드를 작성하면 된다.

     

    그렇게 된 최종 코드이다.

    //1부터 10까지의 합 구하기
    int sum = 0;
    for (int i = 1; i <= 10; i++)
    {
        sum += i; // sum = sum + 1;
    
        //중간 값이 궁금할때
        Console.WriteLine($"sum: {sum}, i: {i}");
    }
    
    Console.WriteLine("1부터 10까지의 합: " + sum);
    

     

     

     


     

    2. while 문

     

     

    반복문 중에 하나인 while문.

     

     

    for문과 무엇이 다르냐? 

     

    for문은 괄호 안에 (초기화/조건문/증감식)을 넣지만

    while은 따로다.

     

    변수에서 초기화를 하고

    while 문 괄호에 조건식만 넣는다.

    while 문 안에 증감식을 넣는 형식이다.

     

    추가적으로 반복문 안에 조건문을 넣어 다른 조건을 수행할 수도 있다.

    int count = 1; //초기화
    while (count <= 5) //조건식
    {
        Console.WriteLine("Count: " + count);
        count++; //증가, 감소
    
        if (count == 3) //중간에 3일때 종료하고 싶음
        {
            Console.WriteLine("3일때 반복문 탈출");
            break;
        }
    }
    
    Console.WriteLine("Count: " + count);
    

     

     

     

    하지만 while 문 괄호에 조건식을 안 넣고

    중괄호 안에 조건문을 넣는 경우도 있다.

     

    while 문을 실행하고 if 조건문을 넣어 조건식을 정리하는 방법도 있다.

    int counts = 0;
    while (true)
    {
        if (counts == 5) break;
        counts++;
        Console.WriteLine(counts);
    }

     

     

    정답은 없으니 취향껏 쓰면 된다. 본인이 더 편한 쪽으로!

     

     

     

     

     


     

    3. do while 문

     

    while 문은 알겠는데, do?는 왜 붙는 걸까?

    라는 궁금증이 있었다.

     

    do 는 '하다'의 의미를 지니고 있는 만큼

     

     

    실행 한 번 하고!

    while문과 똑같은 진행을 한다.

     

    최소 한 번은 사용하기 위한 do

    다음에 while 문 작성이다.

     

    여기에서의 포인트는 while () 괄호 후에 세미콜론이 없었지만

    do while 문은 넣어야한다.

    int x = 5;
    do
    {
        Console.WriteLine("최소 한 번은 실행됩니다.");
        x--;
    } while (x > 0); //조건이 여기에 붙음, 세미콜론까지 넣어야함 여긴
    

     

    하지만 불편해서 많이 사용하지 않는다는 것이다.. 알아만 두면 좋을듯!

     

     


     

    4. 랜덤

     

     

    랜덤이란? 말 그대로 랜덤이다.

    다양한 숫자들을 랜덤하게 출력하는 형식이다.

     

    랜덤은 어떻게 생성하는 것인가? 하면

    아래 코드로 랜덤 객체를 생성한다.

    Random rand = new Random(); //랜덤 객체를 생성한다.
    

     

     

     

    이 랜덤과 반복문을 이용해 어떻게 쓰이는지 알아보자...

     

    첫 번째로 0이상 10 미만의 랜덤 정수 생성이다.

    for 문 안에

     

        int            randomNumber       =       rand.Next                        (0, 10);

       변수                변수명                Random의 Next 메서드           0부터 9까지

     

     

    여기에서 하나의 의문점이 생겼다.

    왜 0부터 10까지가 아니라 0부터 9까지인 것인가?

     

    10까지 출력하는 것이 아니라 10 전까지만 출력이 되기 때문이다.

     

    정수형이 아니라 실수형으로 출력하고 싶으면

    rand.Next 가 아닌

    rand.NextDouble 메서드로 변경하면 된다.

    for (int i = 0; i < 10; i++) //이 행동을 10번 반복한다의 반복문
    {
        int randomNumber = rand.Next(0, 10); //0, 10 이렇게 하면 0 ~ 9만 나옴, 전까지만 출력
        Console.WriteLine("0이상 10미만의 랜덤 정수: " + randomNumber);
    }
    
    for (int i = 0; i < 10; i++) //float 실수형으로 뽑기
    {
        double randomNumber = rand.NextDouble(); //0, 10 이렇게 하면 0 ~ 9만 나옴, 전까지만 출력
        Console.WriteLine("랜덤 실수: " + randomNumber);
    }
    

     

     

    아래의 코드는 이와 비슷한 5부터 14까지의 랜덤 출력이다.

    int randomInRange = 0;
    for (int i = 0; i < 100; i++)
    {
        randomInRange = rand.Next(5, 15); // 5부터 14까지
        Console.WriteLine("5부터 14까지: " + randomInRange);
    }

     

     

     

    랜덤이 정말 유용한 이유가 많은 게임에서 쓰이는 확률을 랜덤으로 구현할 수 있다.

    확률은 1%에서 100%이기 때문에 랜덤값을 (1, 101)로 잡는다.

     

    for 문 안에 조건문을 가져 확률 조건을 나눈다.

     

    //대장장이 키우기
    //도끼등급 SSS  10%
    //도끼등급 SS   40%
    //도끼등급 S    50%
    
    Random rand = new Random();
    int rnd = 0; //초기값
    for (int i = 0; i < 20; i++)
    {
        rnd = rand.Next(1, 101); //1 ~ 100
    
        if (rnd >= 1 && rnd <= 10) // 1 ~ 10 => 10%
        {
            Console.WriteLine("도끼등급 SSS");
        }
        else if (rnd >= 11 && rnd <= 40) // 11 ~ 40 => 40%
        {
            Console.WriteLine("도끼등급 SS");
        }
        else
        {
            Console.WriteLine("도끼등급 S");
        }
        Thread.Sleep(500); // 0.5초 정도 간격을 두고 뽑아라. 
    }
    

     

     

     

    여기에서 추가 TIP 코드!

     

    출력할때 바로바로 나오는 것에 딜레이를 주기 위한 코드이며,

    500은 0.5초 1000은 1초이다.

    Thread.Sleep(500)

     

     

    나름 유용하니 알아두는 게 좋다!

     

     


     

    6. 점프문 (break, continue, go to)

     

    (1) break 문

     

    break 단어의 의미대로

    반복문을 탈출하고 싶을 때 쓰이는 것이다!

     

     

    조건에 충족해 출력을 하면 조건문을 빠져나온다.

    for (int i = 1; i <= 10; i++)
    {
        if (i == 5)
        {
            break;
        }
    
        Console.WriteLine(i);
    }
    

     

     

     

     

     

    (2) continue 문

     

    이것도 단어의 의미대로

    현재 반복을 건너뛰고 다음 반복으로 넘어간다.

     

    보통 조건에 만족하면 출력하지만, 건너뛰고 다음에 출력한다.

     

    이러한 점을 활용해

    홀수만 출력할 수 있는 코드를 실습하였다.

    for (int i = 1; i <= 10; i++)
    {
        if (i % 2 == 0)
        {
            continue; //컨티뉴면 출력하기 전에 for문으로 돌아간다. 
            //그래서 한 번 넘어가고 출력(if에 적합하지 않아), 넘어가고 출력을 반복한다.
        }
        Console.WriteLine(i); //홀수만 출력
    }

     

     

     

     

    (3) goto 문

     

    2중 반복문을 사용할 때

    이 2중 반복을 한 번에 탈출할 때 쓰는 경우이다.

    int n = 1;
    start:
    if(n <= 5)
    {
        Console.WriteLine(n);
        n++;
    
        goto start; //레이블로 이동 -> start:로 => 코드가 많아지면 복잡해져서 잘 안씀
    }
    

     

    하지만 이것도 goto문을 쓰는 것보다 break를 두 번 쓰는 게 좋다.

     

     

     


     

     

    이제 이번 내용을 전체 통틀어서

    간단한 콘솔로 만드는 텍스트 게임을 실습하였다.

     

    선택지를 입력받아 선택한 것에 대한 컨텐츠를 하는 것이다.

    대부분 if문 조건문을 많이 사용하였다.

    static void Main(string[] args)
    {
        //실습
        Console.WriteLine("대장장이 키우기");
        Console.WriteLine(" ");
        Console.WriteLine("게임을 시작하시겠습니까? (Y/N)");
    
        ConsoleKeyInfo keyInfo = Console.ReadKey(true);
        if (keyInfo.Key == ConsoleKey.Y)
        {
            Console.WriteLine("\\n게임 시작합니다!");
            //게임 시작 로직
            Console.ReadLine();
            Console.Clear();
    
            Random rand = new Random();
            int pmoney = 3000;
            int input;
            int rnd;
    
            Thread.Sleep(500);
    
            //무한반복
            while (true)
            {
                Console.Clear();
                Console.WriteLine("1. 나무캐기   2. 장비뽑기   3. 나가기");
                Console.Write("어떤 것을 하시겠습니까? : ");
                input = int.Parse(Console.ReadLine());
    
                if (input == 1) //나무캐기 화면
                {
                    while (true)
                    {
                        Console.WriteLine("나무캐기 (Enter)");
                        Console.WriteLine("뒤로가기 (x)");
    
                        string str = Console.ReadLine();
    
                        pmoney += 100;
                        Console.WriteLine("소지금: " + pmoney);
                        if (str == "x")
                        {
                            Console.WriteLine("뒤로가기");
                            break;
                        }
                    }
                }
    
                else if (input == 2) //장비뽑기
                {
                    if (pmoney >= 1000) //돈이 있는지 확인 후 뽑기
                    {
                        pmoney -= 1000;
    
                        //20번 뽑기
                        for (int i = 1; i <= 20; i++)
                        {
                            rnd = rand.Next(1, 101);
    
                            if (rnd == 1) //1%
                            {
                                Console.WriteLine("도끼등급 SSS");
                            }
                            else if (rnd >= 2 && rnd <= 6)
                            {
                                Console.WriteLine("도끼등급 SS");
                            }
                            else if (rnd >= 7 && rnd <= 17)
                            {
                                Console.WriteLine("도끼등급 S");
                            }
                            else if (rnd >= 18 && rnd <= 38)
                            {
                                Console.WriteLine("도끼등급 A");
                            }
                            else if (rnd >= 39 && rnd <= 69)
                            {
                                Console.WriteLine("도끼등급 B");
                            }
                            else
                            {
                                Console.WriteLine("도끼등급 C");
                            }
                            Thread.Sleep(500); //0.5초 간격으로 뽑혀라
                        }
                    }
                    else
                    {
                        Console.WriteLine("돈이 부족합니다. \\n");
                        Thread.Sleep(2000); //2초
                    }
                }
                else if (input == 3)
                {
                    Console.WriteLine("나갑니다.");
                    Environment.Exit(0);
                    //break;
                }
            }
    
        }
        else if (keyInfo.Key == ConsoleKey.N)
        {
            Console.WriteLine("\\n게임 종료합니다.");
            //게임 종료 로직
        }
        else
        {
            Console.WriteLine("\\n잘못된 입력입니다. Y 또는 N을 입력하세요!");
        }
    

     

     

     

     


     

     

    오늘은 자주 사용하는 반복문에 대해서 알아보았다..

     

     

    개념을 아는 것은 정말 정말!! 중요하지만

    마지막 실습처럼 무언가를 만들어보는 실습이

    꽤나 기억에 잘 남고 도움이 된다.

     

    문제 풀거나 만들어보거나.. 암튼 많이 하는 것이 체고!

     

    이렇게 블로그 쓰면서도 내가 헷갈렸던 부분이나

    몰랐던 의미나 알게 되면서 글을 쓰니

    뿌듯하면서도 다시 공부하는

    기회가 되니

     

    블로그 추천합니다..^.^

    😊😊

     

     

    반복의 짤과 함께 마무리합니다..


    목차