STUDY/C, C++

[C/C++] 숫자퍼즐게임

sinawi95 2021. 5. 11. 14:00
728x90

www.youtube.com/watch?v=umpMT1xql0I&list=PL4SIC1d_ab-b4zy_3FDRIiohszShOZ0PK&index=16

 

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

int main() {

	srand((unsigned int)time(0));

	int iNumber[25] = {};
	for (int i = 0; i < 24; i++)
	{
		iNumber[i] = i + 1;
	}
	iNumber[24] = INT_MAX;
	
	int iStarIndex = 24;
	int iTemp, idx1, idx2;

	for (int i = 0; i < 100; i++)
	{
		idx1 = rand() % 24;
		idx2 = rand() % 24;

		iTemp = iNumber[idx1];
		iNumber[idx1] = iNumber[idx2];
		iNumber[idx2] = iTemp;
			
	}
	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 << "w: up, s: down, a:left, d:right, q:quit";
		char cInput = _getch();
		if (cInput == 'q' || cInput == 'Q')
			break;
		switch (cInput)
		{
		case 'w': case 'W':
			if (iStarIndex > 4)
			{
				iNumber[iStarIndex] = iNumber[iStarIndex - 5];
				iNumber[iStarIndex - 5] = INT_MAX;
				iStarIndex -= 5;
			}
			break;
		case 's': case 'S':
			if (iStarIndex < 20)
			{
				iNumber[iStarIndex] = iNumber[iStarIndex + 5];
				iNumber[iStarIndex + 5] = INT_MAX;
				iStarIndex += 5;
			}
			break;
		case 'a': case 'A':
			if (iStarIndex % 5 != 0)
			{
				iNumber[iStarIndex] = iNumber[iStarIndex - 1];
				iNumber[iStarIndex - 1] = INT_MAX;
				iStarIndex -= 1;
			}
			break;
		case 'd': case 'D':
			if (iStarIndex % 5 != 4)
			{
				iNumber[iStarIndex] = iNumber[iStarIndex + 1];
				iNumber[iStarIndex + 1] = INT_MAX;
				iStarIndex += 1;
			}
			break;
		
		}
		bool bWin = true;
		for (int i = 0; i < 24; i++)
		{
			if (iNumber[i] != i + 1)
			{
				bWin = false;
				break;
			}
		}
		if (bWin)
		{
			cout << "숫자를 모두 맞췄습니다." << endl;
			break;
		}
	}
	

	return 0;
}

 

무료강의가 있길래 따라 하면서 만들어본 퍼즐게임인데 다 만들고나니까 꽤 재밌다 ㅋㅋㅋ

그리고 새로운 수를 만들어내는 것보다 일정 카드가 있으면 셔플 알고리즘을 사용해서 섞는것도 가능하다는 것도 알게 되었다.

재미도 보고 공부도 하고 일석이조의 강의였다. 

아마 이 강의들을 쭉 들으면서 대부분 따라 해볼것같다

'STUDY > C, C++' 카테고리의 다른 글

[C] scanf 개행 문자 처리  (0) 2021.06.09
[C/C++] 버블 정렬, 카운트 정렬  (0) 2021.06.03
[C] _getch를 사용한 움직임 구현  (0) 2021.04.28
[C] C 프로그래밍 문법 (1)  (0) 2021.03.31
[C] 개발환경 구축  (2) 2021.03.31