||[[TableOfContents]]|| == 문제 정의 == [숫자야구] 난수생성 참고자료 : RandomFunction , WindowsConsoleControl DeleteMe 내용이 중복되어서 문제정의와 참고자료 부분을 지웠습니다. 위키라는 지식 풀속에 중복되는 지식은 링크로 충분하겠지요. 아래의 문제들 역시 {{{~cpp 숫자야구/유주영}}} 식으로 하는 편이 차후 접근성 측면에서 더 좋을것 같습니다.--NeoCoin * 아악~ 아직 마방진도 못했는데 어려운게 또 -_ㅜ - 승균 * 해보면 알겠지만 결고 어렵지 않아 - 민수 * 이거 4자리 수로 만든거 있는데 올려도 되나요?? 소스는 지X같지만 ;; - 정욱 * 아 그리고 rand() 만 쓰면 똑같은 숫자만 된다고.. 뭐 다른것도 해야 되던데요.. - 정욱 * ctime 를 include 하고 srane(time(0)); 을 선언해주면 바뀔걸~ - 민수 == 유주영 == {{{~cpp #include #include #include using namespace std; int main() { int num[3]; while(num[0]==num[1] || num[1]==num[2] || num[0]==num[2]) { srand(time(NULL)); for(int i=0; i<3; i++) num[i] = rand()%9 +1; } cout <<"컴퓨터가 생각한 숫자 : " << num[0] << num[1] << num[2] << "\n"; int ch; while(ch) // 탈출조건X {cout <<"입력 : "; cin >> ch; int person[3]; int bcount=0; int scount=0; person[0] = ch/100; person[1] = (ch%100)/10; person[2] = (ch%10); for(int i=0;i<3;i++) { for(int j=0;j<3;j++) { if(num[i]==person[j]) { if(i==j) scount++; else bcount++; } } } if(scount==0 && bcount==0) cout << "출력 : OUT\n"; else if(scount==0 && bcount!=0) cout << "출력 : "<< bcount << "볼\n"; else if(bcount==0 && scount!=0) { cout << "출력 : " << scount << "스트라이크\n"; if(scount==3) break; } else cout << "출력 : "<< scount << "스트라이크 " << bcount << "볼\n"; } cout << "프로그램을 종료해요.\n"; return 0; } }}} 역시나 야바위의 흔적이.. -_-+ 쓰다보니 길어졌다~ while문 탈출조건 안쓰고 깔끔하게 하는방법 없을까.? * 오,, 주영 멋쪄~ ㅋㅋ - 민수 * 문자 입력하면 매트릭스 모드 돌입하네 -_-;;; - 승균 * 숫자만 입력하지 않은 죄값을 치룬것이오.ㅋㅋ == 권정욱 == {{{~cpp // 베이스볼 게임입니다. 간단히 말해 숫자 맞추기 게임으로 4자리 의 숫자를 9번 이전에 맞춰야 합니다. #include #include #include int main() { int rand_num[3]; //난수생성에 사용될 변수입니다. int i, j, k, num; //i,j,k 는 포문용, num 은 사용자 입력입니다. int player_num[3]; //사용자가 입력한 값을 각 자리 숫자로 나눠서 rand_num과 비교하기 쉽게 만듭니다. int ext,extra; //여분의 변수입니다. int strike, ball; //스트라이크와 볼의 판정에 쓰입니다. srand(time(NULL)); for(i=0;i<3;i++){ rand_num[i] = rand()%10; //한 자리수 난수를 생성합니다. if (i == 1 && rand_num[i] == rand_num[0]) i--; else if (i == 2 && (rand_num[i] == rand_num[0] || rand_num[i] == rand_num[1])) i--; } //이 if 문을 통해서 4자리 숫자가 모두 다르게 배열되게 합니다. for (i=0;i<9;i++){ //게임의 시작 cout << "3자리 숫자를 입력하세요(숫자가 겹치지 않게 쓰세요) : " ; cin >> num; ext = num; if (num < 100 || num > 999) { cout << "\a 잘못 입력하셨습니다. 다시 입력하여 주세요. \n"; i--; } else{ for (j=2;j>=0;j--){//숫자를 배열로 바꾸는 포문 player_num[j] = ext%10; ext = ext/10; } for(j=0;j<2;j++){ //각자리 비교 포문 시작 extra = 1; for(k=j+1;k<3;k++){ if (player_num[j] == player_num[k]) { cout << "\a 잘못 입력하셨습니다. 다시 입력하여 주세요. \n"; i--; extra = 0; break; } if (extra == 0) break; } if (extra == 0) break; } // 각자리 비교 포문 끝 } // else 문 끝 if (extra == 0) continue; strike = 0; ball = 0; if (extra == 1) { for(j=0;j<3;j++){ for(k=0;k<3;k++){ if (rand_num[j] == player_num[k] && j==k) strike++; if (rand_num[j] == player_num[k] && j!=k) ball++; } } } if (strike == 0 && ball == 0) cout << "아웃입니다.\n"; else cout << strike << "스트라이크, " << ball << "볼 입니다.\n"; if (strike == 3) { cout << "숫자를 맞추셨습니다.!!\n"; break; } if (i==8 && strike!=3) cout << "9회 게임 오버 입니다.\n"; } // 게임의 끝 return 0; } }}} 보고 놀라지들 말아주시길 -_-;;; -정욱 * 아.. 그리고 비주얼 베이직이 갑자기 한글이 다 깨져서 나오는데.. 어떻게 해야 할지 모르겠어요 ㅜㅜ -정욱 == 일정 == {{{~cpp #include // 수정판 ^^ #include using namespace std; int main() { int num[3]; int yagu[3]; int a; cout<<"컴퓨터가 생각하는 숫자:"; srand(time(NULL)); do { for(int i=0;i<3;i++) num[i]=rand()%9+1; }while(!(num[0]!=num[1] && num[1]!=num[2] && num[2]!=num[0])); cout<>a; if(a<1000 && a>99) { yagu[0]=a/100; yagu[1]=(a-yagu[0]*100)/10; yagu[2]=(a-yagu[0]*100-yagu[1]*10); } else cout<<"세자리수를 입력하세요:"; int strike=0; int ball=0; for(int i=0;i<3;i++) { for(int j=0;j<3;j++) { if(yagu[i]==num[j]) { if(i==j) strike++; if(i!=j) ball++; } } } if(strike!=0 && ball==0) if(strike==3) cout< #include #include void game(); void new_game(); void main() { cout << "┌──────────────────────────┐\n" "│ │\n" "│ │\n" "│ 숫 자 야 구 │\n" "│ │\n" "│ 게 임 ver 1.3 │\n" "│ │\n" "│ │\n" "│ │\n" "│ Made by 오승균 │\n" "│ │\n" "└──────────────────────────┘\n";// 타이틀 화면 cout << "\n"; game(); // 게임함수 시작 } void game() { char random[4]; // 임의로 만들어질 숫자를 저장하는 배열 char space[64]; // 입력하는 숫자를 저장하는 배열 int strike = 0; // 스타라이크 카운터 초기화 int ball = 0; // 볼 카운터 초기화 srand(time(NULL)); for (int i = 0; i < 4; i++) { random[i] = '0' + rand() % 9 + 1; for (int j = 0; j < i; j++) if (random[i] == random[j]) { i--; break; } } // 랜덤하게 4자리 숫자를 생성합니다 /*cout << random[0] << random[1] << random[2] << random[3] << endl;*/ // 대략 답 -_-;;; cout << "랜덤하게 4자리숫자를 만들었습니다. 맞춰보세요 *^^* (종료 : Q)\n\n"; int success = 0; // 제대로 입력했는지 확인 절차 (0 = 실패, 1 = 성공) while (success == 0) { cout << "숫자를 입력하세요 : "; cin.getline(space, 64); success = 1; if ((space[0] == 'q' || space[0] == 'Q') && space[1] == '\0') { cout << "Bye!!\n"; exit(0); } // 도중에 'Q'를 입력하면 종료 for (i = 0; i < 4; i++) { if (space[i] < '1' || space[i] > '9') { success = 0; break; } } // 1~9사이에 숫자가 제대로 입력되었는지 확인 if (space[4] != '\0') success = 0; // 4자리가 정확히 입력되었는지 확인 for (i = 0; i < 3; i++) for (int h = i + 1; h < 4; h++) if (space[i] == space[h]) { success = 0; break; } // 중복 입력이 되었는지 확인 if (success == 0) continue; // 위 사항중 1개라도 걸리면 다시 입력 // 여기서 부터 제대로 입력했을시... for (int j = 0; j < 4; j++) { if (space[j] == random[j]) strike++; // 스트라이크 카운터 for (int k = 0; k < 4; k++) if (j != k && space[j] == random[k]) ball++; // 볼 카운터 else continue; } if (strike == 0 && ball == 0) { cout << "결과 : "; cout << "OUT!!"; // 스트라이크, 볼이 없는 겨우 'OUT' 출력 } else if (strike == 4) new_game(); // 정확히 맞췄을 경우 new_game함수로 이동 else { cout << "결과 : "; cout << strike << "S" << " " << ball << "B"; } // 입력에 대한 결과 출력 cout << endl; strike = 0; ball = 0; success = 0; // success를 0으로 초기화함으로써 while문 다시 시작 } } void new_game() // 게임에서 성공했을시 여기로 이동 { cout << "맞추셨습니다. 또 하시겠습니까? (Y/N) : "; char ch; cin >> ch; while (ch != 'y' || ch != 'Y' || ch != 'n' || ch != 'N') { if (ch == 'y' || ch == 'Y') { while (cin.get() != '\n') continue; // y를 치고 엔터를 쳤을때 생기는 개행문자 제거 game(); break; } else if (ch == 'n' || ch == 'N') { cout << "Bye!!\n"; exit(0); // 게임 종료 } else { cout << "맞추셨습니다. 또 하시겠습니까? (Y/N) : "; cin >> ch; } } } /* Ver 1.3 Update 게임 도중에 종료기능 추가 Ver 1.2 Update 개행문자 제거하기 (무쟈게 어려웠어요 ㅜㅜ) Ver 1.1 Update 3자리수에서 4자리수로 변경. 소스 대거 수정. Ver 1.0 기본 틀 완성. 게임은 제대로 구동되나 숫자 이외의 문자 입력시 메트릭스 모드 돌입 -_-;;; */ }}} 에효...무쟈게 힘들었음 ㅜㅜ 그래도 성공하니 뿌듯하네요. 그리고... 절대!!!!!!!!!! 이거 혼자한거 아님. 기본틀은 혼자서 다 했는데, 메트릭스모드 제거 이런건 도움좀 받았음. P.S. 윽...소스가 정리가 안되어서 보기에 좋지는 않군 (쿨럭) 비쥬얼C++에다 직접 붙여서 보세요 ~_~ [Digi-VM] ---- [빵페이지]