베스킨라빈스 31 게임

2015. 3. 24. 02:14엘키스공간/엘키스코딩공방

728x90
728x90

1. 과제 내용

술자리에서 자주 하는 베스킨라빈스 31 게임을 만든다.

입력 1~3까지 숫자. 

먼저 31이 출력되는 쪽이 패배.(컴퓨터 vs 플레이어)


2. 결과 영상


3. 설계

- 마인드맵

큰 가지

입력 - 선정하기(누가 먼저?), 게임하기(1~3입력, 사용자가 숫자 직접입력?)

출력 - 컴퓨터 숫자 고르기(랜덤함수, 1~3 생성), 결과 화면, 게임방법설명(칠절한 프로그램씨)

AI - 알고리즘, 무적의 강제종료(30에 컴퓨터 차례면 종료)

기타 - 아이스크림 먹고싶다.



- 수도코드

처음 짜보는 수도 코드였어서 부족한 점이 많았다.

정말 정말 필요한 부분만 적은 간략한 작성이다.



- 순서도

순서도는 조금만 더 세부적으로 그리면 좋을 것 같다.



4. 구현 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <windows.h>
#define THIRTYONE 31
#define TRUE 1
 
/*
    작성일 : 2015.03.13
    작성자 : 조민혁
    프로그램 설명:
    베스킨 라빈스 게임을 작성하기.
    input - 플레이어 1~3까지의 숫자
    output - 플레이어의 베스킨 라빈스 숫자, 컴퓨터의 베스킨 라빈스 숫자.
*/
 
enum { MYTRUN = 1, COMTURN = 2};
 
void LetsBaskin(const int baskinNum, int* curTurn); 
void PrintWinner(const int curTurn);
 
void main(void)
{
    // 변수 초기화 : 
    int curTurn = 0;                        // 현재 턴 - enum 열거체로 MYTURN, COMTURN
    int startTurn = 0;                    // 시작 턴 받을 변수
    int selectBaskinNum = 0;        // 사용자가 입력할 수 (1~3)
    int randBaskinNum = 0;        // 컴퓨터가 입력할 수 (1~3) 랜덤으로
    int curNum = 1;                    // 현재 베스킨 수
    int i = 0;                                    // for문 반복자
 
    // 시작 질의. 응답
    printf_s("누가 먼저 시작할까요? 1. 나 2. 컴퓨터 : ");
    // 시작질의에 맞게 시작 1,2 가 아닐 때 예외처리
    while(TRUE)
    {
        scanf_s("%d", &startTurn);
        if(startTurn == MYTRUN || startTurn == COMTURN)
        { 
            curTurn = startTurn;
            break
        }
        puts("다시 입력해주세요.");
    }
 
    // 현재 번호가 31 이상이 되면 루프문 종료
    while (curNum < THIRTYONE + 1)
    {
        if (curTurn == MYTRUN)
        {
            printf_s("몇 개 출력하시겠습니까?(1~3개까지 가능합니다.) : ");
            // 받는 숫자 예외처리 1 <=  input <= 3
            while(TRUE)
            {
                scanf_s("%d", &selectBaskinNum);
 
                if (selectBaskinNum >= 1 && selectBaskinNum <= 3)
                {
                    break;
                }
                printf("범위를 벗어났습니다. 다시 입력해주세요. (1~3) : ");
            }
            puts("\n================= 나의 턴");    
            LetsBaskin(selectBaskinNum, &curNum);
            curTurn = COMTURN;
        }
        else
        {
            // 랜덤함수 생성
            srand( (unsigned int)time( NULL));
            LetsBaskin(rand() %3 +1, &curNum);
            curTurn = MYTRUN;
            puts("================= 컴퓨터 턴\n");
        }
    }
    
    // 승자 출력
    PrintWinner(curTurn);
    system("pause");
}
 
void LetsBaskin(const int baskinNum, int* curNum) // 입력 수, 현재 수를 받아서 출력
{
    int i = 0;
    printf("    숫자 : ");
    for ( i = 0; i < baskinNum; i++)
    {
        // 31이 넘어갈 때 예외처리
        if(*curNum > 31break;
 
        // 배스킨 라빈스 숫자 출력
        printf_s("%d ", (*curNum)++);
    }
    puts("");
}
 
void PrintWinner(const int curTurn) // 마지막에 입력된 턴이 승자
{
    if (curTurn == MYTRUN)
    {
        puts("    당신의 승리입니다.\n");
    }
    else
    {
        puts("    컴퓨터 승리입니다.\n");
    }
}
cs


728x90
반응형

'엘키스공간 > 엘키스코딩공방' 카테고리의 다른 글

큐로 메시지 큐 구현하기  (0) 2015.06.10
큐 구현하기  (0) 2015.06.10
[코딩] 스택 구현하기  (1) 2015.06.10
가위바위보 게임 만들기  (0) 2015.03.24
발전하는 성적표 관리 시스템  (0) 2015.03.24
반복문  (0) 2015.03.23
문자열 함수 구현해보기  (2) 2015.03.10