날짜 : 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줄 이상 빙고한 경우 게임을 종료. 
*/

+ Recent posts