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.이거 소스만 올리고 너무 날로 먹는거 아냐?
너무 설명 잘해놓으면 리플이 안달리니......
와우.
ㅡ,.ㅡ ????
질문이 있는데요 if문에서 x는 36까지 값을 검사하고 y는 18까지 값을 검사하는데
바둑판이 19*19면 둘다 18까지 검사하면 되는거 아닌가요??
┌,⊙등의 문자들은 콘솔에서 옆으로 두 칸을 차지하기때문에 2씩 옮기게 되잖아요???????
case RIGHT나 LEFT에서 1씩 움직이게 변경한 후 컴파일 해보시면 아실거에요 ㅎㅎ