기초단계 - 퍼즐완성시 종료 기능없음.
예외처리는 숫자범위내에서만, 문자입력시 오류.
#include<iostream>
#include<time.h>
using namespace std;
/*
00 01 02 03 04
05 06 07 08 09
10 11 12 13 14
15 16 17 18 19
20 21 22 23 24
조건
배열24의 자리가 시작지점
처음에 표시된 랜덤숫자들은자리이동시변경x
새게임 시작할때만 다시 랜덤으로 배치
해당숫자범위 위치 내에서만 이동가능할것
*/
int main()
{
srand(time(NULL));
int input;
int Number[25] = {}; // 배열 총25개
for (int i = 0; i < 24; i++) // 배열 0~23까지 랜덤숫자자리
{
Number[i] = i + 1; // 1~24까지 출력되도록 1씩더해주기
}
Number[24] = INT_MAX; //배열의 최대값은 고정 24번(25번째자리)
int Star = 24; //0~24배열중 24번자리(숫자로는25번) 별고정확인.
int iTemp, idx1, idx2;
for (int i = 0; i < 100; i++) // 일단 전체 셔플(위에 별자리고정이므로)
{
idx1 = rand() % 24;
idx2 = rand() % 24;
iTemp = Number[idx1];
Number[idx1] = Number[idx2];
Number[idx2] = iTemp;
}
while (true) //반복 실행
{
cout << "\t" << "[슬라이드 퍼즐 게임]" << endl;
cout << endl;
for (int i = 0; i < 5; i++) //5*5로 출력하기 0 1 2 3 4
{
for (int j = 0; j < 5; j++) // 0 1 2 3 4
{
if (Number[i * 5 + j] == INT_MAX) //반복끝에 마지막자리 별확인
{
cout << "*\t"; //숫자사이 간격두기
}
else
{
cout << Number[i * 5 + j] << "\t"; //숫자사이 간격두기
}
}
cout << endl;
}
cout << endl;
cout << "[1]상 [2]하 [3]좌 [4]우 [0]종료" << endl;
cout << "입력 : "; cin >> input;
cout << endl;
if (input > 4) // 예외처리 //문자입력시 예외처리는 못했음.
{
cout << "0~4 까지의 숫자중 입력해 주세요." << endl;
system("pause");
}
if (input == 0) // 0입력 종료
{
break;
}
switch (input) // 입력과 동시에 별 위치 변경 - 여기 잘몰라서 인터넷참고
{
case 1: // 상
if (Star > 4) //별의자리가 4보다 작으면 더이상 윗배열이없다.
{
Number[Star] = Number[Star - 5];
Number[Star - 5] = INT_MAX; // INT_MAX 별자리의 값 변경
Star -= 5; //위로 이동시 배열자리 -5
}
break;
case 2: // 하
if (Star < 20) //별의자리가 20보다크면 더이상 아래배열이없다.
{
Number[Star] = Number[Star + 5];
Number[Star + 5] = INT_MAX; // INT_MAX 별자리의 값 변경
Star += 5; //아래로 이동시 배열자리 +5
}
break;
case 3: // 좌
if (Star % 5 != 0) //5로나눈나머지가 0이 아닐때실행
{
Number[Star] = Number[Star - 1];
Number[Star - 1] = INT_MAX; // INT_MAX 별자리의 값 변경
Star -= 1; //좌로이동시 배열자리가 -1
}
break;
case 4: // 우
if (Star % 5 != 4) //5로 나눈 나머지가 4가 아닐때실행
{
Number[Star] = Number[Star + 1];
Number[Star + 1] = INT_MAX; // INT_MAX 별자리의 값 변경
Star += 1; //우로이동시 배열자리가 +1
}
break;
}
{
system("cls");//입력할때 모두지우고 새로작성
}
}
cout << "게임종료" << endl;
return 0;
}
'공부' 카테고리의 다른 글
스트링 활용 빙고 (0) | 2022.10.26 |
---|---|
숫자 빙고 게임 (0) | 2022.10.24 |
아스키코드 참고자료 (0) | 2022.10.20 |
C++ 하이 로우 세븐 게임 연습 (0) | 2022.10.19 |
DAY6 과제2.숫자야구게임 (0) | 2022.10.17 |
댓글