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