카트라이더 빙고 시스템 모방
프로그램 설명: 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;
}