9-4.¼ÒÄÚ¹Ý

9-4-°¡.°ÔÀÓ ¼Ò°³

¿©±â±îÁö ¿©·¯ºÐµéÀº º¯¼ö, ·çÇÁ, ¿¬»êÀÚ µîÀÇ °£´ÜÇÑ °³³äºÎÅÍ ½ÃÀÛÇؼ­ ÇÔ¼ö¿Í ¹è¿­°°Àº Á¶±Ý º¹ÀâÇÑ °ú¸ñ±îÁö °øºÎ¸¦ ¸¶ÃÆ´Ù. ¹°·Ð ¾ÆÁ÷µµ °¥ ±æÀÌ ¸Ö±â´Â ÇÏÁö¸¸ ¿©±â±îÁö ¿ª°æÀ» ÇìÃÄ¿Â °Í¸¸ Çصµ ÀÛÁö ¾ÊÀº ¼º°ú´Ù. ¼³»ç ¾Õ ºÎºÐÀÇ ³»¿ëÀ» 100% ´Ù ÀÌÇØÇÏÁö ¸øÇß´Ù ÇÏ´õ¶óµµ Áö±Ý ÀÌ ±ÛÀ» Àаí ÀÖ´Ù´Â °Í ÀÚü°¡ ±âº»ÀûÀÎ ÄÚµù Áغñ°¡ ¿Ï·áµÇ¾ú´Ù°í Æò°¡ÇÒ ¼ö ÀÖ´Ù. Àû¾îµµ ÇÁ·Î±×·¡¹ÖÀÌ ¹ºÁö´Â ¾È´Ù°í Çصµ ÁÁÀ» Á¤µµ°¡ µÈ °ÍÀÌ´Ù.

ÀÌ ´Ü°è¿¡ À̸£¸é Áö±Ý±îÁö ¹è¿ü´ø À̷еéÀ» À§ÇÑ Á¾ÇÕ ½Ç½ÀÀÌ ÇÊ¿äÇÏ´Ù. °³º°ÀûÀ¸·Î ÇнÀÇß´ø À̷еéÀÌ ½ÇÁ¦ ÄÚµù¿¡¼­ ¾î¶»°Ô Àû¿ëµÇ°í ¶Ç ¼­·Î ¾î¶² ½ÄÀ¸·Î °áÇյǴÂÁö¸¦ È®ÀÎÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. µµ´ëü ÀÌ·± °Ç ¾îµð´Ù ¾²³ª ½Í¾ú´ø °ÍµéÀÌ ½ÇÀü¿¡¼­ ¿ä±äÇÏ°Ô »ç¿ëµÇ´Â ¿¹¸¦ º¼ ¼ö ÀÖÀ» °ÍÀÌ¸ç ¹«½ÉÄÚ »ç¼ÒÇÏ°Ô ³Ñ°å´ø °Íµé¿¡°Ôµµ °ü½ÉÀ» °¡Áö°Ô µÉ °ÍÀÌ´Ù. ÀÌ ½Ç½ÀÀ» ÅëÇØ ³ª¹«°¡ ¾Æ´Ñ ½£(ºñ·Ï ÀÛÀº µ¿»ê Á¤µµ¿¡ ºÒ°úÇÏÁö¸¸)À» ±¸°æÇØ º¸°í ¾ÕÀ¸·ÎÀÇ ÇнÀ ¹æÇâ ¼³Á¤¿¡ µµ¿òÀÌ µÇ±â ¹Ù¶õ´Ù.

