본문 바로가기

C/C++/예제

[C 예제] 야구 게임 만들기 ( BaseBall )

반응형

C 예제.

RAND 함수와 반복문을 이용한 야구 게임 만들기 !


제가 중학생일때 였나...

그당시엔 서로의 노트를 꺼내두고 빙고를 한다거나..

지금 쓰고 있는 베이스볼 게임을 많이 했습니다.


혹시나 어떤 게임인지 모르는 분을 위한 간략한 설명..


플레이어 A 와 B 가 서로 1~9 까지의 숫자중 중복되지 않는 수를 3개 골라 상대방이 보이지 않게 뒷편에 적어둡니다.

A 와 B 모두 숫자를 고르는게 끝나면, 한번씩 번갈아가면서 상대방이 선택했을법한 숫자 3개를 골라서 말해줍니다.

A가 1 2 3 이라고 말을하면 B 는 자신이 고른 번호와 일치하는게 있나 없나 확인하고 그에 대한 결과를 말해주면,

A 는 그 결과를 토대로 추리를해나가며 결국 상대방이 고른 번호를 먼저 부르는 사람이 이기는 게임 입니다.

결과를 말해줄때는 1과 2가 맞다 이런식으로 하면 재미가 없겠죠 ?

그에대한 룰이 있습니다.


스트라이크.

상대방이 부른 숫자가 내가 고른 숫자와 일치하고 자리까지 동일 할 경우.

( EX> 상대방 : 1 2 3

            나    : 1 4 5 )

볼.

상대방이 부른 숫자가 내가 고른 숫자와 일치하지만, 자리는 다를 경우.

( EX> 상대방 : 1 2 3

            나    :  4 5 1 )

아웃.

상대방이 부른 숫자 3개가 내가 고른 번호에 하나도 속해 있지 않을 경우.

( EX> 상대방 : 1 2 3 

            나    :  4 5 6 )


간단하게 예를 들자면

만약 B 가 9 3 4 을 고른 상태에서

A가 "1 2 3" 이라고 말을 하면

B 는 그에대한 결과로 "1 볼" 이라고 대답을 해주는 것 입니다.

A가 1 3 2 라고 했다면 B 는 "1 스트라이크" 라고 말을하고,

A가 9 4 1 이라고 했다면 B 는 "1스트라이크 1볼"이라고 하며

A가 5 6 7 이라고 말을 하면 B 는 아웃 이라고 말을 해주는 것 입니다.


그럼 서로 상대방이 불러준 결과를 토대로 추리를 해나가면

결국!! 상대방의 번호가 무엇인지 알아낼수 있겠죠 ?

( 3 스트라이크 = 승리 )


ㅈㅏ ! 이제 이러한 룰을 바탕으로 컴퓨터가 고른 3개의 숫자를 맞춰나가는 게임을 직접 만들어 봅시다 !!



#include 
#include 
#include 

int main()
{
    int i = 0, j = 0;
    int user[3] = {0,} , computer[3] = {0,};
    int strike = 0, ball = 0;

    srand((unsigned int)time(NULL));    // srand 를 이용해 난수의 발생을 렌덤으로 하게끔 사용.

    for(i = 0; i < 3; i++)  // for 반복문을 이용해 3회 반복.
    {
        computer[i] = (rand() % 9) + 1; // rand 함수를 이용해 숫자가 나오면 그걸 9 로 나눠 줍니다 !!
                                        // 렌덤으로 나온 숫자를 9 로 나눠주면 나머지는 무조건 ! 0 ~ 8 이 나오게 되겠죠 ? 
                                        // 여기서 +1 을 해주면 내가 원하는 1 ~ 9 까지의 수를 얻을수 있습니다.
        for(j = 0; j < i; j++)          // for 반복문을 이용해 j 가 i 보다 작을때 까지만 반복~ 3회 반복하겠다는거죠~?
        {
            if(computer[i] == computer[j]) // computer 에 저장한 난수 3개중 동일한 값이 있을경우 다시 난수를 발생 시키기 위한 조건식!!
            {
                i--;        // 다시 난수를 발생 해야하니 i 값을 -1 해줍시다. ( i가 3이 되면 반복문에서 빠져나오게 되있기 때문에 -1을 해주는겁니다. )
                break;      // 안쪽 for 문 빠져나가기.
            }
        }
    }

    while(strike != 3)      // strike 의 값이 3이 아닐때 까지만 반복.
    {
        printf("3개의 정수를 1~9 사이로 입력하세요. \n");
        //scanf("%d %d %d", &user[0], &user[1], &user[2]);
        for(i = 0; i < 3; i++)      // 정수 3번 반복 입력을 받기 위한 for 문
            scanf("%d", &user[i]);  // 사용자로부터 정수 입력 받고 저장.
       // 한번에 3개의 정수를 모두 받아올수도 있고 반복문을 이용해 하나씩 받아올수도 있습니다.

        strike = 0;
        ball = 0;           
        // strike, ball 의 값 0으로 초기화.

        for(i = 0; i < 3; i++) // 사용자가 고른 숫자와 컴퓨터가 고른 숫자를 대조하기 위한 반복문 시작.
        {
            for(j = 0; j < 3; j++)
            {
                if(user[j] == computer[i])  // user가 입력한 값과 computer이 입력한 값이 같은지 확인.
                {
                    if(i == j)      // 자리 까지 같으면 strike 값 증가.
                        strike++;
                    else
                        ball++;     // 숫자만 동일하고 자리가 다르면 ball 증가.
                }
            }
        }
        if(strike == 0 && ball == 0)
            printf("아웃 입니다 !!\n");
        else
            printf("%d 스트라이크 %d 볼입니다.\n", strike, ball);       // 출력.
    }
    return 0;
}


자~ 이렇게 소스를 작성하고 컴파일하고

이제 컴퓨터와 야구게임을 즐겨볼까요 ?


머리가 잘 돌아가던..어린 시절엔 4~5번 차례돌면 정답이였는데...

7번이나...ㅠㅠ


여러분들도~ 너무 핸드폰 게임만 하지말고..가끔 친구랑 노트들고 야구게임이나 빙고게임도 해보세요 !! ㅋ_ㅋ



반응형