오늘은 약속대로 돌 움직이기

getch()함수로 키보드 값을 입력받고 돌을 움직입니다.

방향키
↑  : 72
↓  : 80
← : 75
→ : 77
대중 아스키값 ㅇㅅㅇ

있어보이게 소스 상단에 #define을 사용해서 방향키 값을 정리합니다.
[code]
#define UP 72
#define DOWN 80
#define LEFT 75
#define RIGHT 77
[/code]

키보드입력에 따라 돌을 출력하려면 커서를 이동시키는 함수가 필요합니다.

gotoxy함수인데 안되는 컴파일러가 많으니 직접 만들어서 써야징
[code]
void gotoxy(int x, int y)
{
    COORD XY = {x, y};
    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), XY);
}
[/code]

키보드 값을 입력받고 돌을 출력하는 함수

[code]
void move()
{
    char input=0;
    input=getch();

    switch(input)
    {
    case UP :
        if(y>0)
        {
            y-=1;
            oldy=y+1;
            gotoxy(x,y);
            puts("⊙");

            gotoxy(x,oldy);
            if(oldy==18)
            {
                if(x==0)
                {
                    puts("└");
                }
                if(x==36)
                {
                    puts("┘");
                }
                else if(x!=0&&x!=36)
                {
                    puts("┴");
                }
            }
            else if(x==0)
            {
                puts("├");
            }
            else if(x==36)
            {
                puts("┤");
            }
            else
            {
                puts("┼");
            }

        }
        break;

    case DOWN :
        if(y<18)
        {
            y+=1;
            oldy=y-1;
            gotoxy(x,y);
            puts("⊙");

            gotoxy(x,oldy);
            if(oldy==0)
            {
                if(x==0)
                {
                    puts("┌");
                }
                if(x==36)
                {
                    puts("┐");
                }
                else if(x!=0&&x!=36)
                {
                    puts("┬");
                }
            }
            else if(x==0)
            {
                puts("├");
            }
            else if(x==36)
            {
                puts("┤");
            }
            else
            {
                puts("┼");
            }

        }
        break;

    case LEFT :
        if(x>0)
        {
            x-=2;
            oldx=x+2;
            gotoxy(x,y);
            puts("⊙");
            gotoxy(oldx,y);
            if(oldx==36)
            {
                if(y==0)
                {
                    puts("┐");
                }
                if(y==18)
                {
                    puts("┘");
                }
                else if(y!=0&&y!=36)
                {
                    puts("┤");
                }
            }
            else if(y==18)
            {
                puts("┴");
            }
            else if(y==0)
            {
                puts("┬");
            }
            else
            {
                puts("┼");
            }

        }
        break;

    case RIGHT :
        if(x<36)
        {
            x+=2;
            oldx=x-2;
            gotoxy(x,y);
            puts("⊙");

            gotoxy(oldx,y);
            if(oldx==0)
            {
                if(y==0)
                {
                    puts("┌");
                }
                if(y==18)
                {
                    puts("└");
                }
                else if(y!=0&&y!=36)
                {
                    puts("├");
                }
            }
            else if(y==18)
            {
                puts("┴");
            }
            else if(y==0)
            {
                puts("┬");
            }
            else
            {
                puts("┼");
            }

        }
        break;
    }
}
[/code]

넘 조잡해보인다 ㅡ,.ㅡ ㅋㅋ

지금까지 포스팅한 함수를 모두 사용해서 만든 소스
[code]
#include <stdio.h>
#include <windows.h>
#define UP 72
#define DOWN 80
#define LEFT 75
#define RIGHT 77

int x=0,y=0;
int oldx=0,oldy=0;

void gotoxy(int, int);
void draw();
void move();

int main()
{
    draw();
    while(1)
    {
        move();
    }


    system("PAUSE");   
    return 0;
}

void gotoxy(int x, int y)
{
    COORD XY = {x, y};
    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), XY);
}