Ãʺ¸ÀÚ¸¦ À§ÇÑ Á¾ÇÕ ¿¹Á¦·Î´Â ¿ª½Ã °ÔÀÓÀÌ °¡Àå ÁÁÀºµ¥ ±ÔÄ¢ÀÌ °£´ÜÇÏ°í °á°ú¸¦ È­¸éÀ¸·Î Áï½Ã Áï½Ã È®ÀÎÇØ º¼ ¼ö Àֱ⠶§¹®ÀÌ´Ù. ¿©±â¼­´Â ¾ÆÁÖ °£´ÜÇÑ °ÔÀÓÀ» Çϳª ¼Ò°³Çϴµ¥ È­¸éÀº ½ä··Çϱ⠱×Áö ¾ø°í ³í¸®µµ Áö±ØÈ÷ °£´ÜÇÏ´Ù. ÇÏÁö¸¸ ÀÌ °ÔÀÓÀº Áö±Ý±îÁö ¹®¹ý °øºÎ¸¦ À§ÇØ ÀÛ¼ºÇß´ø ªÀº ¿¹Á¦µé°ú´Â ÁúÀûÀ¸·Î ´Ù¸£´Ù. ÀÛ°í ÃʶóÇÏÁö¸¸ µ¶¸³µÈ ±â´ÉÀ» ¼öÇàÇÏ´Â ¿Ï°áµÈ ÇÁ·Î±×·¥À̹ǷΠ¸¸¸¸ÇÏ°Ô¸¸ º¼ ¼ö´Â ¾øÀ» °ÍÀÌ´Ù.

ÀÌ °ÔÀÓÀº ÇнÀÀ» À§ÇÑ ¿¹Á¦À̹ǷΠÀǵµÀûÀ¸·Î Áö±Ý±îÁö ¹è¿ü´ø °Íµé¸¸ »ç¿ëÇß´Ù. Æ÷ÀÎÅÍ, ¹®ÀÚ¿­, ±¸Á¶Ã¼, Ŭ·¡½º°°ÀÌ ¾î·Á¿î °ÍÀº »ç¿ëÇÏÁö ¾Ê¾ÒÀ¸¹Ç·Î ÀÌ Ã¥À» Á¦´ë·Î Àаí ÀÖ´Ù¸é ´©±¸³ª 100% ÀÌÇØÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. µû¶ó¼­ ÀÌ ¿¹Á¦¸¦ ÅëÇØ 1~9Àå±îÁö ÃÑÁ¤¸®¸¦ ÇÒ ¼ö ÀÖÀ¸¸ç ¸¸¾à ¸ð¸£´Â ºÎºÐÀÌ ÀÖ´Ù¸é ´Ù½Ã ¾ÕÀåÀ¸·Î µ¹¾Æ°¡¼­ ÇÑ ¹ø ´õ Á¤¸®ÇØ º¸±â ¹Ù¶õ´Ù. ¸¸¾à ÀÌ ´Ü°è¿¡¼­ È®½ÇÇÏ°Ô Á¤¸®¸¦ ÇÏÁö ¾Ê°í ³Ñ¾î°¡°Ô µÇ¸é ´ÙÀ½ ÀåÀÇ Æ÷ÀÎÅÍ¿¡¼­ºÎÅÍ ¾öû³­ È¥¶õÀ» °ÞÀ» °ÍÀÌ´Ù.

¼ÒÄÚ¹ÝÀº ÀüÇüÀûÀÎ ÆÛÁñ °ÔÀÓÀ¸·Î¼­ ±ÔÄ¢ÀÌ °£´ÜÇؼ­ ´©±¸³ª ½±°Ô Áñ±æ ¼ö ÀÖ´Â °ÔÀÓÀÌ´Ù. 1980³â´ë Ãʹݿ¡ ÀϺ»¿¡¼­ óÀ½ °³¹ßµÇ¾úÀ¸¸ç °¢Á¾ Ç÷§ÆûÀ¸·Î À̽ĵǾî Å×Æ®¸®½º ÀÌÀü¿¡ »ó´çÇÑ Àα⸦ ´©·È´ø °íÀü °ÔÀÓÀÌ´Ù. ÀÎÅͳÝÀÇ °ø°³ ÀÚ·á½ÇÀ» ã¾Æ º¸¸é ¾ÆÁÖ ¸¹Àº Á¾·ùÀÇ ¼ÒÄÚ¹ÝÀ» ãÀ» ¼ö ÀÖÀ¸¸ç ÀϺδ À¥¿¡¼­ ¹Ù·Î °ÔÀÓÀ» Áñ±æ ¼öµµ ÀÖ´Ù. ÃÖ±Ù¿¡´Â ÇÚµåÆù¿¡µµ Ǫ½Ã Ǫ½Ã¶ó´Â À̸§À¸·Î À̽ĵǾî ÁöÇÏö¿¡¼­ ÀÌ °ÔÀÓÀ» ÇÏ´Â ¿¹»Û ¼Ò³àµéÀ» º¼ ¼ö ÀÖ´Ù.

