날짜 : 190512
주제 : 숫자퍼즐게임
GitHub :
main2.cpp 파일입니다.
https://github.com/crobbit-kent/CPP_BASIC_PRACTICE/tree/master/baseball/baseball
#include <iostream>
#include "time.h"
#include "conio.h" // 콘솔창에서 입출력하는 기능들을 제공해주는 헤더파일
using namespace std;
int main()
{
// 강의 15화 : 숫자퍼즐게임
srand((unsigned int)time(0));
int iNumbers[25] = {};
for (int i = 0; i < 24; ++i)
{
iNumbers[i] = i + 1; // 1~24
}
// 가장 마지막 칸은 공백으로 비워둔다. 공백을 의미하는 값으로 특수한 값을 사용할 예정
// INT_MAX라는 값은 int의 최대값
iNumbers[24] = INT_MAX; // 값을 보기 위해서는 클릭한 후 f12를 클릭해본다.
// 별이 있는 위치를 저장할 변수를 만든다.
int iStarIndex = 24;
int iIndex;
// 인덱스 : 0 ~ 23
int iTemp, idx1, idx2;
for (int i = 0; i < 100; ++i)
{
idx1 = rand() % 24;
idx2 = rand() % 24;
//iTemp = iNumbers[idx1];
//iNumbers[idx1] = iNumbers[idx2];
//iNumbers[idx2] = iTemp;
}
while(true)
{
system("cls");
for (int i = 0; i < 5; ++i)
{
for (int j = 0; j < 5; ++j)
{
if (iNumbers[5 * i + j] == INT_MAX)
{
cout << "*\t";
}
else
cout << iNumbers[5 * i + j] << "\t";
}
cout << endl;
}
bool bWin = true;
// 퍼즐을 맞추었는지 체크
for (int i = 0; i < 24; ++i)
{
if (iNumbers[i] != i + 1)
{
bWin = false;
break;
}
}
if (bWin == true)
{
cout << "축하합니다. 숫자를 모두 맞췄습니다!" << endl;
break;
}
cout << "----------------------------------------------" << endl;
cout << "W : 위, S : 아래, A : 왼쪽, D : 오른쪽, Q : 종료" << endl;
// Enter를 치지 않더라도 문자를 누르는 순간 바로 그 문자를 반환하고 종료
char cInput = _getch();
if (cInput == 'q' || cInput == 'Q')
break;
// 이게 if보다 편하다
switch (cInput)
{
// 별을 '찾아서' 위로 이동시킨다.
case 'w':
case 'W':
// 별이 가장 윗줄일 경우... 아무것도 작동하지 않는다.
if (iStarIndex > 4)
{
iNumbers[iStarIndex] = iNumbers[iStarIndex - 5];
iNumbers[iStarIndex - 5] = INT_MAX;
iStarIndex -= 5;
}
break;
case 's':
case 'S':
if (iStarIndex < 20)
{
iNumbers[iStarIndex] = iNumbers[iStarIndex + 5];
iNumbers[iStarIndex + 5] = INT_MAX;
iStarIndex += 5;
}
break;
case 'a':
case 'A':
if ((iStarIndex % 5) != 0)
{
iNumbers[iStarIndex] = iNumbers[iStarIndex - 1];
iNumbers[iStarIndex - 1] = INT_MAX;
--iStarIndex;
}
break;
case 'd':
case 'D':
if ((iStarIndex % 5) != 4)
{
iNumbers[iStarIndex] = iNumbers[iStarIndex + 1];
iNumbers[iStarIndex + 1] = INT_MAX;
++iStarIndex;
}
break;
}
}
cout << endl << "게임을 종료합니다." << endl;
system("pause");
return 0;
}
/*
숙제 : 숫자빙고게임을 만들어보자...
1~25까지의 숫자가 있고 이 숫자를 골고루 섞어서 5X5로 출력
플레이어는 숫자를 입력받는다. 1~25 사이
0을 입력하면 게임을 종료
숫자를 입력받았으면 숫자목록 중 입력받은 숫자를 찾아서 *로 만들어준다
숫자를 *로 만든 후에 빙고 줄 수를 체크한다. 5X5이기 때문에 가로 5 줄 세로 5 줄 대각선 2줄이 나올 수 있따.
빙고줄이 몇줄인지 체크해서 화면에 보여준다.
5줄 이상 빙고한 경우 게임을 종료.
*/
'C++ 기초 강의 정리(YOUTUBE) ' 카테고리의 다른 글
C/C++ 강의 20화 : 구조체와 문자열 함수 [어소트락 유튜브] (0) | 2019.05.17 |
---|---|
C/C++ 과제 4 : 빙고게임 AI 구현 [어소트락 유튜브] (0) | 2019.05.15 |
C/C++ 강의 12화 : 배열 [어소트락 유튜브] (0) | 2019.05.13 |
C/C++ 과제 2 : 야구게임 [어소트락 유튜브] (0) | 2019.05.13 |
C/C++ 과제 1 : 구구단, 별 출력 [어소트락 유튜브] (0) | 2019.05.13 |