카트라이더 빙고 시스템 모방
프로그램 설명: https://cafe.naver.com/llrarell/1547148 (레어카페)
#include <stdio.h> #define rand_max 32767 #define size 50 void bingo(char num) { int a[5][5] = { 0 }; // 빙고 배열 int idx[size] = { 0 }; // 인덱스 배열 int ran; // 랜덤 수 int money = 0; // 머니 float coin = 0; // 캐시 srand(time(NULL)); printf(" <<< 5*5 빙고 >>>\n\n"); // 중복되지 않는 5*5 랜덤 배열 생성 for (int i = 0; i < 5; i++) { for (int j = 0; j < 5; j++) { ran = rand()*size/rand_max; while (idx[ran] == 1) ran = rand()*size / rand_max; idx[ran] = 1; a[i][j] = ran; printf("%d ", a[i][j]); } printf("\n"); } // 자동 배열 표기 int clr = 0, count = 0,change=0; // clr은 클리언한 개수,count는 카운트 수, change는 사용자 속이기 위함 while (clr != 25) { if (num == '3' || num == '4') { // 수동이어야 함 printf("\n계속 하려면 엔터를 누르세요!!\n(Count: %d),(Clear: %d)", count, clr); getchar(); } else // 자동이어야 함 printf("\n빙고 현재 자동 모드!!\n(Count: %d),(Clear: %d)", count, clr); system("cls"); ran = rand()*size / rand_max; change = 0; printf(" <<< 5*5 빙고 >>>\n\n"); for (int i = 0; i < 5; i++) { for (int j = 0; j < 5; j++) { if (a[i][j] == ran) { // 특별 케이스일 때 ( 카트빙고면서 마지막 한 칸 남은 상황) if (num == '1' && clr == 24) { if (rand() * 2000 / rand_max < 125) {} // 기존 1/25확률의 1/8확률이 되게 하기 else change = 1; } // 특별 케이스가 아니거나 특별 케이스에서 if문이 성립했을 때!! if (change == 0) { a[i][j] = -42; // 42는 * clr++; } } if (a[i][j] == -42) printf("%c ", -a[i][j]); else printf("%d ", a[i][j]); } printf("\n"); } count++; if(change==0) printf("\n <<< 이번 수는 %d!!! >>>\n", ran); // change가 1이면 이 소스는 무시되어야 함!! else printf("\n <<< 이번 수는 %d!!! >>>\n", ran + 1); // 1/8이 아니기에 속이는 소스 if (num == '1') printf("\n비용: %d원 (%1.0f코인)", money += 640,coin+=8.3); } printf("\n(Count: %d),(Clear: %d)", count, clr); printf("\n축하합니다! 빙고를 완성했습니다!!!\n"); } int display() { char num; // 빙고 세팅 do { system("cls"); printf("□ 심심풀이용 빙고 시스템입니다~~!! \n"); printf("\n1: 카트라이더같은 빙고 (확률: 25/50->24/50->...2/50->1/200),\n2: 일반 빙고 (확률: 25/50->24/50->...->1/50)\n"); printf("3: 카트 수동 빙고, 4: 일반 수동 빙고\n"); num = getchar(); while (getchar() != '\n'); } while (num-'0'<=0 || num-'0'>=5); bingo(num); printf("\n다시 하겠습니까?? (5를 누를 시 다시 시작!!)\n"); num = getchar(); while (getchar() != '\n'); if (num == '5') display(); else return 0; } int main() { display(); return 0; }