#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <conio.h>
#define xy 13
void right(int arr[xy][xy],int *x,int *y,int inwall,int wall,int *remember)
{
if(arr[*x][(*y)+1]==inwall || arr[*x][(*y)+1]==wall)
{}
else
{
*remember=arr[(*x)][++(*y)];
}
}//right
void left(int arr[xy][xy],int *x,int *y,int inwall,int wall,int *remember)
{
if(arr[*x][(*y)-1]==inwall || arr[*x][(*y)-1]==wall)
{}
else
{
*remember=arr[(*x)][--(*y)];
}
}//left
void up(int arr[xy][xy],int *x,int *y,int inwall,int wall,int *remember)
{
if(arr[(*x)-1][(*y)]==inwall || arr[*x][(*y)]==wall)
{}
else
{
*remember=arr[--(*x)][(*y)];
}
}//up
void down(int arr[xy][xy],int *x,int *y,int inwall,int wall,int *remember)
{
if(arr[(*x)+1][(*y)]==inwall || arr[(*x)+1][(*y)]==wall)
{}
else
{
*remember=arr[++(*x)][(*y)];
}
}//down
void movef(char cur,int arr[xy][xy],int *x,int *y,int inwall,int wall,int *remember)
{
switch(cur)
{
case 77:
right(arr,x,y,inwall,wall,remember);
break;
case 75:
left(arr,x,y,inwall,wall,remember);
break;
case 72:
up(arr,x,y,inwall,wall,remember);
break;
case 80:
down(arr,x,y,inwall,wall,remember);
break;
}
}
void change(int d)
{
int space=0;
int wall=1;
int my=2;
int you=3;
int inwall=4;
int move=5;
int setcolor[10]={1,8,13,10,15,15,15};
HANDLE hConsole;
hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(hConsole, setcolor[d]);
char str[10][3]={" ","■","●","●","▧","◈","●"};
printf("%s",&str[d][0]);
}//change
int lencheak(int maxlen)
{
int i;
for(i=0;i*i<maxlen;i++);
return i-1;
}//lencheak
int main(void)
{
int x;
int y;
int remember=0;
int space=0;
int wall=1;
int inwall=4;
int my=2;
int you=3;
int move=5;
int arr[xy][xy];
int maxlen;
int stagenum;
int i=0;
int j=0;
int data=0;
char cur=-32;
char recur=0;
int zx;
int zy;
int zhit;
//파일오픈
FILE *fp=fopen("stage1.txt","r");
//파일오픈오류체크
if(fp==NULL)
{
puts("파일오픈 실패!");
return -1;
}
//최대길이받기
fscanf(fp,"%d",&maxlen);
//먼지 모르겟지만 필요없는 숫자 제거
fscanf(fp,"%d",&stagenum);
//배열에 map읽어서 집어넣기
for(i=0;i<xy;i++)
{
for(j=0;j<xy;j++)
{
fscanf(fp,"%d",&data);
arr[i][j]=data;
}
}//for i
//커서 초기치 집어넣기
arr[xy/2][xy/2]=5;
//커서 좌표값 잡기
x=xy/2;
y=x;
//배열 출력하기
while(1)
{
system("cls");
for(i=0;i<xy;i++)
{
for(j=0;j<xy;j++)
{
change(arr[i][j]);
}
printf("\n");
}//for i
for(;;)
{
if(cur!=-32)
recur=cur;
cur=getch();
if(cur!=-32)
break;
}
arr[x][y]=remember;
movef(cur,arr,&x,&y,inwall,wall,&remember);
arr[x][y]=move;
}
system("pause");
return 0;
}