빙고게임 만들기 #1에서 진화된 2 버전입니다.
#include <iostream>
#include <time.h>
using namespace std;
int main()
{
srand((unsigned int)time(0));
int iNumber[25] = {};
for (int i = 0; i < 25; i++)
{
iNumber[i] = i + 1;
}
int iTemp, idx1, idx2;
for (int i = 0; i < 100; i++)
{
idx1 = rand() % 25;
idx2 = rand() % 25;
iTemp = iNumber[idx1];
iNumber[idx1] = iNumber[idx2];
iNumber[idx2] = iTemp;
}
int iBingo = 0;
while (true)
{
system("cls");
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 5; j++)
{
if (iNumber[i * 5 + j] == INT_MAX)
cout << "*\t";
else
cout << iNumber[i * 5 + j] << "\t";
}
cout << endl;
}
cout << "Bingo Line: " << iBingo << endl;
//줄수가 5 이상일 경우 게임을 종료한다.
if (iBingo >= 5)
break;
cout << "숫자를 입력하세요(0: 종료) : ";
int input;
cin >> input;
if (input == 0)
break;
else if (input < 1 || input > 25)
continue;
//중복체크 변수 true 중복 ,false 중복x
bool bAcc = true;
//모든 숫자 검사후 입력한 같은 숫자가 있는지 비교
for (int i = 0; i < 25; ++i)
{
if (input == iNumber[i])
{
bAcc = false;
// 숫자를 *로 변경하기 위해 특수값 INT_MAX 로 해준다.
iNumber[i] = INT_MAX;
break;
}
}
//bAcc 변수가 true일 경우 중복된 숫자를 입력해서 숫자를 *로
//바꾸지 못했으므로 다시 입력받게 continue 해준다.
if (bAcc)
continue;
//빙고 줄 수를 체크하는것은 매번 숫자를 입력할때 마다 처음부터
//새로 카운트를 할것이다. 그러므로 iBingo 변수를 0으로 매번
//초기화하고 새롭게 줄 수를 구해주도록 한다.
iBingo = 0;
//가로, 세로 줄 수를 구해준다.
int iCheck1 = 0, iCheck2 = 0;
for (int i = 0; i < 5; i++)
{
iCheck1 = iCheck2 = 0;
for (int j = 0; j < 5; j++)
{
// 가로 별 개수
if (iNumber[i * 5 + j] == INT_MAX)
++iCheck1;
//세로 별 개수
if (iNumber[j * 5 + i] == INT_MAX)
++iCheck2;
}
//현재 줄의 가로 별 개수가 몇개인지
//iCheck1 변수에 들어가게 된다.
//iCheck1이 값이 5이면 한줄이 모두
//*라는 의미이다.
if (iCheck1 == 5)
++iBingo;
if (iCheck2 == 5)
++iBingo;
}
//왼쪽 상단 -> 오른쪽 하단 대각선 체크
iCheck1 = 0;
for (int i = 0; i < 25;i+=6)
{
if (iNumber[i] == INT_MAX)
++iCheck1;
}
if (iCheck1 == 5)
++iBingo;
//오른쪽 상단에서 -> 왼쪽 하단 대각선 체크
iCheck1 = 0;
for (int i = 4; i <= 20; i += 4)
{
if (iNumber[i] == INT_MAX)
++iCheck1;
}
if (iCheck1 == 5)
++iBingo;
}
return 0;
}
출력결과
'프로그래밍 > C++' 카테고리의 다른 글
암시적(묵시적) DLL 만들기!! (0) | 2018.07.25 |
---|---|
[c++]빙고게임 만들기 #1 (0) | 2018.06.25 |