๐ ๊ณต๋ถํ๋ ์ง์ง์ํ์นด๋ ์ฒ์์ด์ง?
[inflearn ๊ฐ์] ๋น๊ณ ๊ฒ์ - ๋น๊ณ ๊ฒ์ AI Easy Mode ๋ณธ๋ฌธ
๐ฉ๐ป IoT (Embedded)/C++
[inflearn ๊ฐ์] ๋น๊ณ ๊ฒ์ - ๋น๊ณ ๊ฒ์ AI Easy Mode
์ง์ง์ํ์นด 2023. 7. 3. 20:13728x90
๋ฐ์ํ
<๋ณธ ๋ธ๋ก๊ทธ๋ ์ด์ํธ๋ฝ ๊ฒ์์์นด๋ฐ๋ฏธ ๋์ ์ ํ๋ธ๋ฅผ ์ฐธ๊ณ ํด์ ๊ณต๋ถํ๋ฉฐ ์์ฑํ์์ต๋๋ค :-)>
=> C++ Let's Make Games
๐ซง ๋น๊ณ ๊ฒ์ AI Easy Mode
#include <iostream>
#include <time.h>
using namespace std;
enum AI_MODE {
AM_EASY = 1,
AM_HARD
};
int main()
{
srand((unsigned int)time(0));
int iNumber[25] = {};
int iAINumber[25] = {};
// 1~25 ์ซ์ ๋ฃ๊ธฐ
for (int i = 0; i < 25; i++) {
iNumber[i] = i + 1;
iAINumber[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;
// AI ์ซ์ ์๊ธฐ
idx1 = rand() % 25;
idx2 = rand() % 25;
iTemp = iAINumber[idx1];
iAINumber[idx1] = iAINumber[idx2];
iAINumber[idx2] = iTemp;
}
int iBingo = 0, iAIBingo = 0;
int iAIMode;
while (true) {
system("cls");
// AI ๋์ด๋
cout << "1. Easy" << endl;
cout << "2. Hard" << endl;
cout << "AI ๋ชจ๋ ์ ํํ์ธ์ : ";
cin >> iAIMode;
if (iAIMode >= AM_EASY && iAIMode <= AM_HARD) {
break;
}
}
// ์ ํ ์๋ ๋ชฉ๋ก ๋ฐฐ์ด
int iNoneSelect[25] = {};
// ์ ํ ์๋ ์ซ์ ๊ฐ์
int iNoneSelectCount = 0;
while (true) {
system("cls");
// ์ซ์๋ฅผ 5x5 ์ถ๋ ฅ
cout << "########### Player ############" << endl;
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;
}
// Player ๋น๊ณ ์ค ์
cout << "Bingo Line : " << iBingo << endl << endl;
cout << "########### AI ############" << endl;
switch (iAIMode) {
case AM_EASY :
cout << "AIMode : Easy" << endl;
break;
case AM_HARD:
cout << "AIMode : Hard" << endl;
break;
}
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
if (iAINumber[i * 5 + j] == INT_MAX) {
cout << "*\t";
}
else {
cout << iAINumber[i * 5 + j] << "\t";
}
}
cout << endl;
}
// AI ๋น๊ณ ์ค ์
cout << "AIBingo Line : " << iAIBingo << endl << endl;
// ์ค ์๊ฐ 5 ์ด์์ด๋ฉด ๊ฒ์ ์ข
๋ฃ
if (iBingo > 5) {
cout << "Player ์น๋ฆฌ" << endl;
break;
}
if (iAIBingo > 5) {
cout << "AI ์น๋ฆฌ" << endl;
break;
}
cout << "์ซ์ ์
๋ ฅ (์ข
๋ฃ : 0) : ";
int iInput;
cin >> iInput;
if (iInput == 0) {
break;
}
else if (iInput < 1 || iInput > 25) {
continue;
}
// ์ค๋ณต ์
๋ ฅ ๋ฐฉ์ง ์ฒดํฌ
bool bAcc = true;
// ๋ชจ๋ ์ซ์๋ฅผ ์ฐจ๋ก๋๋ก ๊ฒ์ฌ
// ์
๋ ฅํ ์ซ์์ ๊ฐ์ ์ซ์๊ฐ ์๋์ง ์ฐพ๊ธฐ
for (int i = 0; i < 25; ++i) {
// ๊ฐ์ ์ซ์
if (iInput == iNumber[i]) {
// ์ซ์ ์ฐพ์์ ๊ฒฝ์ฐ ์ค๋ณต๋ ์ซ์ ์๋
bAcc = false;
// ์ซ์๋ฅผ *๋ก ๋ณ๊ฒฝํ๊ธฐ ์ํ ํน์ ๊ฐ INT_MAX
iNumber[i] = INT_MAX;
// ์ฐพ์๋ณผ ์ซ์ ์์
break;
}
}
// bAcc ๋ณ์๊ฐ true ์ผ ๊ฒฝ์ฐ ์ค๋ณต๋ ์ซ์ ์
๋ ฅํด์
// ์ซ์๋ฅผ *๋ก ๋ฐ๊พธ์ง ๋ชปํ์ผ๋ฏ๋ก ๋ค์ ์
๋ ฅ๋ฐ๊ฒ continue
if (bAcc) {
continue;
}
// ์ค๋ณต ์๋๋ผ๋ฉด AI์ ์ซ์๋ *๋ก ๋ฐ๊พธ๊ธฐ
for (int i = 0; i < 25; ++i) {
// ๊ฐ์ ์ซ์
if (iInput == iAINumber[i]) {
// ์ซ์๋ฅผ *๋ก ๋ณ๊ฒฝํ๊ธฐ ์ํ ํน์ ๊ฐ INT_MAX
iAINumber[i] = INT_MAX;
// ์ฐพ์๋ณผ ์ซ์ ์์
break;
}
}
// AI ๋ชจ๋์ ๋ค๋ผ ์ ํํ๋๊ฒ ๋ฌ๋ผ์ง๋ค
switch (iAIMode) {
/*
AI Easy : AI์ ์ซ์๋ชฉ๋ก ์ค *๋ก ๋ฐ๋์ง ์์ ์ซ์ ๋ชฉ๋ก ๋ง๋ค์ด์
๊ทธ ๋ชฉ๋ก ์ค ํ๋๋ฅผ ์ ํํ๊ฒ ํจ (๋๋คํ๊ฒ)
*/
case AM_EASY:
// ์ ํ ์๋ ์ซ์ ๋ชฉ๋ก ๋ง๋ค๊ธฐ
// ์ ํ ์๋ ์ซ์ ๊ฐ์๋ ๋ชฉ๋ก์ ๋ง๋ค ๋ ์นด์ดํ
iNoneSelectCount = 0;
for (int i = 0; i < 25; ++i) {
// ํ์ฌ ์ซ์๊ฐ *์ด ์๋ ๊ฒฝ์ฐ
if (iAINumber[i] != INT_MAX) {
// *์ด ์๋ ์ซ์์ผ ๊ฒฝ์ฐ iNoneSelectCount ์ธ๋ฑ์ค๋ก ํ์ฉ
// ์ด ์ ํ ์๋ ๊ฐ์ ๊ตฌํ๊ธฐ
iNoneSelect[iNoneSelectCount] = iAINumber[i];
++iNoneSelectCount;
}
}
// ์ ํ ์๋ ๋ชฉ๋ก์ ๊ฐ์ ๋ง๋ค์ด์ง
// ์ ํ ์๋ ๋ชฉ๋ก์ ์ซ์ ์ค ๋๋คํ ํ๋์ ์ซ์ ์ป์ด์ค๊ธฐ ์ํด ์ธ๋ฑ์ค ๋๋คํ๊ฒ ๊ตฌํ๊ธฐ
iInput = iNoneSelect[rand() % iNoneSelectCount];
break;
case AM_HARD:
break;
}
// AI ๊ฐ ์ซ์ ์ ํํ์ผ๋ฏ๋ก ํ๋ ์ด์ด์ AI์ ์ซ์๋ฅผ *๋ก ๋ฐ๊พธ๊ธฐ
for (int i = 0; i < 25; ++i) {
if (iNumber[i] == iInput) {
iNumber[i] == INT_MAX;
break;
}
}
// AI ์ซ์ ๋ฐ๊พธ๊ธฐ
for (int i = 0; i < 25; ++i) {
if (iAINumber[i] == iInput) {
iAINumber[i] == INT_MAX;
break;
}
}
// ๋น๊ณ ์ค ์ ์ฒดํฌ
// ์ฒ์๋ถํฐ ์๋ก ์นด์ดํธ ํ๊ธฐ
// iBingo ๋ณ์๋ฅผ 0์ผ๋ก ๋งค๋ฒ ์ด๊ธฐํ
iBingo = 0;
iAIBingo = 0;
// ๊ฐ๋ก, ์ธ๋ก ์ค ์
int iStar1 = 0, iStar2 = 0;
int iAIStar1 = 0, iAIStar2 = 0;
for (int i = 0; i < 5; ++i) {
// ๋ณ ๊ฐ์ 0์ผ๋ก ์ด๊ธฐํ
iStar1 = iStar2 = 0;
iAIStar1 = iAIStar2 = 0;
for (int j = 0; j < 5; ++j) {
// ๊ฐ๋ก ๋ณ ๊ฐ์
if (iNumber[i * 5 + j] == INT_MAX) {
++iStar1;
}
// ์ธ๋ก ๋ณ ๊ฐ์
if (iNumber[j * 5 + i] == INT_MAX) {
++iStar2;
}
// AI ๊ฐ๋ก ๋ณ ๊ฐ์
if (iAINumber[i * 5 + j] == INT_MAX) {
++iAIStar1;
}
// AI ์ธ๋ก ๋ณ ๊ฐ์
if (iAINumber[j * 5 + i] == INT_MAX) {
++iAIStar2;
}
}
// ํ์ฌ ์ค์ ๊ฐ๋ก ๋ณ ๊ฐ์๊ฐ ๋ช๊ฐ์ธ์ง iStar1์ ๋ค์ด๊ฐ
// iStar1์ด 5์ด๋ฉด ํ์ค์ด ๋ชจ๋ * ์ด๋ฏ๋ก ๋น๊ณ ์ค ์นด์ดํธ ์ฆ๊ฐ
if (iStar1 == 5) {
++iBingo;
}
if (iStar2 == 5) {
++iBingo;
}
if (iAIStar1 == 5) {
++iAIBingo;
}
if (iAIStar2 == 5) {
++iAIBingo;
}
}
// ์ผ์ชฝ -> ์๋์ชฝ ํ๋จ ๋๊ฐ์
iStar1 = 0;
iAIStar1 = 0;
for (int i = 0; i < 25; i += 6) {
if (iNumber[i] == INT_MAX) {
++iStar1;
}
if (iAINumber[i] == INT_MAX) {
++iAIStar1;
}
}
if (iStar1 == 5) {
++iBingo;
}
if (iAIStar1 == 5) {
++iAIBingo;
}
// ์ค๋ฅธ์ชฝ ์๋จ -> ์ผ์ชฝ ํ๋จ ๋๊ฐ์
iStar1 = 0;
iAIStar1 = 0;
for (int i = 4; i <= 20; i += 4) {
if (iNumber[i] == INT_MAX) {
++iStar1;
}
if (iAINumber[i] == INT_MAX) {
++iAIStar1;
}
}
if (iStar1 == 5) {
++iBingo;
}
if (iAIStar1 == 5) {
++iAIBingo;
}
}
return 0;
}
728x90
๋ฐ์ํ
'๐ฉโ๐ป IoT (Embedded) > C++' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[inflearn ๊ฐ์] ๊ตฌ์กฐ์ฒด - ๊ตฌ์กฐ์ฒด์ ๋ฌธ์์ดํจ์ (0) | 2023.07.04 |
---|---|
[inflearn ๊ฐ์] ๋น๊ณ ๊ฒ์ - ๋น๊ณ ๊ฒ์ AI Hard Mode (1) | 2023.07.03 |
[inflearn ๊ฐ์] ๋น๊ณ ๊ฒ์ - ๋น๊ณ ๊ฒ์ 2 (0) | 2023.07.03 |
[inflearn ๊ฐ์] ๋น๊ณ ๊ฒ์ - ๋น๊ณ ๊ฒ์ 1 (0) | 2023.07.03 |
[inflearn ๊ฐ์] ๊ธฐ๋ณธ ๋ฌธ๋ฒ - ์ซ์ํผ์ฆ๊ฒ์ (0) | 2023.06.30 |
Comments