C언어- 카트라이더 빙고 시스템 모방

카트라이더 빙고 시스템 모방

프로그램 설명: 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;
}

Leave a Reply

Your email address will not be published. Required fields are marked *