빙고 게임 (with AI)



#include <iostream>
#include <time.h>
#include <Windows.h>
using namespace std;

//대전 빙고 AI
//컴터 빙고판은 ??? 로 안보이고 멍청한 AI는 임의의 값 부르도록 처리(하지만 똑똑하게 만들거다 난)

int main()
{
srand(time(NULL));

int user_num;//유저 입력 받을 배열
int com_num;//컴터 입력 받을 배열
int turn = 0;//차수
int bingo1_count;
int bingo2_count;

int bingo1[25];
int bingo2[25];
int bingocom[25];

//1.내꺼랑 컴 배열 만들기
for (int i = 0; i < 25; i++) bingo1[i] = i + 1;
for (int i = 0; i < 25; i++) bingo2[i] = i + 1;

//2.둘 다 섞기
for (int i = 0; i < 1000; i++)
{
int myindex1 = rand() % 25;
int myindex2 = rand() % 25;
int mytemp = bingo1[myindex1];
bingo1[myindex1] = bingo1[myindex2];
bingo1[myindex2] = mytemp;

int comindex1 = rand() % 25;
int comindex2 = rand() % 25;
int comtemp = bingo2[comindex1];
bingo2[comindex1] = bingo2[comindex2];
bingo2[comindex2] = comtemp;
}

for(int i = 0; i < 25; i++) bingocom[i] = bingo2[i]; //복사 빙고판 만들기

//게임 진행
while (true)
{
turn++;
int count1 = 0; //카운트 초기화
int count2 = 0; //카운트 초기화

//6.빙고 판단
for (int i = 0; i < 25; i = i + 5)
{
if (bingo1[i + 0] == 0 && //가로
bingo1[i + 1] == 0 &&
bingo1[i + 2] == 0 &&
bingo1[i + 3] == 0 &&
bingo1[i + 4] == 0) count1++;
}
for (int i = 0; i < 5; i++)
{
if (bingo1[i + 0] == 0 && //세로
bingo1[i + 5] == 0 &&
bingo1[i + 10] == 0 &&
bingo1[i + 15] == 0 &&
bingo1[i + 20] == 0) count1++;
}
if (bingo1[0 + 0] == 0 &&
bingo1[5 + 1] == 0 &&
bingo1[10 + 2] == 0 &&
bingo1[15 + 3] == 0 &&
bingo1[20 + 4] == 0) count1++;
if (bingo1[4 + 0] == 0 &&
bingo1[9 - 1] == 0 &&
bingo1[14 - 2] == 0 &&
bingo1[19 - 3] == 0 &&
bingo1[24 - 4] == 0) count1++;
bingo1_count = count1;
cout << "빙고 개수: " << bingo1_count << "\t\t\t\t\t";

//7.컴터 빙고 판단
for (int i = 0; i < 25; i = i + 5)
{
if (bingocom[i + 0] == 0 &&
bingocom[i + 1] == 0 &&
bingocom[i + 2] == 0 &&
bingocom[i + 3] == 0 &&
bingocom[i + 4] == 0) count2++;

}
for (int i = 0; i < 5; i++)
{
if (bingocom[i + 0] == 0 && //세로
bingocom[i + 5] == 0 &&
bingocom[i + 10] == 0 &&
bingocom[i + 15] == 0 &&
bingocom[i + 20] == 0) count2++;
}
if (bingocom[0 + 0] == 0 &&
bingocom[5 + 1] == 0 &&
bingocom[10 + 2] == 0 &&
bingocom[15 + 3] == 0 &&
bingocom[20 + 4] == 0) count2++;
if (bingocom[4 - 0] == 0 &&
bingocom[9 - 1] == 0 &&
bingocom[14 - 2] == 0 &&
bingocom[19 - 3] == 0 &&
bingocom[24 - 4] == 0) count2++;
bingo2_count = count2;
cout << "빙고 개수: " << bingo2_count << endl;

//3.내꺼랑 컴꺼 노출 해주기
for (int i = 0; i < 25; i = i + 5)
{
for (int j = i; j < 5 + i; j++)
{
if (bingo1[j] == 0)
{
cout << (char)47 << "\t"; //강제 형변환 연습 잘 했고,
}
else cout << bingo1[j] << "\t";
}
cout << "\t";
for (int j = i; j < 5 + i; j++)
{
if (bingocom[j] == 0)
{
cout << bingo2[j] << "\t"; //실제컴터 빙고 숫자
}
else cout << static_cast<char>(63) << "\t"; //C++표준 형변환 연습 잘 했고,
}
cout << endl << endl << endl;
}

cout << turn << "회차" << endl; //몇 회 차인지

//8.승패 판단
if (bingo1_count >= 3 && bingo2_count >= 3)
{
cout << "─────── DRAW───────" << endl;
break;
}
if (bingo1_count >= 3)
{
cout << "─────── USER WIN !!!! ───────" << endl;
break;
}
else if (bingo2_count >= 3)
{
cout << "─────── COM WIN !!!! ───────" << endl;
break;
}


//4.유저 턴: 입력
while (true)
{
int temp=0;
cout << "1 ~ 25중 번호를 입력 하세요. : ";
cin >> user_num;
if(user_num <= 0 || user_num > 25)
{
cout << endl << "범위를 벗어 났습니다." << endl;
continue;
}
for (int i = 0; i < 25; i++)
{
if (user_num == bingo2[i]) temp = i;
}
if (bingocom[temp] == 0)
{
cout << endl << "같은 수를 입력 하였습니다." << endl;
continue;
}
break;
}


for (int j = 0; j < 25; j++)
{
if (bingo1[j] == user_num)
{
bingo1[j] = 0;
}
if (bingocom[j] == user_num)
{
bingocom[j] = 0;
}
}



//컴퓨터 턴: 입력
cout << "컴퓨터 입력 중입니다.";
for (int i = 0; i < 6; i++)
{
cout << ".";
Sleep(200);
}

//중복 제거
//만약 뽑은 값이 같다면?
//if( com_num == )
while (1)
{
com_num = rand() % 25 + 1;
if (user_num == com_num)//(예외처리)유저랑 같은 수 입력 처리 완료
{
cout << endl << "유저와 같은 수를 입력 하였습니다." << endl;
continue;
}

//먼저 같은 값을 찾아라
int temp;
for (int i = 0; i < 25; i++)//(예외처리)이전에 불렀던 수 입력 시
{
if (com_num == bingo2[i])
{
temp = i;
break;
}
}
if (bingocom[temp] == 0)
{
cout << endl << "이전에 불렀던 수를 입력 하였습니다." << endl;
continue;
}

if (com_num == bingo2[temp] && bingocom[temp] != 0)
{
break;
}
}

for (int i = 0; i < 25; i++)
{
if (bingocom[i] == com_num)
{
bingocom[i] = 0;
}
if (bingo1[i] == com_num)
{
bingo1[i] = 0;
}
}

cout << endl << "컴퓨터 숫자: " << com_num << endl;
system("pause");
system("cls");
}//end of while

return 0;
}//end of main

댓글