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번이나...ㅠㅠ
여러분들도~ 너무 핸드폰 게임만 하지말고..가끔 친구랑 노트들고 야구게임이나 빙고게임도 해보세요 !! ㅋ_ㅋ
'C/C++ > 예제' 카테고리의 다른 글
[C 예제] return 의 의미와 간단한 예제를 통한 쓰임새 확인 (7) | 2014.11.13 |
---|---|
[C 예제] 포인터를 이용해 두개의 변수 값을 서로 바꾸기 ! ( SWAP ) (0) | 2014.06.26 |
[C 예제] switch 문으로 계산기 만들기. (0) | 2014.06.25 |
[C 예제] 파일 입출력을 이용해 연산결과 저장하기. (0) | 2014.06.24 |
[C 예제] 대소문자 변환 하기. (0) | 2014.06.23 |