복권게임!!! 로또로또
저는 로또를 한번도 구매해본 적은 없지만 구매한 지인들은 여럿 봐왔습니다.
이들의 공통점은 구입하고 난 뒤, 당첨결과를 기다리는 날들이 행복하다 는 것입니다.
당첨된 뒤에도 행복할 까요??
저는 복권 당첨되는 것은 그렇게 원치는 않네요. 막상 당첨되면 기분이 째지겠지만요 ㅎ-ㅎ
갑자기 몇십억 몇백억 의 돈이 생긴다면, 사람들은 순간의 기쁨과 지속적인 경계와 불안감을 가지게 될것이고
일전의 인생보다 행복하여 지지는 않았다는 결과가 여기저기 많이 떠돌아 다니는 것이 사실입니다.
( 물론 그만한 돈을 운영하는 자산가 혹은 억만장자 같은 사람들은 다른 결과를 가질 가능성은 높죠 )
복권은 저의 삶을 질을 높이는 것이 아니라 오히려 떨어뜨리고 심리적인 불안감을 가지게 할 것이기 때문입니다.
저 또한 그렇게 생각하기에 내린 결론은
" 땀을 흘려 얻은 수확이야말로 값진 돈이고 가치있는 돈 이기 때문입니다. "
" 쉽게 얻은 돈은 쉽게 잃게 될 것입니다. "
인생한방을 위한 로또가 아닌 나눔과 재미를 위한 로또가 되길..
그런 의미에서 프로그램은 재미로 봐주세요 ㅎㅎ
제작할 복권게임의 특징
일반 복권과는 다른점이란... "토요일"에 발표되는 것이 아니라 번호를 발행하는 즉시 발표됩니다.
기능
1. 복권판매점의 자동모드 와 수동모드를 그대로 구현하였습니다.
2. 자주 반복되는 코드는 함수화 하였습니다. ( 예를들어 결과를 출력해주는 기능, 메뉴선택기능 )
3. 자동모드는 원하는 숫자만큼 출력해주고 그때그때 결과를 만들어 줍니다.
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 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 | #include<stdio.h> #include<stdlib.h> // rand함수 사용 #include<time.h> // Random한 rand사용을 위해서 int NumChk(int *ppDest, int len); void RankUI(int rank); // 복권추첨 번호를 생성하는 함수 void SettingFunc(int *pDest,int len){ srand(time(NULL)); // 흘러가는 시간을 토대로 랜덤함수 for (int i = 0; i < len; i++){ *(int*)(pDest+i) = rand() % 45 + 1; if (NumChk(pDest,len) == 1) --i; } } // 중복된 숫자 체크. 1~45 사이 숫자 판별 int NumChk(int *ppDest,int len){ int i = 0; // 중복 숫자 체크 while (ppDest[i] != 0 && i < len){ for (int j = i+1; j < len; j++){ if (ppDest[i] == ppDest[j]) return 1; if (ppDest[j] == 0) return 0; } i++; } // 1~45사이 숫자 i = 0; while (ppDest[i] != 0 && i < len){ if (ppDest[i]>45 || ppDest[i] < 1) return 1; i++; } return 0; } // 사용자가 복권을 입력하는 함수 int UserInputFunc(int *pSource,int len){ for (int i = 0; i < len; i++){ printf("%d번째 숫자:", i + 1); scanf_s("%d", &pSource[i]); fflush(stdin); } if (NumChk(pSource,len) == 1) return 1; // 중복된 숫자일 경우 오류 printf("입력한 로또번호:"); for (int i = 0; i < len; i++){ printf("%02d ", pSource[i]); } puts(" "); return 0; } // 복권의 결과를 출력해주는 함수. // 1등은 숫자 6개 모두 맞는사람 // 2등은 숫자 5개 맞고 보너스까지 맞는사람 // 3등은 숫자 5개 맞는사람 // 4등은 숫자 4개 // 5등은 숫자 3개 void ResultFunc(int *pD, int *pS,int len){ // pD가 복권당첨번호 pS가 사용자 복권번호 int count = 0; for (int i = 0; i < len-1; i++){ // 보너스 번호는 2등만 해당하기에 6개만 판별한다. for (int j = 0; j < len-1; j++){ if (pD[i] == pS[j]) count++; // 숫자가 맞는지 판별 } } if (count == 6) count++; // 1등 숫자일 경우에는 2등과 분별을 시킨다. if (count == 5){ // 보너스볼 확인 if (pD[len - 1] == pS[len - 1]) count++; } /////////////////////////////////////////////// // 화면 출력 puts("\t=============================="); printf("\t@@복권 당첨번호@@\n\t"); for (int i = 0; i < len; i++){ printf("%02d ", pD[i]); if (i == 5) printf("+"); } puts(""); printf("\t당신이 입력한 로또번호\n\t"); for (int i = 0; i < len; i++){ printf("%02d ", pS[i]); if (i == 5) printf("+"); } puts(""); puts("\t==============================\n"); //////////////////////////////////////////////// RankUI(count); //순위 측정해주는 함수 호출 } // 사용자의 복권 번호를 랜덤으로 만들어주는 코드. // RandomFunc-> NumChk()호출 // RandomFunc -> void RandomFunc(int *pD,int *pS,int cnt, int len){ srand(time(NULL)); /////////////// // 번호 생성 for (int j = 0; j < cnt; j++){ // 매개변수 cnt의 값에 따라서 반복결정 for (int i = 0; i < len; i++){ pS[i] = rand() % 45 + 1; if (NumChk(pS, len) == 1) --i; } /////////////// printf("\n\t%02d번째 자동생성 번호:",j+1); for (int z = 0; z < len; z++){ printf("%d ",pS[z]); if (z == 5) printf("+"); } puts(""); ResultFunc(pD, pS, len); puts(""); } } // 사용자가 사용할 메뉴 인터페이스 제공 int UserUI(){ int Select = 0; system("cls"); puts("==== 복권 자동화 프로그램 ===="); printf("[1] 자동 [2] 수동 [3]종료 : "); scanf_s("%d", &Select); return Select; } // 로또 결과를 출력해주는 함수 void RankUI(int rank){ switch (rank){ case 3: printf("\t#####1/45 확률 5등입니다. 축하드립니다. #####\n"); break; case 4: printf("\t####1/733 확률 4등입니다. 축하드립니다. ####\n"); break; case 5: printf("\t###1/35,724 확률의 사나이 3등입니다. 축하드립니다.###\n"); break; case 6: printf("\t##1/1,357,510 확률의 사나이 2등입니다. 축하드립니다.##\n"); break; case 7: printf("\t#1/8,145,060 확률의 사나이 1등입니다.축하드립니다. #\n"); break; default: puts("\tFAIL!!! 돌아가 없어 아무것도."); break; } } // 계속하기 기능 int GoFunc(){ int YN = 0; printf("계속하시겠나요? Y:1 N:0 :"); scanf_s("%d", &YN); if (YN != 1 && YN != 0) return 0; // 다른것 입력시 종료 return YN; } int main(){ int LottoNum[7] = { 0 }; // 복권당첨번호 int UserNum[7] = { 0 }; // 사용자 복권번호 int Loop = 1; // 무한루프를 위한 변수 int cnt = 0; // 자동생성시 개수 변수 //복권번호를 생성 SettingFunc(LottoNum,(sizeof(LottoNum))/4); // 복권생성번호를 확인해보려면 아래 주석을 해제하세요 //for (int i = 0; i < sizeof(lottonum) / 4;i++){ // printf("%d ", lottonum[i]); //} //puts(" "); //_getch(); while (Loop != 0){ switch (UserUI()){ case 1: printf("몇개를 생성하시겠나요? :"); scanf_s("%d", &cnt); RandomFunc(LottoNum, UserNum, cnt, (sizeof(LottoNum)) / 4); Loop = GoFunc(); break; case 2: if (UserInputFunc(UserNum, (sizeof(LottoNum)) / 4) == 1) { puts("숫자를 잘못 입력하였습니다."); Loop = GoFunc(); break; } ResultFunc(LottoNum, UserNum, (sizeof(LottoNum)) / 4); Loop = GoFunc(); break; case 3: puts("복권 프로그램을 종료합니다."); exit(0); break; } } return 0; } | cs |
실행결과
메뉴선택
자동모드
수동모드
감사합니다.
재미난 것 있으면 또 만들어 봐야지~!
'훈, IT 공부 > C,C++,MFC' 카테고리의 다른 글
[프로그램]강아지와 병아리 ( 다리개수 ) +손코딩연습 (0) | 2018.02.28 |
---|---|
[C/C++] C++에서의 클래스와(Class) C언어 에서의 구조체 비교해보자 (0) | 2018.01.31 |
포인터에 대해서 깊고 세밀하고 정확하게 이해하기!!! (0) | 2018.01.24 |
[프로그램]숫자 야구 게임 (3) | 2018.01.24 |
[독하게C]함수에 대한 기본이론과 사용 주의점!! (feat.전역변수) (0) | 2018.01.18 |
댓글