¼Ò½º°¡ °ø°³µÇ¾î ÀÖ´Â °Íµéµµ ¸¹ÀÌ ÀÖÀ¸¹Ç·Î ÀÌ Á¤µµ °ÔÀÓÀº È¥ÀÚ¼­µµ ¾ó¸¶µçÁö ¸¸µé ¼ö ÀÖÀ» °ÍÀÌ´Ù. ´ÙÀ½ ÇÁ·Î±×·¥ÀÌ ¿À¸®Áö³¯ ¼ÒÄÚ¹Ý °ÔÀÓÀÇ ¿¹Àε¥ ¿À¸¥ÂÊÀº À¥ ÆäÀÌÁö¿¡¼­ ½ÇÇàÇÒ ¼ö ÀÖ´Â ÀÚ¹Ù ¹öÀüÀÌ´Ù.

 

Ä¿¼­ À̵¿Å°·Î »ç¶÷À» ¿òÁ÷¿© ¹Ù±ù¿¡ ½×¿© ÀÖ´Â ÁüµéÀ» â°íÀÇ ÁöÁ¤ÇÑ ÀÚ¸®·Î À̵¿½ÃÅ°µÇ ÁüÀ» ¹Ð¼ö¸¸ ÀÖÀ¸¸ç ´ç±æ ¼ö´Â ¾ø´Ù. ±×¸®°í µ¿½Ã¿¡ µÎ °³ ÀÌ»óÀÇ ÁüÀ» ¹Ð ¼ö ¾øµµ·Ï µÇ¾î ÀÖ¾î ¼ø¼­¸¦ Àß »ý°¢ÇØ°¡¸ç ÁüÀ» À̵¿½ÃÄÑ¾ß °ÔÀÓÀ» Ç® ¼ö ÀÖ´Ù. ÁüÀÌ º® ¸ð¼­¸®¿¡ ´ê´Â´Ù°Å³ª µÎ °³ ÀÌ»óÀÇ ÁüÀÌ º®¸é¿¡ ºÙ¾î ¹ö¸®¸é ´õ ÀÌ»ó À̵¿ ºÒ°¡´ÉÇÑ »óÅ°¡ µÇ¹Ç·Î ÀÌ »óÅ°¡ µÇÁö ¾Êµµ·Ï Á¶½ÉÇØ¾ß ÇÑ´Ù.

ÀÚ·á½ÇÀ» ã¾Æ º¸¸é ¿øÇü ¼ÒÄڹݿ¡ ±×·¡ÇÈ°ú »ç¿îµå¸¦ °­È­ÇÏ°í ´Ù¾çÇÑ º¯Çü ¸ÊÀ» Á¦°øÇÏ´Â ¾Æ·ùÀ۵鵵 ¸¹ÀÌ ¹ßÇ¥µÇ¾î ÀÖÀ¸¸ç ¾à°£ ´Ù¸¥ ±ÔÄ¢ÀÌ Á¦°øµÇ´Â °Íµéµµ ÀÖ´Ù. °£´ÜÇÑ ¾ÆÀ̵ð¾î¿¡¼­ Ãâ¹ßÇÑ °ÔÀÓÀÌÁö¸¸ ÀÌ·± °ÔÀÓµµ ¾Ö´Ï¸ÞÀ̼ǰú »ç¿îµå°¡ Ãß°¡µÇ¸é ±×·²½ÎÇØ º¸ÀÌ°í Àç¹Ì°¡ ¹è°¡µÇ±â ¸¶·ÃÀÌ´Ù. ÀÏ´Ü ÄÜ¼Ö ¸ðµå¿¡¼­ ½ÇÇàµÇ´Â ¼ÒÄÚ¹Ý °ÔÀÓÀ» ¸¸µç ÈÄ Â÷ÈÄ¿¡ ±×·¡ÇÈ ¹öÀüÀ¸·Î ¿Å°Ü º¸µµ·Ï ÇÏÀÚ. Àüü ¼Ò½º´Â ´ÙÀ½°ú °°´Ù.

 

¿¹ Á¦ : Sokoban

#include <Turboc.h>

 

#define LEFT 75

#define RIGHT 77

#define UP 72

#define DOWN 80

#define MAXSTAGE 3

#define putchxy(x,y,c) {gotoxy(x,y);putch(c);}

 

