2. UP & DOWN 게임 만들기
들어가며
안녕하세요. Denoil입니다. 죄송합니다. 조금 오래되었네요. 양해 부탁드립니다. ^^ 제가 집에 잠시 올라온 바람에 놀다가보니 쿨럭;; 그래도 귀차니즘을 이겨내고자 이렇게 쓰게 됬습니다. 이번 2편은 전번 가위바위보 게임보다는 난이고다 낮은 게임이지요. 일명 UP & DOWN 게임~! 술자리에 가면 병뚜껑의 꼬다리 부분 꼬아가지고 돌아가면서 치는 게임 하지 않습니까 ^^ 고거 떼어내면 그사람이 술래가 되어 그 병뚜껑안에 있는 번호를 맞추게 하지요 ^^ 그런 게임입니다. 대신 여기선 10번의 기회밖엔 주어지지 않습니다.
전체소스코드
자 풀소스를 볼까요?
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <time.h>
void main()
{
int Random = 0 ;
int User = 0 ;
int Select = 0 ;
int PlayingCount = 0 ;
srand( time( NULL ) ) ;
printf("이게임은 10번의 기회를 주어 랜덤하게 나온 숫자를 맞추는 게임입니다.\n" );
printf("술 먹을때 소주뚜껑 쳐가지고 끝나면 Up & Down 게임하지 않습니까? ^^\n" );
printf("그 게임이라고 생각하시면 됩니다. ^^\n" ) ;
printf("자 준비가 되셨으면 아무키나 눌러주세요 ^^\n" ) ;
getch() ;
system( "cls" ) ;
do
{
printf("[ Start : 1 ] [ End : 0 ] : " ) ;
scanf("%d", &Select ) ;
} while( Select < 0 || Select > 1 ) ;
Random = rand() % 100 ;
PlayingCount = 10 ;
while( PlayingCount != 0 )
{
printf("0~99까지 숫자를 입력하세요: " ) ;
scanf("%d", &User ) ;
if( User == Random )
{
printf( "딩동댕~\n" ) ;
break ;
}
else if( User > Random ) printf("DOWN\n" ) ;
else if( User < Random ) printf("UP\n" ) ;
}
}
자~여기 까지입니다. 너무나 쉽게 짜여졌죠. C처음 하시는 분도 금방 따라할수 있는 코드입니다. 별로 중요하지 않는 부분은 그냥 넘어가도록 하겠습니다.
자 그럼 코드 설명에 빠져 봅시다~
소스 분석
int Random = 0 ;
int User = 0 ;
int Select = 0 ;
int PlayingCount = 0 ;
- Random -> 우리가 맞출 숫자를 저장할 변수
- User -> 사용자가 입력할 숫자 입니다. 이숫자와 Random숫자와 같다면 Clear
- Select -> 메뉴에서 Select를 관리하는 변수입니다. 1은 Start, 2는 Exit
- PlayingCount -> 입력을 제한하는 변수입니다. 여기서는 10번의 기회를 주었죠.
srand( time( NULL ) ) ;
srand함수의 설명
void srand( usigned seed ) ;
난수 발생기는 예측할 수 없는 수를 발생시키기는 하나 발생되는 수가 일정하다. 그래서 srand로 난수 발생기를 초기화 시킨다. seed가 난수 발생의 초기점이 된다.
http://www.winapi.co.kr 발췌
seed 값을 넣어주어 난수 발생기를 초기화해주어 항상 틀린 난수를 발생하게 합니다.
time 을 넣어주는 이유는 시간은 계속 변하지요? 그럼 난수의 초기값도 항상 바뀌게 되죠.
그럼 난수도 바뀌게 되는것입니다.
do
{
printf("[ Start : 1 ] [ End : 0 ] : " ) ;
scanf("%d", &Select ) ;
}while( Select < 0 || Select > 1 ) ;
시작할 것인지 게임을 종료할것인지 메뉴를 선택하게 되지요. do..while문은 일단 첫문장은 실행되고 while의 비교문에서 참이라면 다시 도는것. 아시죠?^^
Random = rand() % 100 ;
PlayingCount = 10 ;
자.. 이제 우리가 맞출 숫자를 뽑아 와야하죠?
Random = rand() % 100 ; 이것을 보면 0~99까지 구합니다. 어째서냐! 라고 물으시면 1편에서 확인하세요-_-/ PlayingCount 에 10을 넣어준이유는 10번의 기회를 주겠다는 소립니다.
while( PlayingCount != 0 )
{
.
.
.
PlayingCount-- ;
} ;
여기의 코드를 보면 PlayingCount 변수가 0 이 아니라면 계속 루프를 돕니다. 그래서 한번 루프를 돌때마다 PlayingCount 를 – 시켜주었죠? 10번 실행되면 PlayingCount는 0이 되니 while문을 빠져나오게 됩니다. 간단하죠?
printf("0~99까지 숫자를 입력하세요: " ) ;
scanf("%d", &User ) ;
0~99까지의 숫자를 입력합니다.
if( User == Random )
{
printf( "딩동댕~\n" ) ;
break ;
}
else if( User > Random ) printf("DOWN\n" ) ;
else if( User < Random ) printf("UP\n" ) ;
User 변수와 Random 이 같다면 맞췄다는 말이 되므로 딩동댕이라는 글씨를 찍어준 후 while문을 빠져나오기 위해 break;를 해주는것입니다.
그리고 만약 User > Random 이라면 랜덤숫자보다 더 크게 입력한 것이므로 Down이라고 힌트를 주어 다음 입력할때는 현재 입력한 숫자보다 적은 숫자를 입력하도록 하는것입니다.
User < Random 도 위와 마찬가지로 위의 숫자를 입력하도록 힌트를 주는것입니다.
자~코드 설명은 여기까지 입니다. 그다지 어렵지 않죠? ^^ 저번편보다 난이도가 내려간것에 대해 양해를 구합니다. (--)( )(--) 꾸벅~
숙제
자 숙제를 내드리도록 하겠습니다.
유저가 숫자를 입력할때 0~99까지 입력해야 하는데 예외처리를 해두지 않았습니다. 만약 0~99의 범위를 벗어나지 못하게 하는 예외처리를 추가해 보십시오. 숫자를 맞추게 되면 프로그램은 자동으로 종료되게 되어있습니다. 지속적으로 플레이 되게 해보십시오.
두가지 숙제 한번 해보시고 다르게 개조도 해보십시오. ^^ 그럼 Denoil 이만 물러가겠습니다.
저술정보
- 저자: Denoil
- 저술일: 2005년 7월 17일
프로그래밍 실력 Level-Up! | 사장님께 인정받는 개발자 되기 | 프로그래밍계의 소림사
네카라쿠배 개발자도 강추하는 프로그래머 Level-Up 강의! POCU 아카데미가 올해 연봉협상을 책임지겠습니다!