본문 바로가기
공부

숫자 빙고 게임

by MY블로그 2022. 10. 24.

조건

1~25까지의 숫자 랜덤배치

입력된숫자는 * 으로 표시

가로세로대각선중 3개의 빙고 = 게임종료

 

혼자해서 해보려고했는데 도저히 안되서 인터넷 참고

갑자기 딜레이 기능 써보고싶어서 찾아봐서 사용해봄

전날 학습이 숙지되지않아서 복습이 많이 필요할것같다.

 

*딜레이 기능 1000 = 1s(1초)

#include <iostream>
#include <time.h>
#include<Windows.h> // 처음써보는 Sleep(딜레이) 기능용 헤더파일.
using namespace std;

int main()
{
	srand(time(NULL));
	int iNum[25] = {}; // 숫자 배열 생성
	int iPlayer = 0; // 입력값 변수 생성

	for (int i = 0; i < 25; i++) // 배열에 1~25 숫자 입력
	{
		iNum[i] = i + 1;
	}

	int idx1, idx2, iTemp;
	for (int i = 0; i < 100; i++) // 1~25 숫자 shuffle
	{
		idx1 = rand() % 25;
		idx2 = rand() % 25;
		iTemp = iNum[idx1];
		iNum[idx1] = iNum[idx2];
		iNum[idx2] = iTemp;
	}
	//ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ일단게임에 필요한 숫자들과 숫자랜덤값정해두기

	int w_count, h_count, d_count1, d_count2; // bingo 가로 세로 대각선1 대각선2
	int bingo;

	//ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ빙고 카운트에 필요한 것들

	for (int i = 0; i < 5; i++) // 숫자 출력
	{
		for (int j = 0; j < 5; j++)
		{
			cout << iNum[i * 5 + j] << "\t"; // 간격조절

		}
		cout << endl;
	}
	cout << endl;
	cout << "현재 빙고 줄 수 :0" << endl;  // system("cls") 기능때문에 화면초기화되서 처음에는 텍스트로만출력.

	//ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ빙고 초기판 출력하기

	while (true) 	//ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ 반복문 시작
	{

		cout << "1~ 25 사이 숫자를 입력하세요.(종료 : 0) : ";
		cin >> iPlayer; 

		if (iPlayer > 25) // 좀있어보이게 예외처리 넣어봄
		{
			cout << "1~25번 까지의 숫자만 입력해 주세요!" << endl;
			cout << "종료는 0번 입니다." << endl;
			Sleep(1500); // 예외처리문구가 순식간에 출력됬다 사라져서 써본기능 (딜레이기능)
		}


		system("cls"); // 입력한 숫자는 *로 바뀌어 있도록 화면 초기화.

		w_count = 0; // 반복 때마다 카운트는 0으로 초기화. //왜???? 이거잘모르겠다.처음에만0아닌가..
		h_count = 0;
		d_count1 = 0;
		d_count2 = 0;
		bingo = 0;

		if (iPlayer == 0) // 게임 종료
		{
			cout << "게임이 종료되었습니다." << endl;
			Sleep(1500);
			break;
		}

		//ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ 입력 조건 시작

		for (int i = 0; i < 5; i++) // 숫자 *로 바꾸기
		{
			for (int j = 0; j < 5; j++)
			{
				if (iNum[i * 5 + j] == iPlayer) // 그 숫자를 찾았을 때
				{
					iNum[i * 5 + j] = INT_MAX; //???????????????????????????????????????????????
				}
			}
		}
		//ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ 빙고 조건 시작
		for (int i = 0; i < 5; i++) // 빙고 찾기
		{
			for (int j = 0; j < 5; j++)
			{
				if (iNum[i + j * 5] == INT_MAX)// 세로 빙고
				{
					h_count++;
					if (h_count == 5)
						bingo++;

					if ((i + j * 5) % 6 == 0) // \ 대각1 (0,6,12,18,24) 빙고
						d_count1++;

					if (d_count1 == 5)
					{
						bingo++;
						d_count1 = 0;
					}

					if ((i + j * 5) % 4 == 0 && i + j * 5 != 0
						&& i + j * 5 != 24) // / 대각2 (4,8,12,16,20번)
					{
						d_count2++;
					}
					if (d_count2 == 5)
					{
						bingo++;
						d_count2 = 0;
					}
				}

				if (iNum[i * 5 + j] == INT_MAX) // 가로 빙고
				{
					w_count++;
					if (w_count == 5)
					{
						bingo++;
					}
				}
			}
			w_count = 0;
			h_count = 0;
		}
		//ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ 빙고 조건 끝
		for (int i = 0; i < 5; i++) // 숫자 출력
		{
			for (int j = 0; j < 5; j++)
			{
				if (iNum[i * 5 + j] == INT_MAX)
					cout << "*\t"; // 입력한 숫자는 *로 출력
				else
					cout << iNum[i * 5 + j] << "\t";	// 입력되지 않은 숫자는 그대로 출력
			}
			cout << endl;
		}

		cout << endl;
		cout << "현재 빙고 줄 수 :" << bingo << endl; //빙고 갯수 출력

		//ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ 3빙고일때 종료 조건걸기
		if (bingo == 3)
		{
			cout << "3 빙고가 되었습니다. 게임을 종료 합니다." << endl;
			Sleep(1500);
			break;
		}
	}


	return 0;
}

'공부' 카테고리의 다른 글

스트링 활용 빙교 풀이  (0) 2022.10.26
스트링 활용 빙고  (0) 2022.10.26
숫자 슬라이드 퍼즐 게임  (0) 2022.10.23
아스키코드 참고자료  (0) 2022.10.20
C++ 하이 로우 세븐 게임 연습  (0) 2022.10.19

댓글