ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 주사위 게임 만들기 - 바로 실행해보면서 배우는 C언어
    CS/C언어 2020. 1. 6. 21:25

    C언어 표준 라이브러리 파일

    studio.h : printf, scanf 등 입출력 함수

    stdlib.h : srand, rand 함수

    time.h : time 함수

     

     

    난수 만들기

    srand 함수 : 호출할 때 전달받는 인자를 기반으로 해서 난수를 초기화 시킴

    rand 함수 : srand로 생성된 값을 바탕으로 난수를 생성함

    time 함수 : 인자값으로 NULL을 넘기면 1970년 1월 1일 0시(UTC 타임존)이후부터 인자값까지 현재까지 흐른 초 수를 리턴한다.

     

    난수 생성 코드

    #include <studio.h>
    #include <stdlib.h>
    #include <time.h>
    
    int main() {
    	srand(time(NULL)); //시간을 기준으로 난수 초기화
    	int random = rand(); //rand함수 호출해 난수 생성, 변수에 담기
    	printf("%d", random); //난수 출력
    	
    	return 0;
    }

     

    rand() % n : 0~n-1 범위의 난수 생성

     

     

    주사위 게임 만들어보기

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    void checkScore(int mScore, int cScore) {
      printf("\n-------------------------");
      printf("\n현재 각 플레이어의 점수입니다.");
      printf("\n플레이어의 점수 : %d", mScore);
      printf("\n컴퓨터의 점수 : %d", cScore);
      printf("\n-------------------------");
    }
    
    void showEnding(int mScore, int cScore) {
    	if(cScore > mScore) {
    		printf("\n컴퓨터의 승리입니다.");
    	} else if(cScore == mScore) {
    		printf("\n무승부입니다.");
    	} else {
    		printf("\n플레이어의 승리입니다.");
    	}
    }
    
    int main() {
      int diceCount = 0;
      int diceEnd = 3;
      int mScore = 0;
      int cScore = 0;
      int selection;
      
      printf("게임 설명 : 주사위를 총 3 번 굴려 합친 주사위 눈의 합이 더 높은 사람이 이기게 됩니다.");
      printf("\n주사위 게임을 시작하겠습니다.");
      printf("\n------------------------");
      
      while(diceCount < diceEnd || selection == 0) {
        printf("\n주사위를 굴려주세요. 1번 주사위 굴리기 2번 현재 눈의 합 확인하기 : ");
        scanf("%d", &selection);
        
        if(selection == 1) {
          srand(time(NULL));
    			mScore += (rand() % 6)+1;
    			cScore += (rand() % 6)+1;
    			diceCount++;
        } else if(selection == 2) {
          checkScore(mScore, cScore);
        } else {
          printf("\n잘못 입력하셨습니다. 다시 입력해주세요.");
    			selection = 0;
        }
      }
    	
    	checkScore(mScore, cScore);
    	showEnding(mScore, cScore);
    	
      return 0;
    }

     

    1. 필요한 변수 선언하고 초기화하기

    플레이어의 점수를 담을 mScore 변수, 컴퓨터의 점수를 담을 cScore 변수는 0으로 초기화한다.

    주사위를 굴린 횟수를 저장할 diceCount 변수도 0에서 시작한다.

    주사위를 세 번 굴리면 프로그램이 끝나야 하므로 diceEnd 변수의 값은 3으로 초기화했다.

    (diceCount == diceEnd가 되면 프로그램을 종료)

    사용자의 선택(1, 2, 혹은 그 외의 입력)을 저장할 selection 변수도 선언했다.

     

    2. 프로그램 실행 과정

    1) 안내문 출력

    main 함수가 시작되면(프로그램이 시작되면),

    먼저 게임안내문을 출력한다.

     

    2) while 반복문 실행

    그런 다음 diceCount의 값이 diceEnd보다 작고, selection의 값이 0이라면 while 반복문을 실행한다.

    diceCount 변수는 0으로, diceEnd 변수는 3으로 초기화한 상태이므로

    첫번째 조건은 만족한다.

    selection 변수는 선언만 하고 초기화는 하지 않았으므로 0(null 값)이 담겨있다. 따라서 두번째 조건도 만족하여

    while 반복문이 실행된다.

     

    3) 사용자로부터 값 입력받아 변수에 담기

    while 반복문이 실행되면, 먼저 사용자가 1번과 2번 둘 중 하나의 값을 입력하도록 한다.

    사용자가 입력한 값을 selection 변수에 담는다.

     

    4) if문(조건문)으로 사용자가 입력한 값 확인

    사용자가 입력한 값을 확인하여

    1을 입력했다면(selection == 1), 1과 6 사이의 난수를 두 개 생성해

    각각 cScore 변수, mScore 변수 값에 더한다.

    주사위를 한 번 굴린 것이므로 diceCount는 1 증가시켜준다.

    2를 입력했다면(selection == 2), checkScore 함수를 실행현재 mScore와 cScore의 값을 출력한다.

    1이나 2가 아닌 다른 값을 입력했다면

    "잘못 입력하셨습니다. 다시 입력해주세요."를 출력하고

    selection에는 0을 담아 while문이 다시 실행되도록 한다.

     

    5) 주사위를 다 굴린 후 결과 보여주기

    주사위 세 번을 다 굴리면(diceCount == diceEnd가 되면) 더 이상 while문의 조건을 만족하지 못하므로 while문 밖으로 빠져나와

    checkScore 함수와 showEnding 함수를 실행한다.

    checkScore 함수로 현재 각 플레이어의 총점을 보여주고,

    showEnding 함수로 누구의 승리인지(혹은 무승부인지) 알려준다.

    댓글

Designed by Tistory.