상단에서 바라보는 시점으로 하여서 이동하는 것에 대해서 예제를 꾸며 보았습니다.


이번에는 측면으로 이동하는 것에 대해서 만들어 봤습니다.


땅이나 낙사나 이런건 없지만 그냥 모양만....



#include <stdio.h>

#include <stdlib.h>

#include <conio.h>

#include <Windows.h>


typedef struct {

int x;

int y;

char isJumping;

}Pos;


void Move(Pos*, int);

void Jump(Pos*);

void Fall(Pos*);

void KeyEvent(Pos*);

void PrintScreen(Pos*);


int main(void)

{

Pos pos;


pos.x = 0;

pos.y = 0;

pos.isJumping = 0;


while (1)

{

Fall(&pos);

KeyEvent(&pos);

PrintScreen(&pos);

Sleep(50);

}

}


/*

움직임을 담당하는 함수입니다.

pos : 포인터로 좌표 관련 구조체를 넘겨준다.

range : 이동할 거리를 넘겨준다.(좌, 우)

*/

void Move(Pos* pos, int range)

{

if (pos->x > 0 || range >= 0)

pos->x += range;

}

/*

점프 기능을 담당하는 함수 입니다.

pos : 현 캐릭터의 위치 구조체 포인터

*/

void Jump(Pos* pos)

{

if (pos->isJumping == 0)

{

pos->y+=5;

}

}

/*

키 이벤트 관련 처리를 하는 함수 입니다.

pos : 현 캐릭터의 위치 구조체 포인터

*/

void Fall(Pos* pos)

{

if (pos->y > 0)

{

pos->isJumping = 1;

pos->y--;

}

else

{

pos->isJumping = 0;

}

}

void KeyEvent(Pos *pos)

{

int input;


if (_kbhit())

{

input = _getch();


switch (input)

{

case 'A':

case 'a':

Move(pos, -1);

break;

case 'D':

case 'd':

Move(pos, 1);

break;

case 'W':

case 'w':

Jump(pos);

break;

}

}

}


/*

화면 출력 기능을 합니다.

pos : 현 캐릭터의 위치 구조체 포인터

*/

void PrintScreen(Pos *pos)

{

int i, j;


system("cls");


for (i = 0; i <= 30; i++)

{

if (pos->y == 30-i)

{

for (j = 0; j <= pos->x; j++)

printf(" ");

printf("@");

}

printf("\n");

}

printf("============================================================================================================");

}



이동 예제 (측면).exe


위는 예제 파일 입니다.


실행해보시면 보잘 것 없습니다.





그리고 뭐 이런저런 것 없이 움직이는 것만 집중 했기에 조작감이나 보이는 모양새는 정말로 하찮습니다...


윈도우 헤더 파일을 가져온 이유는 Sleep 함수를 사용하기 위해서 포함시켰습니다.