[C++ 언어-기초실습-14] 숫자 맞추기 게임

in #kr-dev2 years ago (edited)

[C++ 언어-기초실습-14] 숫자 맞추기 게임



오늘의 실습 주제는 1~100사이 무작위 난수 하나를 맞추는 게임입니다. 숫자를 하나 입력하여 UP & DOWN 방식으로 정답에 가까워지게 하여 정답을 맞추는 방식으로 코딩을 할까 합니다.

1. 무작위 난수 만들기


#include <stdlib.h> //srand()
#include <time.h> 

int m_rand;
srand((unsigned)time(NULL));
m_rand=rand()%100+1;

기본 베이스 코딩은 srand()함수로 난수 초기화를 수행하고 rand()함수로 무자위 난수를 만들어 냅니다. 참고로 100으로 나눈 나머지로 해서 0~99까지의 범위의 난수를 만들어 낼 수 있습니다. 게임에서는 1~100까지의 숫자이기 때문에 +1을 위 식에서는 더해 줬습니다.

이제 이 난수를 맞추는 게임을 진행해야겠죠.

2. 숫자 맞추기 코딩


while(1){
    cout<<"숫자를 입력하시오? ";
    cin>>m_num;
        
    if(m_num==m_rand || m_num==0) break;                    
    else if(m_num>m_rand) cout<<m_num<<"보다 작습니다."<<endl; 
    else cout<<m_num<<"보다 큽니다."<<endl; 
    cnt++;      
}

while 문을 이용합니다. while(1)은 무한 반복문으로 이 while문을 빠져 나오기 위햇는 break 명령문을 사용하면 됩니다. 게임에서는 입력수 (m_num)값이 난수(m_rand)와 비교하여 일치하면 정답이니깐 break문으로 빠져나옵니다. 추가로 m_num 으로 0이 입력 되면 더이상 숫자 맞추는 것을 포기한다는 의미로 게임 중간에 빠져 나올 수도 있게 설정했네요. while문을 빠져 나오면 if문으로 m_num이 0이면 게임포기, 0이 아니면 정답 이렇게 표현하면 게임 마무리가 됩니다.

입력수가 정답이 아니면 UP & DOWN를 수행해야 합니다. m_num이 m_rand수보다 크면 정답은 입력수보다 더 작은 수라고 메시지를 출력하고 m_rand수보다 작으면 정답은 입력수바도 더 큰 수라고 메시지를 출력 하면 됩니다.

if문을 정리를 하면,

  • 정답입니까 아니면 포기할겁니까
  • 정답보다 큽니까
  • 정답보다 작읍니까

이걸 표현한거라고 생각 하시면 됩니다. 이제 실행해서 결과가 정상적으로 나온지 봅시다.

3. 코딩


[전체소스]

#include <iostream>
#include <stdlib.h> //srand()
#include <time.h> 

using namespace std;

int main(int argc, char** argv) {
    int m_num, m_rand;
    int cnt=0;;
    srand((unsigned)time(NULL));
    
    m_rand=rand()%100+1;
    
    while(1){
        cout<<"숫자를 입력하시오? ";
        cin>>m_num;
        
        if(m_num==m_rand || m_num==0) break;                    
        else if(m_num>m_rand) cout<<m_num<<"보다 작습니다."<<endl; 
        else cout<<m_num<<"보다 큽니다."<<endl; 
        cnt++;      
    }
    if(m_num==0) cout<<"포기하셨군요. 다음 기회에"<<endl;
    else cout<<cnt<<"번째만에 정답을 맞추셨습니다."<<endl; 
    
    return 0;
}

[결과]
a1.jpg

마무리


숫자 맞추기 게임 코딩이 몇줄 안되네요. while문과 if문의 흐름을 이해하는 실습입니다.


Sponsored ( Powered by dclick )

dclick-imagead

Sort:  

Thank you for your continued support towards JJM. For each 1000 JJM you are holding, you can get an additional 1% of upvote. 10,000JJM would give you a 11% daily voting from the 700K SP virus707 account.

Coin Marketplace

STEEM 0.49
TRX 0.09
JST 0.062
BTC 48893.44
ETH 4066.28
BNB 564.60
SBD 6.12