void DrawScreen();

BOOL TestEnd();

void Move(int dir);

 

char ns[18][21];

int nStage;

int nx,ny;

int nMove;

 

char arStage[MAXSTAGE][18][21]={

     {

     "####################",

     "####################",

     "####################",

     "#####   ############",

     "#####O  ############",

     "#####  O############",

     "###  O O ###########",

     "### # ## ###########",

     "#   # ## #####  ..##",

     "# O  O   @      ..##",

     "##### ### # ##  ..##",

     "#####     ##########",

     "####################",

     "####################",

     "####################",

     "####################",

     "####################",

     "####################"

     },

     {

     "####################",

     "####################",

     "####################",

     "####################",

     "####..  #     ######",

     "####..  # O  O  ####",

     "####..  #O####  ####",

     "####..    @ ##  ####",

     "####..  # #  O #####",

     "######### ##O O ####",

     "###### O  O O O ####",

     "######    #     ####",

     "####################",

     "####################",

     "####################",

     "####################",

     "####################",

     "####################"

     },

     {

     "####################",

     "####################",

     "####################",

     "####################",

     "##########     @####",

     "########## O#O #####",

     "########## O  O#####",

     "###########O O #####",

     "########## O # #####",

     "##....  ## O  O  ###",

     "###...    O  O   ###",

     "##....  ############",

     "####################",

     "####################",

     "####################",

     "####################",

     "####################",

     "####################"

     },

};

 

void main()

{

     int ch;

     int x,y;

 

     setcursortype(NOCURSOR);

     nStage=0;

 

     for (;1;) {

          memcpy(ns,arStage[nStage],sizeof(ns));

          for (y=0;y<18;y++) {

              for (x=0;x<20;x++) {

                   if (ns[y][x]=='@') {

                        nx=x;

                        ny=y;

                        ns[y][x]=' ';

                   }

              }

          }

          clrscr();

          nMove=0;

 

          for (;2;) {

              DrawScreen();

              ch=getch();

              if (ch==0xE0 || ch==0) {

                   ch=getch();

                   switch (ch) {

                   case LEFT:

                   case RIGHT:

                   case UP:

                   case DOWN:

                        Move(ch);

                        break;

                   }

              } else {

                   ch=tolower(ch);

                   if (ch=='r') {

                        break;

                   }

                   if (ch=='n') {

                        if (nStage < MAXSTAGE-1) {

                             nStage++;

                        }

                        break;

                   }

                   if (ch=='p') {

                        if (nStage > 0) {

                             nStage--;

                        }

                        break;

                   }

                   if (ch=='q') {

                        setcursortype(NORMALCURSOR);

                        exit(0);

                   }

              }

 

              if (TestEnd()) {

                   clrscr();

                   gotoxy(10,10);

                   printf("%d ½ºÅ×ÀÌÁö¸¦ Ç®¾ú½À´Ï´Ù. ´ÙÀ½ ½ºÅ×ÀÌÁö·Î À̵¿ÇÕ´Ï´Ù",

                        nStage+1);

                   delay(2000);

                   if (nStage < MAXSTAGE-1) {

                        nStage++;

                   }

                   break;

              }

          }

     }

}

 

void DrawScreen()

{

     int x,y;

     for (y=0;y<18;y++) {

          for (x=0;x<20;x++) {

              putchxy(x,y,ns[y][x]);

          }

     }

     putchxy(nx,ny,'@');

 

     gotoxy(40,2);puts("SOKOBAN");

     gotoxy(40,4);puts("Q:Á¾·á, R:´Ù½Ã ½ÃÀÛ");

     gotoxy(40,6);puts("N:´ÙÀ½, P:ÀÌÀü");

     gotoxy(40,8);printf("½ºÅ×ÀÌÁö : %d",nStage+1);

     gotoxy(40,10);printf("À̵¿ ȸ¼ö : %d",nMove);

}

 

BOOL TestEnd()

{

     int x,y;

 

     for (y=0;y<18;y++) {

          for (x=0;x<20;x++) {

              if (arStage[nStage][y][x]=='.' && ns[y][x]!='O') {

                   return FALSE;

              }

          }

     }

     return TRUE;

}

 

void Move(int dir)

