본문 바로가기
밑바닥부터 시작하는 게임 개발/C++

[밑바닥 C++] 7. 가위바위보도 삼세판! 반복문

by KK1 2022. 2. 5.

반복!

가위바위보는 역시 삼세판아닐까요? 이전에는 단판으로 끝난 가위바위보를 반복적으로 플레이할 수 있도록 반복문에 대해 알아보겠습니다.

 

반복문

프로그래밍에서 반복문은 말 그대로 코드를 반복적으로 실행하는 기능을 가진 문법입니다.

간단한 기능의 반복, 게임에서 매 프레임의 반복 등 모두 반복문을 활용하여 구현할 수 있습니다.

반복문에는 일정 횟수를 주로 반복할 때 사용하는 for문, 특정 조건인 동안 지속 반복되는 while문이 대표적입니다.

 

for 문

먼저 for문을 통하여 일정 횟수 반복하는 간단한 프로그램부터 작성해보겠습니다.

 

예제) 1부터 5까지 더하는 반복문

int Num = 0;
for (int i = 1; i <= 5; ++i)
{
    Num += i;
}
cout << Num << endl;

for문을 사용하여 1부터 5까지 더하는 코드를 작성하였습니다.

for문 내부에 구문들이 어떤 역할을 하는지 보겠습니다.

for문은 위와 같이 세미콜론(;)을 두고 3가지로 구성합니다.

 1 - for문 내부에서 사용할 변수를 초기화 합니다. (최초 1회 실행)
 2 - for문을 탈출할 조건을 작성합니다. (for문 내부 코드가 끝날 때 마다 체크)
 3 - for문이 끝난 후 증감식을 작성합니다. (2번 체크 후 동작, 주로 1의 값을 증감)

위 내용대로 코드에서 처음에 i를 1로 초기화, 내부에서 Num에 i를 더합니다.

i가 5보다 작거나 같은지 체크합니다. true일 경우 탈출하지 않고 ++i를 수행합니다.

Num에 i값을 더하는 동작을 i가 5보다 작거나 같을 동안 반복합니다. 2가 false일 경우 탈출합니다.

마지막에 1~5까지 더한 Num을 출력합니다.

 

예제) 구구단 출력하기

    int Num = 0;
    for (int i = 2; i <= 9; ++i)
    {
        for (int j = 1; j <= 9; ++j)
        {
            cout << i << " * " << j << " = " << i * j << endl;
        }
        cout << endl;
    }

중첩 for문을 활용하여 구구단 2단부터 9단까지 출력하는 예제입니다.

for문은 위와 같이 중첩해서 사용할 수 있습니다.


while 문

while문을 이용하여 무한하게 값이 증가하는 간단한 예제를 보겠습니다.

 

예제) 끝없이 값이 증가하는 Num

int Num = 0;
while (true)
{
    ++Num;
    cout << Num << endl;
}

위 예제는 프로그램은 끝나지 않고 끝없이 Num 값만 1씩 증가합니다.

while (조건식) 과 같은 형태로 사용할 수 있으며 조건식이 true인 이상 지속해서 동작합니다.

 

do ~ while 문

do에 있는 코드를 먼저 실행while 문의 조건을 검사하는 1번 실행 후 조건을 체크하는 반복문입니다.

예제) 5까지만 증가하는 Num

int Num = 0;
do
{
    ++Num;
    cout << Num << endl;
} while (Num < 5);

Num을 1씩 증가시켜 5보다 작을 동안 동작하는 예제입니다.

위 코드에서는 크게 의미는 없고 사용법 정도만 보여주기 위한 예제이고 실제로 활용할 때에는 while 문 조건을 체크하기 전 한 번이라도 동작하기를 원할 때 사용합니다.


반복문의 친구 continue, break 문

반복문을 사용하다보면 특정 조건일 경우 더이상 코드를 진행하지않고 다음 차례로 넘기거나, 거기서 멈추고 싶을 수 있습니다. 이때 다음 차례로 넘길 수 있는 continue 문, 해당 위치에서 반복문을 종료하는 break 문을 사용합니다.

continue 문

예제) 구구단에서 홀수단은 제외하는 예제

int Num = 0;
for (int i = 2; i <= 9; ++i)
{
    if (i % 2 != 0)
    {
        continue;
    }

    for (int j = 1; j <= 9; ++j)
    {
        cout << i << " * " << j << " = " << i * j << endl;
    }
    cout << endl;
}

기존 구구단 코드에 i를 2로 나눈 결과가 0이 아닌 경우(홀수) continue 문을 통하여 구구단이 출력되지 않도록 하였습니다.

break 문

예제) while 문에서 Num이 5보다 크면 탈출하는 예제

int Num = 0;
while (true)
{
    ++Num;
    if (Num > 5)
    {
        break;
    }
    cout << Num << endl;
}

기존 while 문 예제에서 Num이 5보다 클 경우 break 문을 통하여 탈출하도록 하였습니다. 


반복문을 활용한 가위바위보 삼세판

반복문중 for 문을 활용하여 가위바위보를 삼세판 할 수 있도록 기존의 가위바위보를 개선하겠습니다.

// 1은 가위, 2는 바위, 3은 보 
int Player = 0; // 플레이어는 0 초기화 
int Enemy = 1; // 적은 현재 가위만 낼 줄 안다. 

for (int i = 0; i < 3; ++i) // 반복문을 활용하여 삼세판!
{
    cout << "(1) 가위 (2) 바위 (3) 보" << endl;

    cin >> Player;

    switch (Player)
    {
    case 1: // 가위
        cout << "무승부!!!" << endl;
        break;
    case 2: // 바위
        cout << "플레이어 승리!!!" << endl;
        break;
    case 3: // 보
        cout << "플레이어 패배ㅠㅠ" << endl;
        break;
    default:
        cout << "잘못 된 입력을 하였습니다" << endl;
        break;
    }
}

가위바위보가 진행되는 코드에 for 문을 3번 동작하도록 코드 감쌌습니다. 

이제 가위바위보는 삼세판 진행됩니다. 


혼자 해보기

for 문을 활용하여 아래와 같이 별모양을 출력하세요. (if 문과 같은 분기문은 사용하지 않습니다.)

1)

*
**
***
****
*****

2)

    *
   **
  ***
 ****
*****

3)

*****
****
***
**
*

4)

*****
 ****
  ***
   **
    *

이전편

[밑바닥부터 시작하는 게임 개발/C++] - [밑바닥 C++] 6. 여러 흐름의 분기문 switch, 어디로든 튀는 goto

 

다음편

반응형

댓글