110 likes | 369 Views
Bricks Game : gotoxy () 를 이용한 화면제어. 문법 : 오로지 비교와 반복 자료구조 : int , char, 그나마 배열 , 포인 터 약간 . 함수 : gotoxy ( ), Sleep( ), GetAsyncKeyState ( ) .. 등. Gotyxy ( int x, int y) : 커서를 옮기는 기능. 콘솔의 기본 사이즈는 80*25. void gotoxy ( int x,int y ) {
E N D
Bricks Game: gotoxy()를 이용한 화면제어 문법 : 오로지 비교와 반복 자료구조 : int, char, 그나마 배열, 포인터 약간.함수 : gotoxy( ), Sleep( ), GetAsyncKeyState( ) .. 등
Gotyxy(intx, int y) : 커서를 옮기는 기능 • 콘솔의 기본 사이즈는 80*25. • void gotoxy(intx,int y) • { • // 기본은 좌측상단의 첫 값은 (0,0)부터 시작, 우측하단은(79,24) • // (1,1)~ (80,25)로 사용하고 싶다면, 아래와 같이 (x-1), (y-1) 의 형태로 사용해도 됩니다. • COORD Pos = {x-1,y-1}; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),Pos); • }
print_box( ) & print_dot( ) • // 해당 위치에 문자(char)출력하기, • void print_dot(int x, inty,charch) • { • gotoxy(x,y); • printf("%c",ch); • } //화면에테두리 그리기 print_box(intx, int y, char ch){ int i, j; for ( i = MIN_X; i <=MAX_X; i++ ){ for ( j = MIN_Y; j <=MAX_Y; j++ ) if (i == MIN_X || i == MAX_X || j == MAX_Y || j == MIN_Y ){ gotoxy(i , j); printf(“%c”,ch); } } }
#define을 활용하세요 //값은 여러분이 알아서 #define MIN_X 2 #define MIN_Y 1 #define MAX_X 75 #define MAX_Y 20 #define delay(n) Sleep(n)
필요한함수들. gotoxy(int x, int y) : 커서의 위치 이동 GetAsyncKeyState(LEFT) : key 감지 API, LEFTkey가 눌려졌는가? system(“cls”) : 화면을 지우는 DOS명령어 cls를 호출한다. //더 찾아보도록 하세요. 도스모드 관련 제어 함수들 확장키의 입력에 관하여 setColor( ) getColor( )등
화면에 ‘*’를 출력하고 자취를 지워공이 튀는 듯하게 만들어 봅니다. 만들기전에 반드시좌표값의 이동상황을 그려볼 것!. 그리고 나서 좌표값을 나타내는 변수들을 제어하세요. 혼자 힘으로 해보고 더 좋은 방법을 찾아보세요 int main{ int x, y, xv, yv ; x=y=10; //시작 위치 xv=yv=1; //방향전환을 위한 값 while(1) { //delete_bar(x, y, bar_x); print_dot(x,y,' '); if(x <= MIN_X || x >= MAX_X) xv *= -1; if(y <= MIN_Y || y >= MAX_Y) yv*= -1; x += xv; y += yv; print_dot(x,y,'*'); delay(50); } return 0; }
자 이제, 화면에 bar ‘_______’ 를추가합니다. Voidprint_bar(int x, char *s,intsize) { } 의형태도 좋습니다. void print_bar(intx, ) { gotoxy(x, 17); // bar가 표시될 위치 printf("-------"); } void delete_bar(int x, int y, int bar_x) { inti; print_dot(x, y, ' '); for(i = bar_x ; i < bar_x+7 ; i++) //저위의 bar size가 7이므로. print_dot(i, 17, ' '); }
확장키 입력을 위한 define #define LEFT VK_LEFT #define RIGHT VK_RIGHT #define UP VK_UP #define DOWN VK_DOWN #define ESCAPE VK_ESCAPE void print_bar(int x) { gotoxy(x, 17); printf("-------"); } void delete_bar(int x, int y, int bar_x) { inti; print_dot(x, y, ' '); for(i = bar_x ; i < bar_x+7 ; i++) print_dot(i, 17, ' '); }
int main( ) { (중략) x=y=10; //시작 위치 xv=yv=1; //방향전환을 위한 값 intbar_x = 17; //bar의 위치 while(1) • { • delete_bar(x, y, bar_x); • if(x <= MIN_X || x >= MAX_X) xv *= -1; • if(y <= MIN_Y || y >= MAX_Y) yv *= -1; • //bar에 닿았을 때도 방향을 바꾸게 하기 위해서if( (y == bar_x&& (x >= bar_x && x <= bar_x+ 7))) yv *= -1; • if(GetAsyncKeyState(LEFT) ) bar_x--; • if(GetAsyncKeyState(RIGHT)) bar_x++; • if(GetAsyncKeyState(ESCAPE)) { • system("cls"); • gotoxy(25,10); • system("종료합니다."); • break; • } • x += xv; • y += yv; • print_dot(x,y,'*'); • print_bar(bar_x); • delay(50); • } • return 0; } Bar를 추가하여 함께 이동시키는 주요 코드 • int main( int x, y, xv, yv ; x=y=10; //시작 위치 xv=yv=1; //방향전환을 위한 값 while(1) { //delete_bar(x, y, bar_x); print_dot(x,y,' '); if(x <= MIN_X || x >= MAX_X) xv *= -1; if(y <= MIN_Y || y >= MAX_Y) yv *= -1; x += xv; y += yv; print_dot(x,y,'*'); delay(50); } • return 0; • }
Space를 누르면 위쪽으로 총알이 발사되게 ? • Space 키가 눌려졌는지 검사하는 부분 추가 • 총알이 발사되는 (것 처럼 보이는) 함수 작성합니다. • Shoot(int x, int y, char c) • X는 Bar의 중간위치 y는 bar의 초기위치를 인자로 받아. • c를 출력하도록 하세요 • Y위 위치가 Min_y보다 작을 때까지 반복.
나머지는 응용해보도록 하세요 Color 기능 벽돌추가 아이템 Sound 등