#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <iostream>
#include <fstream> // c++ 에서 파일 읽기
#include <conio.h> // 방향키 읽기
#include <opencv2\core\core.hpp>
#include <opencv2\highgui\highgui.hpp>
#define MAX_PICTURE 8
using namespace std;
using namespace cv;
void showRelation(int(*map)[4]);
int getDirection(int inputKey);
int getAsciiDirection(int inputKey);
String getFileName(int fileIndex);
const char* win_name = "STREET VIEW ver1.0";
int main(){
//위치 관계 정보 초기화
//int map[MAX_PICTURE][4] = { { -1, -1, -1, 1 }, { 5, -1, 0, 2 }, { -1, -1, 1, 3 }, { -1, -1, 2, 4 }, { -1, -1, 3, -1 }, { 6, 1, -1, -1 }, { 7, 5, -1, -1 }, { -1, 6, -1, -1 } }; //실외 관계도
int map[MAX_PICTURE][4] = { { 1, -1, -1, -1 }, { -1, 0, 2, -1 }, { -1, -1, 3, 1 }, { -1, -1, 4, 2 }, { -1, -1, -1, 3 } }; //실내 관계도
//변수 초기화
int index = 0;
showRelation(map);
int indexNum = 0;
char keyDirection = ' ';
//인덱스 받고 첫화면
cout << "input index number : ";
cin >> indexNum;
if ((MAX_PICTURE < indexNum) || (indexNum < 0)){
cout << "Error : out of range !" <<endl;
cout << "You have to input just 0 < input < "<< MAX_PICTURE << endl;
return -1;
}
Mat streetImage = imread(getFileName(indexNum));
imshow(win_name, streetImage);
waitKey(30);
//방향으로 이동하기
int dir = -1;
int tempDir = -1;
while (keyDirection != '\n'){
system("cls"); //화면 지우기
showRelation(map); // 관계표 띄워주기
cout << "current index : " << indexNum << endl;
cout << "input direction (e/w/s/n) : ";
cin >> keyDirection;
dir = getDirection(keyDirection);
if (map[indexNum][dir] != -1){ // 가고자 하는 방향에 사진이 있을 때만
indexNum = map[indexNum][dir]; //indexNUm에 그 사진 index 넣어주기
streetImage = imread(getFileName(indexNum) , 1);
imshow(win_name, streetImage);
}
waitKey(30);
}
//종료
destroyAllWindows();
return 0;
}
// jpg 파일 이름 받아오기
String getFileName(int fileIndex){
char temp[64];
char buf[128];
char extension[5] = ".jpg";
itoa(fileIndex, buf, 10);
strcat(buf, extension);
String dst = buf;
//cout << buf << endl;
return dst;
}
// index들의 관계 보여주기
void showRelation(int (*map)[4]){
cout << "########### STREET VIEW ver1.0 ##########" << endl;
cout << "#index\t동\t서\t남\t북\t#" << endl;
for (int i = 0; i < MAX_PICTURE; i++){
cout << "# " << i << '\t';
for (int j = 0; j < 4; j++){
cout << map[i][j] << '\t';
}
cout << "#" << endl;
}
cout << "#########################################" << endl;
}
// ewsn 받아서 방향으로 바꿔주기
int getDirection(int inputKey){
int dir;
switch (inputKey)
{
case 'e':
dir = 0;
break;
case 'w':
dir = 1;
break;
case 's':
dir = 2;
break;
case 'n':
dir = 3;
break;
default:
dir = NULL;
break;
}
return dir;
}
// 방향키로 방향 받아오기 ( 미완성 )
int getAsciiDirection(int inputKey){
int dir;
switch (inputKey)
{
case 77: // 동
dir = 0;
break;
case 75: //서
dir = 1;
break;
case 80: //남
dir = 2;
break;
case 72: //북
dir = 3;
break;
default:
dir = NULL;
break;
}
return dir;
}