반응형
필수사항
- 빙고 게임_1
[C++] 빙고 게임_1
5,5 빙고판 만들기 srand((unsigned int)time(0));int iArray[25] = {};//1~25까지의 숫자를 넣는다.for (int i = 0; i 결과 입력부분 추가cout > iInput;//종료if (iInput == 0){ break;}//1~25 사이의 숫자가 아닌 경우else if (iIn
lhy-info.tistory.com
빙고를 위한 변수 추가
//섞기
int iTemp, idx1, idx2;
for (int i = 0; i < 100; ++i)
{
idx1 = rand() % 25;
idx2 = rand() % 25;
iTemp = iArray[idx1];
iArray[idx1] = iArray[idx2];
iArray[idx2] = iTemp;
}
//빙고 확인을 위한 변수 추가
int iBingo = 0;
while (true)
{
system("cls");
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 5; j++)
{
if (iArray[i * 5 + j] == INT_MAX)
{
cout << "*\t";
}
else
{
cout << iArray[i * 5 + j] << "\t";
}
}
cout << endl;
}
//빙고 갯수 체크
cout << "Bingo Line : " << iBingo << endl;
//빙고 줄 수가 2개일 때 종료 처리
if (iBingo >= 2)
{
break;
}
cout << "숫자를 입력하세요(0 : 종료) : ";
int iInput;
cin >> iInput;
...기존 생략
- 빙고 확인을 위핸 iBingo 변수 추가
- 빙고 라인 갯수와 2개 라인일 때 종료 if문 추가
가로,세로 빙고
...기존 생략
//bAcc가 true일 경우 중복된 숫자를 입력해서 숫자*로 만들지 못했으므로
//다시 입력받기 위해 continue를 한다.
if (bAcc)
{
continue;
}
//빙고 수 를 체크하는 것은 매번 숫자를 입력할때마다 처음부터 새로 카운트를 할 것이다
//그러므로 iBingo를 0으로 초기화 한다.
iBingo = 0;
//가로, 세로 줄 수를 구해준다
int iStar1 = 0, iStar2 = 0;
for (int i = 0; i < 5; i++)
{
//한줄 체크하기 전 먼저 0으로 초기화
iStar1 = iStar2 = 0;
for (int j = 0; j < 5; j++)
{
//가로 별 갯수 구해준다
if (iArray[i * 5 + j] == INT_MAX)
{
++iStar1;
}
//세로 별 개수 구해준다
if (iArray[j * 5 + i] == INT_MAX)
{
++iStar2;
}
}
//j for문이 끝났을 때 iStar1이 5라면 가로 한줄이 모두 *이라는 의미
if (iStar1 == 5)
{
++iBingo;
}
if (iStar2 == 5)
{
++iBingo;
}
}
- 이중 for문을 이용해 각각 한줄씩 INT_MAX인지를 체크하여 INT_MAX라면 별로 지정
- 지정한 iStar들이 5개라면 빙고추가
- 한줄했을때 Bingo Line : 1 로 되는 것 확인
대각선 체크
- 가로, 세로만 INT_MAX인지 체크 해주었기 때문에 대각선으로 했을땐 Bingo Line이 증가하지 않음
코드추가
...기존 생략
if (iStar2 == 5)
{
++iBingo;
}
}
//ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
//왼쪽 상단 -> 오른쪽 하단 대각선 체크
//대각선으로 6씩 증가
iStar1 = 0;
for (int i = 0; i < 25; i += 6)
{
if (iArray[i] == INT_MAX)
{
++iStar1;
}
}
if (iStar1 == 5)
{
++iBingo;
}
//오른쪽 상단 -> 왼쪽 하단 대각선 체크
//대각선으로 4씩 증가
iStar1 = 0;
for (int i = 4; i <= 20; i += 4)
{
if (iArray[i] == INT_MAX)
{
++iStar1;
}
}
if (iStar1 == 5)
{
++iBingo;
}
}
return 0;
}
- 가로, 세로를 확인하는 for문을 빠져나온 후 새로운 for문을 추가
- 왼쪽 상단 -> 오른쪽 상단은 6씩 증가하기 때문에 i += 6으로 진행
- 오른쪽 상단 -> 왼쪽 상단은 4씩 증가하기 때문에 i += 4로 진행
결과
최종코드
#include <iostream>
using namespace std;
int main()
{
srand((unsigned int)time(0));
int iArray[25] = {};
//1~25까지의 숫자를 넣는다.
for (int i = 0; i < 25; ++i)
{
iArray[i] = i + 1;
}
//섞기
int iTemp, idx1, idx2;
for (int i = 0; i < 100; ++i)
{
idx1 = rand() % 25;
idx2 = rand() % 25;
iTemp = iArray[idx1];
iArray[idx1] = iArray[idx2];
iArray[idx2] = iTemp;
}
int iBingo = 0;
while (true)
{
system("cls");
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 5; j++)
{
if (iArray[i * 5 + j] == INT_MAX)
{
cout << "*\t";
}
else
{
cout << iArray[i * 5 + j] << "\t";
}
}
cout << endl;
}
cout << "Bingo Line : " << iBingo << endl;
if (iBingo >= 2)
{
break;
}
cout << "숫자를 입력하세요(0 : 종료) : ";
int iInput;
cin >> iInput;
//종료
if (iInput == 0)
{
break;
}
//1~25 사이의 숫자가 아닌 경우
else if (iInput < 1 || iInput > 25)
{
cout << "잘못된 숫자입니다." << endl;
continue;
}
//중복 입력 체크하기 위한 변수
bool bAcc = true;
//모든 숫자를 차례대로 검사해 입력한 숫자와 같은 숫자가 있는지 찾아낸다
for (int i = 0; i < 25; i++)
{
//같은 숫자가 있을 경우
if (iInput == iArray[i])
{
//숫자를 찾았을 경우 중복된 숫자가 아니므로
//bAcc를 false로 만든다
bAcc = false;
//숫자를 *로 만들기 위해 특수한 값인 INT_MAX로 변경
iArray[i] = INT_MAX;
//더이상 다른 숫자를 찾아볼 필요가 없으므로 for문을 빠져나간다.
break;
}
}
//bAcc가 true일 경우 중복된 숫자를 입력해서 숫자*로 만들지 못했으므로
//다시 입력받기 위해 continue를 한다.
if (bAcc)
{
continue;
}
//빙고 수 를 체크하는 것은 매번 숫자를 입력할때마다 처음부터 새로 카운트를 할 것이다
//그러므로 iBingo를 0으로 초기화 한다.
iBingo = 0;
//가로, 세로 줄 수를 구해준다
int iStar1 = 0, iStar2 = 0;
for (int i = 0; i < 5; i++)
{
//한줄 체크하기 전 먼저 0으로 초기화
iStar1 = iStar2 = 0;
for (int j = 0; j < 5; j++)
{
//가로 별 갯수 구해준다
if (iArray[i * 5 + j] == INT_MAX)
{
++iStar1;
}
//세로 별 개수 구해준다
if (iArray[j * 5 + i] == INT_MAX)
{
++iStar2;
}
}
//j for문이 끝났을 때 iStar1이 5라면 가로 한줄이 모두 *이라는 의미
if (iStar1 == 5)
{
++iBingo;
}
if (iStar2 == 5)
{
++iBingo;
}
}
//왼쪽 상단 -> 오른쪽 하단 대각선 체크
//대각선으로 6씩 증가
iStar1 = 0;
for (int i = 0; i < 25; i += 6)
{
if (iArray[i] == INT_MAX)
{
++iStar1;
}
}
if (iStar1 == 5)
{
++iBingo;
}
//오른쪽 상단 -> 왼쪽 하단 대각선 체크
//대각선으로 4씩 증가
iStar1 = 0;
for (int i = 4; i <= 20; i += 4)
{
if (iArray[i] == INT_MAX)
{
++iStar1;
}
}
if (iStar1 == 5)
{
++iBingo;
}
}
return 0;
}
반응형
'C++ > C++입문' 카테고리의 다른 글
[C++] 빙고 게임 하드모드 (0) | 2025.03.27 |
---|---|
[C++] 빙고 게임_3 (0) | 2025.03.26 |
[C++] 빙고 게임_1 (0) | 2025.03.25 |
[C++] 로또 만들기 (0) | 2025.03.25 |
[C++] 배열 (0) | 2025.03.25 |