2010년 4월 17일 토요일

박스가 움직이는 프로그램~

#include
#include
#include

void gotoxy(int x, int y);
void draw(int,int,int,int);
void red();

void main(void)
{
int sx=38,ex=41,sy=9,ey=11; //중앙에 박스 그리기
char ch = 1; //입력 받을 키값 esc 27이 들어오면 종료가 대니까 27이아닌값으로 초기화

draw(sx,ex,sy,ey);

while(ch!=27){ // esc의 아스키값 27이면 종료

ch = getch();
fflush(stdin);

/*각 방향키 위(8), 아래(2), 왼쪽(4), 오른쪽(6)키가 눌렸을시 행동 실행시 창으 최대 크기는 80 by 24로 본다.*/
/*각 벽에 상자가 붙을시 더옮기지 말라고 경고음을 주고 그래도 눌른다면 다시 벽에 붙은 사각형을 그려준다.*/
switch(ch){

case '8' :
system("cls");
draw(sx,ex,sy-1,ey-1); //위로 박스를 올리면 시작과 끝의 y점의 수치가 감소.
Sleep(200);//박스가 그려지는 시간 지연
sy-=1; ey-=1;//그린후 좌표 기억

if(sy == 1) {
printf("\a");
system("cls");
draw(sx,ex,sy,ey);
} //경계선에 다으면 더입력하지 말라고 경고음을 낸다
else if(sy < 1) {
printf("\a");
system("cls"); //경고를 무시하고 눌를시 경계에 닿은 원을 그리고 좌표를 기억한다.
draw(sx,ex,sy+1,ey+1);
sy+=1; ey+=1;
}
break;

case '2' :
system("cls");
draw(sx,ex,sy+1,ey+1); //아래로 박스를 내리면 시작과 끝의 y점의 수치가 증가.
Sleep(200);//박스가 그려지는 시간 지연
sy+=1; ey+=1;

if(ey == 24) {
printf("\a");
system("cls");
draw(sx,ex,sy,ey);
} //끝라인경계선에 다으면 더입력하지 말라고 경고음을 낸다
else if(ey > 24) {
printf("\a");
system("cls"); //경고를 무시하고 눌를시 경계에 닿은 원을 그리고 좌표를 기억한다.
draw(sx,ex,sy-1,ey-1);
sy-=1; ey-=1;
}
break;

case '4' :
system("cls");
draw(sx-1,ex-1,sy,ey); //왼쪽으로 박스를 옮기면 시작과 끝의 x점의 수치가 감소.
Sleep(200); //박스가 그려지는 시간 지연
sx-=1; ex-=1;

if(sx == 1) {
printf("\a");
system("cls");
draw(sx,ex,sy,ey);
} //경계선에 다으면 더입력하지 말라고 경고음을 낸다
else if(sx < 1) {
printf("\a");
system("cls"); //경고를 무시하고 눌를시 경계에 닿은 원을 그리고 좌표를 기억한다.
draw(sx+1,ex+1,sy,ey);
sx+=1; ex+=1;
}
break;

case '6' :
system("cls");
draw(sx+1,ex+1,sy,ey); //오른쪽으로 박스를 옮기면 시작과 끝의 x점의 수치가 증가.
Sleep(200); //박스가 그려지는 시간 지연
sx+=1; ex+=1;

if(ex == 80) {
printf("\a");
system("cls");
draw(sx,ex,sy,ey);
} //경계선에 다으면 더입력하지 말라고 경고음을 낸다
else if(ex > 80) {
printf("\a");
system("cls"); //경고를 무시하고 눌를시 경계에 닿은 원을 그리고 좌표를 기억한다.
draw(sx-1,ex-1,sy,ey);
sx-=1; ex-=1;
}
break;
} //swtich case 블럭 끝

} //while 블럭 끝

}


void draw(int sx,int ex,int sy,int ey)
{
int i,j,k;

gotoxy(sx, sy);
for(i=1 ; i <= ex-sx+1; i++){ //사각형 윗줄 시작부터 끝까지
printf("*");
} //윗줄 출력

for(k=0 ; k <= ey-sy; k++){
gotoxy(sx,k+sy);
printf("*");
gotoxy(ex,k+sy);
printf("*");
} //왼쪽오른쪽 줄 출력
gotoxy(sx, ey);
for(j=1 ; j <= ex-sx+1; j++){
printf("*");
} //아랫줄 출력

printf("\n");

}

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

댓글 없음:

댓글 쓰기