๐Ÿ˜Ž ๊ณต๋ถ€ํ•˜๋Š” ์ง•์ง•์•ŒํŒŒ์นด๋Š” ์ฒ˜์Œ์ด์ง€?

[inflearn ๊ฐ•์˜] ๋น™๊ณ ๊ฒŒ์ž„ - ๋น™๊ณ ๊ฒŒ์ž„ AI Easy Mode ๋ณธ๋ฌธ

๐Ÿ‘ฉ‍๐Ÿ’ป IoT (Embedded)/C++

[inflearn ๊ฐ•์˜] ๋น™๊ณ ๊ฒŒ์ž„ - ๋น™๊ณ ๊ฒŒ์ž„ AI Easy Mode

์ง•์ง•์•ŒํŒŒ์นด 2023. 7. 3. 20:13
728x90
๋ฐ˜์‘ํ˜•

<๋ณธ ๋ธ”๋กœ๊ทธ๋Š” ์–ด์†ŒํŠธ๋ฝ ๊ฒŒ์ž„์•„์นด๋ฐ๋ฏธ ๋‹˜์˜ ์œ ํŠœ๋ธŒ๋ฅผ ์ฐธ๊ณ ํ•ด์„œ ๊ณต๋ถ€ํ•˜๋ฉฐ ์ž‘์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค :-)>

=> 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
๋ฐ˜์‘ํ˜•
Comments