{

     int dx=0,dy=0;

 

     switch (dir) {

     case LEFT:

          dx=-1;

          break;

     case RIGHT:

          dx=1;

          break;

     case UP:

          dy=-1;

          break;

     case DOWN:

          dy=1;

          break;

     }

 

     if (ns[ny+dy][nx+dx]!='#') {

          if (ns[ny+dy][nx+dx]=='O') {

              if (ns[ny+dy*2][nx+dx*2] == ' ' || ns[ny+dy*2][nx+dx*2] == '.') {

                   if (arStage[nStage][ny+dy][nx+dx]=='.') {

                        ns[ny+dy][nx+dx]='.';

                   } else {

                        ns[ny+dy][nx+dx]=' ';

                   }

                   ns[ny+dy*2][nx+dx*2]='O';

              } else {

                   return;

              }

          }

          nx+=dx;

          ny+=dy;

          nMove++;

     }

}

 

Àüü ¼Ò½ºÀÇ ÁÙ ¼ö´Â 200ÁÙÀÌ Á¶±Ý ´õ µÇÁö¸¸ ±× Áß Àý¹ÝÀÌ ½ºÅ×ÀÌÁö µ¥ÀÌÅÍ¿Í ¸ÅÅ©·Î Á¤ÀÇ µîÀ̹ǷΠ½ÇÁ¦·Î °ÔÀÓÀÇ ³í¸®¸¦ ´Ù·ç´Â ÁÙÀº ½Ê¿©ÁÙµµ ä ¾ÈµÇ´Â ÆíÀÌ´Ù. main°ú ¼¼ °³ÀÇ ÇÔ¼ö·Î¸¸ ±¸¼ºµÇ¾î ÀÖÀ¸¸ç Àü¿ªº¯¼öµµ ¸î °³ µÇÁö ¾Ê´Â ¾ÆÁÖ °£´ÜÇÑ °ÔÀÓÀ̶ó ¾î·ÆÁö ¾Ê°Ô ºÐ¼®ÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù.

¹°·Ð ³²ÀÌ ÀÛ¼ºÇÑ ¼Ò½º¸¦ ºÐ¼®ÇÑ´Ù´Â °ÍÀº ½±Áö ¾ÊÀº ÀÏÀÌ´Ù. ÁÖ¼®µµ ¾ø°í, º¯¼ö À̸§µµ ¾û¸ÁÀÌ°í ±¸Á¶µµ ¾ÈÁÁ°í °Ô´Ù°¡ ´Ù·®ÀÇ ²Ç¼ö±îÁö °çµé¿©Áö°í ¾ç±îÁö ¸¹À¸¸é Â÷¶ó¸® óÀ½ºÎÅÍ ´Ù½Ã ¸¸µå´Â °Ô ´õ ½¬¿ï ¼öµµ ÀÖ´Ù. ±×·¡µµ ¼ÒÄÚ¹Ý ¿¹Á¦´Â ªÀºµ¥´Ù ±³À°¿ëÀ¸·Î ¸¸µé¾îÁ® Àֱ⠶§¹®¿¡ ¾ÆÁÖ °£°áÇÏ°í ½¬¿îÆí¿¡ ¼ÓÇÑ´Ù. ½Ç¹«¿¡¼­´Â µ¿·áÀÇ ¼Ò½º¸¦ ºÁ¾ß ÇѴٰųª ÁÖ¿ä ±â¼ú ½ÀµæÀ» À§ÇØ ÀÎÅͳݿ¡¼­ ±¸ÇÑ ¼Ò½º¸¦ ºÐ¼®ÇѴٰųª Àμö Àΰ踦 À§ÇØ ÀüÀÓÀÚÀÇ ¼Ò½º¸¦ ¿øÄ¡¾Ê°Ô À̾ Â¥¾ß ÇÏ´Â °æ¿ìµµ ÀÖ´Ù. ³²ÀÇ Äڵ带 Àß ºÐ¼®ÇÏ´Â °Íµµ ÀÏÁ¾ÀÇ ±â¼úÀÌ¸ç °í±Þ ±â¼úÀ» Èí¼öÇϱâ À§ÇÑ ¼ö´ÜÀÌ´Ù. ½È¾îµµ ÀÚ²Ù º¸´Â ½À°üÀ» °¡Á®¾ß ÇÑ´Ù.