#include #include #include #include #include #define MAZE_SIZE 19 // Àü¿ªº¯¼ö ¼±¾ð (Àϸí : Àü󸮹®) #define ROBOT 2 /* ¾ó±¼ ¸ð¾çÀÇ ASCII ÄÚµå */ int maze [MAZE_SIZE] [MAZE_SIZE] = //¹Ì·ÎÀÇ ¸ð¾ç { // intÇüÀÇ 2Â÷¿ø 19Çà 19¿­ÀÇ ¹è¿­ mazeÀÇ ´ëÇÑ ÃʱâÈ­ { 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, // 1ÀÌ¸é º® À̰í, 0ÀÌ¸é ¹Ì·Î ÀÚ¼¼È÷ º¸¸é ¹Ì·Î ó·³ º¸ÀÓ { 0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1}, { 1,0,1,0,1,1,1,0,1,1,1,1,1,0,1,0,1,0,1}, { 1,0,1,0,1,0,0,0,1,0,0,0,0,0,1,0,1,0,1}, { 1,0,1,0,1,1,1,0,1,1,1,1,1,1,1,0,1,0,1}, { 1,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1}, { 1,0,1,1,1,0,1,0,1,1,1,0,1,0,1,0,1,0,1}, { 1,0,0,0,0,0,1,0,1,0,1,0,1,0,1,0,1,0,1}, { 1,1,1,1,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1}, { 1,0,0,0,0,0,1,0,1,0,1,0,1,0,1,0,1,0,1}, { 1,0,1,1,1,1,1,0,1,0,1,0,1,0,1,0,1,0,1}, { 1,0,0,0,0,0,0,0,1,0,0,0,1,0,1,1,1,0,1}, { 1,0,1,1,1,1,1,0,1,0,1,1,1,0,1,0,1,0,1}, { 1,0,1,0,0,0,0,0,1,0,0,0,1,0,1,0,1,0,1}, { 1,0,1,0,1,1,1,1,1,1,1,1,1,0,1,0,1,0,1}, { 1,0,1,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,1}, { 1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,0,0,1}, { 1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0}, { 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, }; int sx = MAZE_SIZE - 1, sy = MAZE_SIZE - 2; // »ýÁãÀÇ Ãâ¹ß À§Ä¡ , ¹Ì·ÎÀÇ ¸ð¾çÀ» º¸¸é ¿À¸¥ÂÊ ÇÏ´ÜÀÌ »ýÁãÀÇ Ãâ¹ß À§Ä¡´Ù. ±×·¡¼­ x,yÁÂÇ¥°ªÀ» ÀÔ·ÂÇϰí ÀÖ´Ù. int *rec; // ÃÖ´Ü °æ·Î °è»êÀ» À§ÇØ »ýÁã°¡ ¿òÁ÷ÀÎ °æ·Î¸¦ ÀúÀå , rec¶ó´Â intÇüÀÇ Æ÷ÀÎÅÍ ¼±¾ð. Æ÷ÀÎÅÍÀÇ °³³äÀ» ¸ð¸£°Ú¾î¸é ¹°¾îºÁ¶ó. ³»¸»°í.. ^^ #define UP 1 #define RIGHT 2 #define DOWN 4 #define LEFT 8 // mainÀ» ºÐ¼®ÇÏ´Ù º¸¸é ¾Ë°Ô µÉÅ×Áö¸¸ UP,RIGHT,DOWN, LEFT´Â ¾ÕÀ¸·Î Àü°³µÉ ÇÁ·Î±×·¥¿¡¼­ ¾ÆÁÖ Áß¿äÇÑ °ªÀÌ´Ù. int get_shape ( int m[] [MAZE_SIZE], int x, int y) // intÇüÀÇ ÇÔ¼ö get_shape()¸¦ ¸¸µç´Ù. ÀÎÀÚ(ÇÔ¼ö°¡ È£ÃâÇÑ ÇÔ¼ö·Î ºÎÅÍ ¹Þ´Â ÃʱâÈ­ µÈ°ª, // ¾ÕÀ¸·Î °è»êÇÒ°ª_)´Â int m[] [MAZE_SIZE], int x, int y·Î ¹Þ°í ÀÖ´Ù. { // º®¹èÄ¡¿¡ µû¸¥ Áß¾Óº®ÀÇ ¸ð¾çÀ» ¸®ÅÏ static shape[] = { 32,179,196,192,179,179,218,195,196,217,196,193,191,180,194,179}; int s = 0; if (m[y][x]) { if (y > 0 && m[y-1] [x]) s |= UP; if (y < MAZE_SIZE - 2 && m[y+1][x]) s |= DOWN; if (x > 0 && m[y][x-1]) s |=LEFT; if (x < MAZE_SIZE - 2 && m[y] [x+1]) s |= RIGHT; } return shape [s]; } void draw_maze(int m[] [MAZE_SIZE]) // draw_maze()ÇÔ¼öÀÇ ÇüÅ¿¡ ´ëÇØ¼­ »ìÆìº¾½Ã´Ù. ¸ÕÀú ÇÔ¼öÀÇ µ¥ÀÌÅÍÇôÀÌ ¿Ö voidÀԴϱî? // 1,2,3,4, "´Ê¾î¼­! 0.4Ãʾȿ¡ ¸»ÀÌ Æ·¾î ³ª¿Í¾ß µÇ. ¿©·¯ºÐ °øºÎ ±×·± ½ÄÀ¸·Î ÇÏ¸é ¾ÈµÇ¿ä -mr.choi-" // ÇÔ¼öÀÇ ÀÎÀÚ (int m[][MAZE_SIZE])À̳𿡠´ëÇØ¼­ ÀÌÇØÇմϱî? ÀÌÇÔ¼ö´Â RETURN°ªÀÌ ÀÖÀ»±î, ¾øÀ»±î ? ÀÖ´Ù¸é ¿Ö,, ¾ø´Ù¸é ¿Ö? ¸ð¸£°Ú½À´Ï±î? ^^; "´Ê¾î¼­! 0.4Ãʾȿ¡ ¸»ÀÌ Æ·¾î ³ª¿Í¾ß µÇ. ¿©·¯ºÐ °øºÎ ±×·± ½ÄÀ¸·Î ÇÏ¸é ¾ÈµÇ¿ä -mr.choi-" { // ¹Ì·Î¸¦ È­¸é¿¡ ±×·ÁÁÜ int i, j; // Áö¿ª º¯¼ö I¿ÍJ¸¦ ¼±¾ð for (j = 0; j putch(''); *x = (dir == LEFT) ? --(*x) : (dir == RIGHT) ? ++(*x) : *x; *y = (dir == UP) ? --(*y) : (dir == DOWN) ? ++(*y) : *y; record(*x , *y); // »ýÁãÀÇ À̵¿ °æ·Î ÀúÀå gotoxy(*x + 1, *y +1); putch(ROBOT); } void right(int *dir) { // »ýÁãÀÇ ¹æÇâÀ» ½Ã°è¹æÇâÀ¸·Î *dir <<= 1; *dir = (*dir > LEFT) ? UP : *dir; } void left(int *dir) { // »ýÁãÀÇ ¹æÇâÀ» ¹Ý½Ã°è ¹æÇâÀ¸·Î *dir >>= 1; *dir = (*dir == 0) ? LEFT : *dir; } int still_in_maze(int x, int y) { // ¾ÆÁ÷ ¹Ì·Î¿¡ µé¾î Àִ°¡ ? if (x > 0 && x 0 && y delay(100); right (&dir); while (wall_ahead(m, x, y, dir)) left(&dir); forward(&x, &y, dir); } record(-1,-1); // »ýÁãÀÇ ¿òÁ÷ÀÓ } void del_path(int i, int j) { //Áߺ¹µÈ °æ·ÎÀÇ »èÁ¦ while ( rec[j] >=0 ) rec[i++] = rec[j++]; rec[i] = -1; } void shortest_path(void) { // Áߺ¹µÈ °æ·Î Á¦°Å ¾Ë°í¸®Áò int i = 0; int x, y; int j; int x1, y1; while (rec[i] >=0) { x = rec[i]; y = rec[i + 1]; j = i + 2; while (rec[j] >= 0) { x1 = rec[j]; y1 = rec[j + 1]; if (x == x1 && y == y1) del_path(i, j); j++; j++; } i++; i++; } i = 0; //ÃÖ´Ü °æ·Î¸¦ ¿òÁ÷ÀÌ´Â »ýÁ㠾ִϸÞÀÌ¼Ç while (rec[i] >=0) { x = rec[i++]; y = rec[i++]; gotoxy(x +1, y +1); putch(ROBOT); ¹®Á¦¹ß»ý --> delay(100); gotoxy (x + 1, y + 1); putch(' '); } } // ¸ðµç ÇÔ¼öÀÇ ¼Ò½º¸¦ ºÐ¼®ÇÒ¶§´Â MAIN()ºÎÅÍ º»´Ù´Â°Å ´Ù ¾Æ½ÃÁÒ? void main(void) { rec = (int*)malloc(MAZE_SIZE * MAZE_SIZE); //»ýÁãÀÇ ¿òÁ÷ÀÓ ÀúÀå // µ¿Àû ¸Þ¸ð¸® ÇÒ´ç ¹«½¼ ¶æÀΰí ÇÏ´Ï , ¸ô¶ó. ³ó´ãÀ̰í,....¤»¤» // À§·Î ¿Ã¶ó°¡ º¸¸é, rec´Â intÇüÀ¸·Î Àü¿ªº¯¼ö·Î ¼±¾ðµÈ Æ÷ÀÎÅÍ´Ù. ¹Ì·ÎÀÇ Å©±â¸¸Å­ÀÇ (12 * 12)ÀÇ ¸Þ¸ð¸®¸¦ // È®º¸Çؼ­ rec·Î ³Ö´Â´Ù. ¿©±â¼­ mallocÇÔ¼ö°¡ intÇüÀΰÍÀº rec°¡ intÇüÀ̱⠶§¹®ÀÌ´Ù. if (rec == NULL) //¸Þ¸ð¸® Ȱ´ç ¿¡·¯ , ¸Þ¸ð¸® Ȱ´çÀÌ ¼º°øÇߴ°¡¿¡ ´ëÇÑ È®ÀÎ.. ¿Ö ? ±â°è´Â »ç¶÷ÀÌ ¾Æ´Ï¹Ç·Î.. °ø½ÄÀÌ´Ù. ¿Ö¾î¾ß ÇÑ´Ù. { printf("\r\n Memory allocation error ! "); // Âü º¸±â Èûµç È®Àå ¹®ÀÚ°¡ ³ª¿Ô³×¿ä. '\n' Àº ´©±¸³ª ´Ù ¾ËµíÀÌ °³Çà ¹®ÀÚ , '\r'? Ä¿½º¸¦ ÁÙÀÇ Ã³À½À¸·Î À̵¿ (ASCII : 13) exit(1); // exit (1) ÇÁ·Î±×·¥ °­Á¦ Á¾·á } draw_maze(maze); // draw_maze()ÇÔ¼ö È£Ãâ ÀÎÀÚ´Â ´ç±Ù ()¿¡ µé¾îÀÖ´Â º¯¼ö¸¦ ¸»ÇÏÁÒ. ¿©±â¼­ ÀÎÀÚ (maze)´Â ¹»±î¿ä? // À§¿¡ ÃʱâÈ­µÈ ¹è¿­ º¯¼ö int maze [19Çà] [19¿­]ÀÇ ¹è¿­ ¸íÀÌÁÒ. ¹è¿­ÀÇ ´ëÇØ¼­ ¸ð¸¥´Ù°í //¶Ç Ã¥ µÚºñÁö ¸»°í ±×·¸±¸³ª ÇÏ°í ³¡±îÁö ÇÁ·Î±×·¥À» ÇØ¼®ÇØ º¸¼¼¿ä. ±×¶ó°í ³ª¼­ ã¾Æµµ ¾È ´Ê¾î¿ä.¤»¤» // ÀÚ , ±×·³ Áö¿ª ÇÔ¼ö draw_maze()·Î ¿Ã¶ó°¡ º¾½Ã´Ù. gotoxy(40 , 5); printf("simulation of Micro Mouse"); gotoxy(40 , 10); printf("press ay key to start"); bioskey(0); right_hand(maze, sx, sy, LEFT); //»ýÁã 1Â÷½Ãµµ gotoxy(40, 10); printf("Press any key to see shortest path"); bioskey(0); shortest_path(); // »ýÁã 2Â÷ ½¬µµ Ãִܰæ·Î gotoxy(40,10); printf("press any key to end program...."); bioskey(0); }