void draw()
{       
    char a[39][39]=
    {
        "┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐",
        "├┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┤",
        "└┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┘"
    };
    int count;
    printf("%s\n",a[0]);
    for(count=0;count<17;count++)
        printf("%s\n",a[1]);
    printf("%s",a[2]);
}

void move()
{
    char input=0;
    input=getch();

    switch(input)
    {
    case UP :
        if(y>0)
        {
            y-=1;
            oldy=y+1;
            gotoxy(x,y);
            puts("⊙");

            gotoxy(x,oldy);
            if(oldy==18)
            {
                if(x==0)
                {
                    puts("└");
                }
                if(x==36)
                {
                    puts("┘");
                }
                else if(x!=0&&x!=36)
                {
                    puts("┴");
                }
            }
            else if(x==0)
            {
                puts("├");
            }
            else if(x==36)
            {
                puts("┤");
            }
            else
            {
                puts("┼");
            }

        }
        break;

    case DOWN :
        if(y<18)
        {
            y+=1;
            oldy=y-1;
            gotoxy(x,y);
            puts("⊙");

            gotoxy(x,oldy);
            if(oldy==0)
            {
                if(x==0)
                {
                    puts("┌");
                }
                if(x==36)
                {
                    puts("┐");
                }
                else if(x!=0&&x!=36)
                {
                    puts("┬");
                }
            }
            else if(x==0)
            {
                puts("├");
            }
            else if(x==36)
            {
                puts("┤");
            }
            else
            {
                puts("┼");
            }

        }
        break;

    case LEFT :
        if(x>0)
        {
            x-=2;
            oldx=x+2;
            gotoxy(x,y);
            puts("⊙");
            gotoxy(oldx,y);
            if(oldx==36)
            {
                if(y==0)
                {
                    puts("┐");
                }
                if(y==18)
                {
                    puts("┘");
                }
                else if(y!=0&&y!=36)
                {
                    puts("┤");
                }
            }
            else if(y==18)
            {
                puts("┴");
            }
            else if(y==0)
            {
                puts("┬");
            }
            else
            {
                puts("┼");
            }

        }
        break;

    case RIGHT :
        if(x<36)
        {
            x+=2;
            oldx=x-2;
            gotoxy(x,y);
            puts("⊙");

            gotoxy(oldx,y);
            if(oldx==0)
            {
                if(y==0)
                {
                    puts("┌");
                }
                if(y==18)
                {
                    puts("└");
                }
                else if(y!=0&&y!=36)
                {
                    puts("├");
                }
            }
            else if(y==18)
            {
                puts("┴");
            }
            else if(y==0)
            {
                puts("┬");
            }
            else
            {
                puts("┼");
            }

        }
        break;
    }
}
[/code]
사용자 삽입 이미지

전 위치에 있는 돌을 직접 지워줘야하는 노가다 ㅡ,.ㅡ 너무 힘들어

질문 있으시면 리플 남겨주세요.

Ps.이거 소스만 올리고 너무 날로 먹는거 아냐?
     너무 설명 잘해놓으면 리플이 안달리니......

이 글이 유익하다면 (굽신굽신) ->

Trackback Address >> http://zfanta.com/trackback/303 관련글 쓰기

  1. BlogIcon nob 2008/01/20 21:17  address  modify / delete  reply

    와우.

  2. sju 2008/10/30 17:55  address  modify / delete  reply

    질문이 있는데요 if문에서 x는 36까지 값을 검사하고 y는 18까지 값을 검사하는데
    바둑판이 19*19면 둘다 18까지 검사하면 되는거 아닌가요??

    •  address  modify / delete 2008/10/31 16:03 BlogIcon  환타

      ┌,⊙등의 문자들은 콘솔에서 옆으로 두 칸을 차지하기때문에 2씩 옮기게 되잖아요???????
      case RIGHT나 LEFT에서 1씩 움직이게 변경한 후 컴파일 해보시면 아실거에요 ㅎㅎ