프로그래밍/C언어 2016. 6. 7. 04:06

맵 만들기 


1. 맵을 만든다.(벽에 닿으면 못나가게 충돌체크)


2. 움직일 플레이어와 도착지점을 만든다.


3. 플레이어가 도착점에 들어가면 종료


-----------------------------------------------------------------------------------------------------------


이번 문제는 VS에서 주는 기본적인 함수를 알고 깨야한다.


void setXY(int x, int y)

{

// 함수값을 정해주는 함수

COORD Pos = { x, y };


SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), Pos);

}


바로 이 함수인데, 좌표값을 잡아주는 함수이다. 함수 이름은 마음대로 정해도 된다.


꼭 배열로 안 만들어도 되지만, 쉽고 간편하게 만들기 위해서 배열을 사용한다.


필자는 배열에 0 , 1 , 2라는 숫자를 넣었고 각각 ROAD,BLOCK, FINISH 로 enum으로 이름을 정의해 줬다. (꼭 해줄 필요는 없다. 가독성을 위해서 한 것 이므로)


그리고 배열로 출력을 어떻게 해요 라는 분들이 있는데, 우리에게는 setXY 함수가 있으니 활용을 하면 된다! 필자 같은 경우에는 

void Render()

{

setXY(m_x * 2, m_y);

printf("%s", m_name);

}

이런식으로 사용했다. 솔직히 x에 2를 왜 곱하는지는 모르겠지만 흠흠... 일단 오른쪽으로 가려면 꼭 2배로 증가해야 한다는 사실을 알아두도록 하자. 


int map[WIDTH][HEIGHT] =

{

{ 1,1,1,1,1,1,1,1,1,1 },

{ 1,0,1,0,0,0,0,0,0,1 },

{ 1,0,1,0,0,0,0,1,0,1 },

{ 1,0,0,1,0,0,0,1,0,1 },

{ 1,0,0,1,0,0,0,0,0,1 },

{ 1,0,0,0,0,1,1,0,0,1 },

{ 1,0,0,0,0,1,1,0,0,1 },

{ 1,0,0,0,0,0,0,0,0,1 },

{ 1,0,0,0,0,1,1,0,2,1 },

{ 1,1,1,1,1,1,1,1,1,1 },

};

이렇게 배열을 짰고 출력 할때는 

for (int i = 0; i < WIDTH; i++)

{

for (int j = 0; j < HEIGHT; j++)

{

setXY( i* 2,j);

if(map[i][j]==0)

printf("");

else if(map[i][j]==1)

printf("□");

else if(map[i][j]==2)

printf("☆");

}

}


대충 이렇게 해주면 될 듯하다. 


이번꺼는 원래 C++로 짰다. C로 바꾸기 귀찮아서.... C++로 올리겠다. 차이는 구조체를 클래스로 만들어줬자는 거 밖에 없으므로 그렇게 혼동은 안 올 것이다.





posted by 천마서생
: