14-3-ȍ.Hexa

Çí»ç´Â °¡·Î, ¼¼·Î, ´ë°¢¼± ¹æÇâÀ¸·Î ¼¼ °³ÀÇ ¸ð¾çÀÌ ÀÏÄ¡ÇÏ¸é º®µ¹À» Á¦°ÅÇÏ´Â °ÔÀÓÀÌ´Ù. Å×Æ®¸®½º¿Í ¸ð¾ç»Ó¸¸ ¾Æ´Ï¶ó °ÔÀÓÀÇ ³í¸®±îÁöµµ °ÅÀÇ À¯»çÇϹǷΠóÀ½ºÎÅÍ ´Ù½Ã ÀÛ¼ºÇÏ´Â °Íº¸´Ù Tetris2 ¼Ò½º¸¦ º¹»çÇÑ ÈÄ ¼öÁ¤ÇÏ´Â °ÍÀÌ ´õ Æí¸®ÇÏ´Ù. ´ëºÎºÐÀÇ ÇÔ¼ö¿Í Àü¿ª º¯¼ö¸¦ ±×´ë·Î ¾µ ¼ö ÀÖµÇ Ã¤¿ò Á¡°ËÀ» ÇÏ´Â TestFull ÇÔ¼ö¸¸ Àß ÀÛ¼ºÇÏ¸é µÈ´Ù. TestFull ÇÔ¼ö´Â ³­À̵µ°¡ ±×¸® ³ôÁö ¾Ê°í ±âº»ÀûÀÎ ¼öÇÐÀûÀÎ ³í¸®·Â¸¸ ÀÖÀ¸¸é ÀÛ¼ºÇÒ ¼ö ÀÖ¾î ¾Ë°í¸®Áò ¿¬½À¿ëÀ¸·Î ¾ÆÁÖ ÁÁ´Ù. ¿Ï¼ºµÈ Àüü ¼Ò½º´Â ´ÙÀ½°ú °°´Ù.

 

¿¹ Á¦ : Hexa

#include <Turboc.h>

 

#define LEFT 75

#define RIGHT 77

#define UP 72

#define DOWN 80

#define PGUP 73

#define PGDN 81

#define ESC 27

#define BX 5

#define BY 1

#define BW 10

#define BH 20

 

void DrawScreen();

void DrawBoard();

BOOL ProcessKey();

void PrintBrick(BOOL Show);

int GetAround(int x,int y);

BOOL MoveDown();

void TestFull();

void DrawNext();

void PrintInfo();

void MakeNewBrick();

 

enum { EMPTY, B1, B2, B3, B4, B5, B6, B7, B8, B9, B10, WALL };

char *arTile[]={". ","¡á","¡Ü","¡Ú","¢À","¢Ï","¡ß","¢¼","¢¾","¢Í","¢Ý","¡à"};

int board[BW+2][BH+2];

int nx,ny;

int brick[3];

int nbrick[3];

int score;

int bricknum;

int level;

 

void main()

{

     int nFrame, nStay;

     int x,y;

 

     setcursortype(NOCURSOR);

     randomize();

     level=6;

    

     for (;3;) {

          clrscr();

          for (x=0;x<BW+2;x++) {

              for (y=0;y<BH+2;y++) {

                   board[x][y] = (y==0 || y==BH+1 || x==0 || x==BW+1) ? WALL:EMPTY;

              }

          }

          DrawScreen();

          nFrame=20;

          score=0;

          bricknum=0;

 

          MakeNewBrick();

          for (;1;) {

              bricknum++;

              memcpy(brick,nbrick,sizeof(brick));

              MakeNewBrick();

              DrawNext();

              nx=BW/2;

              ny=3;

              PrintBrick(TRUE);

 

              if (GetAround(nx,ny) != EMPTY) break;

              nStay=nFrame;

              for (;2;) {

                   if (--nStay == 0) {

                        nStay=nFrame;

                        if (MoveDown()) break;

                   }

                   if (ProcessKey()) break;

                   delay(1000/20);

              }

              if (bricknum % 10 == 0 && nFrame > 5) {

                   nFrame--;

              }

          }

          clrscr();

          gotoxy(30,12);puts("G A M E  O V E R");

          gotoxy(25,14);puts("´Ù½Ã ½ÃÀÛÇÏ·Á¸é Y¸¦ ´©¸£¼¼¿ä");

          if (tolower(getch()) != 'y') break;

     }

     setcursortype(NORMALCURSOR);

}

 

void DrawScreen()

{

     int x,y;

 

     for (x=0;x<BW+2;x++) {

          for (y=0;y<BH+2;y++) {

              gotoxy(BX+x*2,BY+y);

              puts(arTile[board[x][y]]);

          }

     }

 

     gotoxy(50,3);puts("Hexa Ver 1.0");

     gotoxy(50,5);puts("Á¿ì:À̵¿, À§:ȸÀü, ¾Æ·¡:³»¸²");

     gotoxy(50,6);puts("°ø¹é:ÀüºÎ ³»¸², ESC:Á¾·á");

     gotoxy(50,7);puts("P:Á¤Áö,PgUp,PgDn:³­À̵µ Á¶Àý");

     DrawNext();

     PrintInfo();

}

 

void DrawBoard()

{

     int x,y;

 

     for (x=1;x<BW+1;x++) {

          for (y=1;y<BH+1;y++) {

              gotoxy(BX+x*2,BY+y);

              puts(arTile[board[x][y]]);

          }

     }

}

 

BOOL ProcessKey()

{

     int ch;

     int t;

 

     if (kbhit()) {

          ch=getch();

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

              ch=getch();

              switch (ch) {

              case LEFT:

                   if (GetAround(nx-1,ny) == EMPTY) {

                        PrintBrick(FALSE);

                        nx--;

                        PrintBrick(TRUE);

                   }

                    break;

              case RIGHT:

                   if (GetAround(nx+1,ny) == EMPTY) {

                        PrintBrick(FALSE);

                        nx++;

                        PrintBrick(TRUE);

                   }

                   break;

              case UP:

                   PrintBrick(FALSE);

                   t=brick[0];

                   brick[0]=brick[1];

                   brick[1]=brick[2];

                   brick[2]=t;

                   PrintBrick(TRUE);

                   break;

              case DOWN:

                   if (MoveDown()) {

                        return TRUE;

                   }

                   break;

              case PGDN:

                   if (level > 2) {

                        level--;

                        PrintInfo();

                   }

                   break;

              case PGUP:

                   if (level < 10) {

                        level++;

                        PrintInfo();

                   }

                   break;

              }

          } else {

              switch (tolower(ch)) {

              case ' ':

                   while(MoveDown()==FALSE) {;}

                   return TRUE;

              case ESC:

                   exit(0);

              case 'p':

                   clrscr();

                   gotoxy(15,10);

                   puts("Tetris Àá½Ã ÁßÁö. ´Ù½Ã ½ÃÀÛÇÏ·Á¸é ¾Æ¹« Å°³ª ´©¸£¼¼¿ä.");

                   getch();

                   clrscr();

                   DrawScreen();

                   PrintBrick(TRUE);

                   break;

              }

          }

     }

     return FALSE;

}

 

void PrintBrick(BOOL Show)

{

     int i;

 

     for (i=0;i<3;i++) {

          gotoxy(BX+nx*2,BY+ny+i);

          puts(arTile[Show ? brick[i]:EMPTY]);

     }

}

 

int GetAround(int x,int y)

{

     int i,k=EMPTY;

 

     for (i=0;i<3;i++) {

          k=max(k,board[x][y+i]);

     }

     return k;

}

 

BOOL MoveDown()

{

     if (GetAround(nx,ny+1) != EMPTY) {

          TestFull();

          return TRUE;

     }

     PrintBrick(FALSE);

     ny++;

     PrintBrick(TRUE);

     return FALSE;

}

 

void TestFull()

{

     int i,x,y;

     int t,ty;

     BOOL Remove;

     static int arScoreInc[]={ 0,1,3,7,15,30,100,500 };

     int count=0;

     BOOL Mark[BW+2][BH+2];

 

     // ¹è¿­¿¡ ±â·Ï

     for (i=0;i<3;i++) {

          board[nx][ny+i]=brick[i];

     }

 

     for (;;) {

          // ¿¬¼Ó ¹«´Ì Á¡°Ë

          memset(Mark,0,sizeof(Mark));

          Remove=FALSE;

          for (y=1;y<BH+1;y++) {

              for (x=1;x<BW+1;x++) {

                   t=board[x][y];

                   if (t==EMPTY) continue;

                  

                   // ¼öÆò

                   if (board[x-1][y]==t && board[x+1][y]==t) {

                        for (i=-1;i<=1;i++) Mark[x+i][y]=TRUE;

                        Remove=TRUE;

                   }

                   // ¼öÁ÷

                   if (board[x][y-1]==t && board[x][y+1]==t) {

                        for (i=-1;i<=1;i++) Mark[x][y+i]=TRUE;

                        Remove=TRUE;

                   }

                   // ¿ìÇÏÇâ

                   if (board[x-1][y-1]==t && board[x+1][y+1]==t) {

                        for (i=-1;i<=1;i++) Mark[x+i][y+i]=TRUE;

                        Remove=TRUE;

                   }

                   // ÁÂÇÏÇâ

                   if (board[x+1][y-1]==t && board[x-1][y+1]==t) {

                        for (i=-1;i<=1;i++) Mark[x-i][y+i]=TRUE;

                        Remove=TRUE;

                   }

              }

          }

 

          if (Remove == FALSE) return;

 

          // Á¦°Å ¾Ö´Ï¸ÞÀ̼Ç

          for (i=0;i<6;i++) {

              for (y=1;y<BH+1;y++) {

                   for (x=1;x<BW+1;x++) {

                        if (board[x][y]!=EMPTY && Mark[x][y]==TRUE) {

                             gotoxy(BX+x*2,BY+y);

                             puts(arTile[i%2 ? EMPTY:board[x][y]]);

                        }

                   }

              }

              delay(150);

          }

 

          // ¿¬¼ÓµÈ ¹«´Ì »èÁ¦

          for (y=1;y<BH+1;y++) {

              for (x=1;x<BW+1;x++) {

                   if (board[x][y]!=EMPTY && Mark[x][y]==TRUE) {

                        for (ty=y;ty>1;ty--) {

                             board[x][ty]=board[x][ty-1];

                        }

                        board[x][1]=EMPTY;

                        count++;

                   }

              }

          }

 

          DrawBoard();

          score += arScoreInc[min(count/3,7)];

          PrintInfo();

     }

}

 

void DrawNext()

{

     int x,y,i;

 

     for (x=50;x<=70;x+=2) {

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

              gotoxy(x,y);

              puts(arTile[(x==50 || x==70 || y==12 || y == 18) ? WALL:EMPTY]);

          }

     }

 

     for (i=0;i<3;i++) {

          gotoxy(60,14+i);

          puts(arTile[nbrick[i]]);

     }

}

 

void PrintInfo()

{

     gotoxy(50, 9);printf("³­À̵µ : %d  ",level);

     gotoxy(50,10);printf("Á¡¼ö : %d     ",score);

     gotoxy(50,11);printf("º®µ¹ : %d °³  ",bricknum);

}

 

void MakeNewBrick()

{

     int i;

 

     do {

          for (i=0;i<3;i++) {

              nbrick[i]=random(level)+1;

          }

     } while (nbrick[0]==nbrick[1] && nbrick[1]==nbrick[2] && nbrick[0]==nbrick[2]);

}

 

Å×Æ®¸®½º´Â °¢ º®µ¹ÀÇ ¸ð¾çÀÌ ´Ù¸¥µ¥ ºñÇØ Çí»çÀÇ º®µ¹µéÀº ¸ðµÎ ¼¼·Î ¼¼ Ä­Â¥¸®ÀÌµÇ »õ³¢ º®µ¹ÀÇ ±¸¼ºÀÌ ´Ù¸¦ »ÓÀÌ´Ù. ±×·¡¼­ ¸ð¾çÀ» Á¤ÀÇÇÏ´Â Shape ¹è¿­Àº ÇÊ¿äÄ¡ ¾ÊÀ¸¸ç ´ë½Å °¢ »õ³¢ º®µ¹ÀÇ ¹«´Ì¸¦ Á¤ÀÇÇÏ´Â arTile ¹è¿­ÀÌ ÇÊ¿äÇÏ´Ù. ÀÌ ¿¹Á¦´Â ÃÑ 10°³ÀÇ ¹«´Ì¸¦ »ç¿ëÇ쵂 ³­À̵µ¿¡ µû¶ó »ç¿ëÇÒ ¹«´ÌÀÇ °³¼ö¸¦ °áÁ¤ÇÒ ¼ö ÀÖ´Ù. Àü¿ª º¯¼ö levelÀÌ ÀÌ·± ¿ëµµ·Î »ç¿ëµÇ¸ç ´ÜÃàÅ° PgUp, PgDnÀ¸·Î ½ÇÇàÁß¿¡ levelÀ» º¯°æÇÒ ¼ö ÀÖ´Ù. º®µ¹ÀÇ ¸ð¾çÀÌ ¿¬¼ÓÀûÀ¸·Î °°µµ·Ï ¹èÄ¡ÇÏ´Â °ÍÀÌ °ÔÀÓÀÇ ¸ñÀûÀ̹ǷΠº®µ¹ÀÇ Á¾·ù°¡ ÀÛÀ»¼ö·Ï ³­À̵µ´Â ½¬¿öÁø´Ù.

board³ª nx, ny Àü¿ª º¯¼ö´Â Å×Æ®¸®½º¿Í µ¿ÀÏÇ쵂 nx, ny´Â Á¦ÀÏ À§ º®µ¹ÀÇ ÁÂÇ¥¸¦ °¡¸®Å°´Â °ÍÀ¸·Î ÇÑ´Ù. ÀÌ·± º¯¼öÀÇ Àǹ̴ óÀ½ °³¹ßÇÒ ¶§ºÎÅÍ ºÐ¸íÈ÷ Á¤ÇÒ ÇÊ¿ä°¡ ÀÖ´Ù. Çí»çÀÇ º®µ¹Àº ȸÀüÇϱâ´Â Ç쵂 Àüü º®µ¹ÀÇ ¸ð¾çÀÌ ¹Ù²î´Â °ÍÀÌ ¾Æ´Ï¶ó »õ³¢ º®µ¹ÀÇ À§Ä¡¸¸ ¹Ù²î¹Ç·Î rot Àü¿ª º¯¼ö´Â ÇÊ¿ä¾øÀ¸¸ç ´ë½Å »õ³¢ º®µ¹ÀÇ ±¸¼ºÀ» ±â¾ïÇÏ´Â º°µµÀÇ ¹è¿­ÀÌ ÇÊ¿äÇÏ´Ù. ±×·¡¼­ brickÀº Å©±â 3ÀÇ Á¤¼öÇü ¹è¿­·Î ¼±¾ðÇßÀ¸¸ç ÀÌ ¹è¿­¿¡ À§ÂʺÎÅÍ °¢ »õ³¢ º®µ¹ÀÇ ¹øÈ£¸¦ ±â¾ïÇÏ°í ȸÀüÇÒ ¶§´Â »õ³¢ º®µ¹ÀÇ À§Ä¡¸¦ ¹Ù²Û´Ù.

Àüü ÇÁ·Î±×·¡ÀÇ È帧ÀÌ À¯»çÇϹǷΠmain ÇÔ¼öÀÇ ±¸Á¶´Â Å×Æ®¸®½ºÀÇ °ÍÀ» ±×´ë·Î »ç¿ëÇÏ°í ÀÖ´Ù. ´Ü º®µ¹À» ¸¸µé ¶§ ¼¼ °³ÀÇ ¹«´Ì°¡ ¸ðµÎ °°¾Æ¼­´Â ¾ÈµÇ¹Ç·Î ÀÌ Á¶°Ç¿¡ ¸Â´Â º®µ¹À» ¸¸µå´Â MakeNewBrickÀ̶ó´Â º°µµÀÇ ÇÔ¼ö¸¦ ´õ Á¤ÀÇÇÑ´Ù´Â Á¡¸¸ ´Ù¸£´Ù. MakeNewBrickÀº nbrick ¹è¿­¿¡ ³­¼ö·Î »õ³¢ º®µ¹À» ¼±ÅÃÇ쵂 ¹«´Ì Áß Çϳª¶óµµ ´Ù¸¦ ¶§±îÁö ¹Ýº¹ÇÔÀ¸·Î½á Âø·ú Á÷ÈÄ¿¡ ¹Ù·Î Á¦°ÅµÇ´Â º®µ¹À» ¸¸µéÁö ¾Êµµ·Ï ÇÑ´Ù. ¼¼ °³ÀÇ ¹«´Ì°¡ ¶È°°Àº º®µ¹Àº °ÔÀÓÀÇ ¸ñÀû»ó ¸¸µéÁö ¾Ê´Â °ÍÀÌ ¹Ù¶÷Á÷ÇÏ´Ù.

DrawScreen, DrawBoard, DrawNext, ProcessKey, PrintInfo µîÀÇ ÇÔ¼ö´Â °ÅÀÇ º¯ÇÑ °ÍÀÌ ¾ø´Ù. º®µ¹À» °ü¸®ÇÏ´Â ÇÔ¼öµéÀº ÀÚ·á ±¸Á¶°¡ ¹Ù²ñ¿¡ µû¶ó Á¶±Ý¾¿ º¯È­°¡ Àִµ¥ PrintBrick ÇÔ¼ö´Â ¼¼ Ä­Â¥¸® º®µ¹À» nx, ny¿¡ Â÷·Ê´ë·Î Ãâ·ÂÇϰųª »èÁ¦ÇÑ´Ù. °¢ Ä­¿¡ ´ëÇØ ·çÇÁ¸¦ µ¹¸ç brickÀÇ °¢ »õ³¢ º®µ¹ ¹«´Ì ¶Ç´Â °ø¹éÀ» Ãâ·ÂÇÑ´Ù. GetAround ÇÔ¼ö´Â ¿øÇüÀÌ ¹Ù²î¾ú´Âµ¥ ȸÀü ¸ð¾çÀÌ ¾ø°í º®µ¹ÀÇ ¸ð¾çÀÌ Á¤ÇØÁ® ÀÖÀ¸¹Ç·Î b, r Àμö°¡ Á¦°ÅµÇ¾ú´Ù. ÁÖ¾îÁø ÁÂÇ¥ x, y¿¡¼­ ¾Æ·¡ÂÊÀ¸·Î ¼¼ Ä­À» ÀÐ¾î º¸°í ±× Áß °¡Àå Å« °ªÀ» ¸®ÅÏÇÑ´Ù. MoveDownÀº ¾Æ·¡ÂÊÀ¸·Î ÇÑ Ä­ ³»¸®µÇ ¹Ù´ÚÀ̳ª ÀÌ¹Ì ½×Àº º®µ¹¿¡ ´êÀ» ¶§ TestFullÀ» È£ÃâÇÑ´Ù. ÀÌ ÇÔ¼öÀÇ ³»¿ëµµ Å×Æ®¸®½º¿Í ¶È°°´Ù.

ÀÌ °ÔÀÓÀÇ °¡Àå ÇÙ½É ÄÚµå´Â °ÔÀÓÀÇ ±ÔÄ¢ ±¸ÇöºÎÀÎ TestFullÇÔ¼ö¿¡ ¸ðµÎ ÀÛ¼ºµÇ¾î ÀÖÀ¸¸ç ÀÌ ºÎºÐÀÌ Å×Æ®¸®½º¿Í °¡Àå ´Ù¸£´Ù. board ¹è¿­À» ÀÐ¾î °°Àº ¹«´Ì°¡ ¼¼ °³ ÀÌ»ó ¿¬¼ÓµÇ¾î ÀÖ´Â Ä­À» ã¾Æ Á¦°ÅÇÏ´Â °ÍÀÌ TestFullÀÇ ÀÓ¹«ÀÌ´Ù. ÀÌ ÇÔ¼ö´Â º®µ¹ÀÌ ¹Ù´Ú¿¡ Âø·úÇßÀ» ¶§ MoveDown¿¡ ÀÇÇØ È£ÃâµÇ´Âµ¥ °ÔÀÓÆÇ¿¡ º¯È­°¡ »ý°åÀ¸¹Ç·Î ¿¬¼ÓµÈ ¹«´Ì¸¦ Á¦°ÅÇØ¾ß ÇÑ´Ù. ¿ì¼± Âø·úÇÑ º®µ¹À» ¹è¿­¿¡ ±â·ÏÇÑ´Ù. ±×¸®°í ¹«ÇÑ ·çÇÁ¸¦ µ¹¸ç ¼¼ ¹ø ÀÌ»ó ¿¬¼ÓµÈ ¹«´Ì¸¦ ¸ðµÎ ã¾Æ Á¦°ÅÇÑ´Ù.

À̶§ °í·ÁÇØ¾ß ÇÒ »çÇ×Àº ¿¬¼ÓµÈ ¹«´Ì°¡ ¹Ýµå½Ã ¼¼ °³°¡ ¾Æ´Ï¶ó ³× °³³ª ±× ÀÌ»óÀÏ ¼öµµ ÀÖ´Ù´Â °Í°ú Á¶±ÝÀÌ¶óµµ °ÔÀÓÆÇ¿¡ º¯È­°¡ »ý±â¸é Ãß°¡·Î Á¦°ÅµÇ´Â º®µ¹ÀÌ »ý±â±âµµ ÇÑ´Ù´Â Á¡ÀÌ´Ù. Áï Á¦°ÅµÈ º®µ¹ À§ÂÊÀÇ º®µ¹ÀÌ ¾Æ·¡ÂÊÀ¸·Î ³»·Á ¿À¹Ç·Î ¶Ç ´Ù¸¥ Ãß°¡ Á¦°Å º®µ¹ÀÌ »ý±æ ¼öµµ ÀÖ´Ù. Å×Æ®¸®½º´Â ÇϳªÀÇ º®µ¹ÀÌ Âø·úÇÒ ¶§ Çѹø¿¡ º®µ¹À» ¸ðµÎ Á¦°ÅÇÒ ¼ö ÀÖÁö¸¸ Çí»ç´Â Á¦°Å¿¡ ÀÇÇØ »õ·Î¿î º®µ¹ÀÌ Ãß°¡·Î Á¦°ÅµÉ ¼ö Àֱ⠶§¹®¿¡ ´õ ÀÌ»ó Á¦°ÅÇÒ º®µ¹ÀÌ ¾øÀ» ¶§±îÁö Á¡°ËÀ» ¹Ýº¹ÇØ¾ß ÇÑ´Ù.

±×·¡¼­ TestFullÀº ÇÑ ¹ø¿¡ Á¡°Ë°ú Á¦°Å¸¦ ´Ù ÇÒ ¼ö ¾øÀ¸¸ç Á¡°ËÀ» ¸ÕÀúÇÏ¿© Á¦°ÅÇÒ º®µ¹À» °í¸£°í ÀÌ·¸°Ô ¼±ÅÃÇÑ º®µ¹À» ÀÏ°ý Á¦°ÅÇÑ´Ù. ¼¼ °³ÀÇ ¹«´Ì°¡ ÀÏÄ¡Çß´Ù°í Çؼ­ ¹Ù·Î »èÁ¦ÇØ ¹ö¸®¸é ±× ÀÌ»óÀÇ ¹«´Ì°¡ ÀÏÄ¡Çß´ÂÁö¸¦ Á¤È®ÇÏ°Ô ÆǺ°ÇÒ ¼ö ¾øÀ» °ÍÀÌ´Ù. ¼¼ °³ÀÇ ¿¬¼Ó ¹«´Ì°¡ ÀÖ´ÂÁö Á¶»çÇÏ´Â ¹æ¹ýÀº »ý°¢º¸´Ù °£´ÜÇÏ´Ù. board ¹è¿­ Àüü¸¦ ¼øȸÇϸ鼭 ºñ¾îÀÖÁö ¾ÊÀº °¢ Ä­¿¡ ´ëÇØ ¾çÂÊ ÀÎÁ¢ º®µ¹ÀÇ ¹«´Ì°¡ °°ÀºÁö¸¦ Á¡°ËÇÏ´Â °ÍÀÌ´Ù. ÇϳªÀÇ Ä­¿¡ ´ëÇØ ´ÙÀ½ 4°¡Áö °æ¿ì¸¦ Á¡°ËÇÏ¸é µÈ´Ù.

¼öÆòÀ¸·Î Á¡°ËÇÒ ¶§´Â ÀÎÁ¢ÇÑ Á¿ìÄ­À» º¸°í ¼öÁ÷À¸·Î Á¡°ËÇÒ ¶§´Â »óÇÏÄ­À» º¸¸é µÈ´Ù. ´ë°¢¼±À¸·Î Á¡°ËÇÒ ¶§´Â ±×¸²°ú °°ÀÌ ´ë°¢¼± ¸ÂÀºÆíÀÇ ¹«´Ì¸¦ º»´Ù. Á¡°Ë °á°ú ¼¼ Ä­ÀÇ ¹«´Ì°¡ ÀÏÄ¡Çϸé Mark ¹è¿­¿¡ ÀÌ Ä­ÀÌ Á¦°Å ´ë»óÀÓÀ» Ç¥½ÃÇÑ´Ù. ¸ðµç Ä­¿¡ ´ëÇØ ÀÌ °úÁ¤À» ¹Ýº¹Çϸé 4°³ ÀÌ»ó ¿¬¼ÓµÇ¾î ÀÖ´Â ¹«´Ìµé¿¡ ´ëÇؼ­µµ Á¤È®ÇÏ°Ô Ç¥½ÃÇÒ ¼ö ÀÖ´Ù. À̶§ ¾à°£ÀÇ Áߺ¹ Ç¥½Ã°¡ µÇ±â´Â ÇÏÁö¸¸ ³í¸®°¡ ´Ü¼øÇϱ⠶§¹®¿¡ Å« ¹®Á¦°¡ µÇÁö´Â ¾Ê´Â´Ù. ¶ÇÇÑ º®¿¡ ºÙ¾î ÀÖ´Â ÁÙÀº 4¹æÇâÀ» ´Ù º¼ ÇÊ¿ä°¡ ¾øÁö¸¸ ¾îÂ÷ÇÇ º®°ú ¾ÈÂÊÀÇ ¹«´Ì°¡ °°À» ¼ö´Â ¾øÀ¸¹Ç·Î ÀÌ °æ¿ìµµ ¾Æ¹« ºÎÀÛ¿ëÀÌ ¾ø´Ù.

À§ ±×¸²°ú °°Àº »óȲ¿¡¼­ ä¿ò Á¦°Å Á¡°ËÀ» ÇÑ´Ù°í ÇØ º¸ÀÚ. ¿ÞÂÊÀÇ ÀüÈ­±â ¹«´Ì ¼ÂÀ» Á¡°ËÇÒ ¶§´Â ¼öÁ÷ ¹æÇ⸸ Á¡°ËÇÏ¸é µÈ´Ù. ¸¸¾à ÀÌ ÀüÈ­±â°¡ ¼öÆòÀ̳ª ´ë°¢¼±À¸·Îµµ ¿¬¼ÓµÇ¾î ÀÖ´Ù¸é ÀÌ Á¡°ËÀº ¾ÈÂÊ ÁÂÇ¥¸¦ º¼ ¶§ üũµÉ °ÍÀÌ´Ù. ±×·¯³ª ÀÌ À§Ä¡¿¡ ´ëÇؼ­µµ º°µµÀÇ Á¶°Ç Á¡°Ë¾øÀÌ 4¹æÇâÀ» ¸ðµÎ ´Ù º¸´Âµ¥ Á¦ÀÏ ¹Ù±ùÀÇ ¹«´Ì°¡ º®À̹ǷΠ¾ÈÂÊ°ú ÀÏÄ¡ÇÏ´Â ¼¼ °³ÀÇ ¹«´Ì°¡ Àý´ë·Î ³ª¿ÀÁö ¾Ê´Â´Ù. ¸¶Âù°¡Áö·Î ¾Æ·¡ÂÊÀÇ ³×¸ð ¹«´Ì ¼ÂÀ» Á¡°ËÇÒ ¶§´Â ¼öÆò ¹æÇ⸸ º¸¸é µÈ´Ù. Áß°£ÀÇ º° ¸ð¾ç 4°³¸¦ Á¡°ËÇÒ ¶§´Â °¡¿îµ¥¿¡ ÀÖ´Â µÎ °³ÀÇ º°¿¡¼­ µÎ ¹ø Áߺ¹ Á¡°ËÇÏÁö¸¸ º° ºÎÀÛ¿ëÀº ¾ø´Ù.

TestFull ÇÔ¼ö´Â Á¦°ÅµÉ Ä­À» Ç¥½ÃÇϱâ À§ÇØ Mark¶ó´Â º°µµÀÇ ¹è¿­À» Ãß°¡·Î ¼±¾ðÇؼ­ »ç¿ëÇϴµ¥ ÀÌ·± ¹æ¹ýÀÌ ¹ø°Å·Î¿ì¸é board ¹è¿­ ¿ä¼ÒÀÇ Æ¯Á¤ ºñÆ®¸¦ 1·Î ¼³Á¤ÇÏ´Â ¹æ¹ýÀ» ¾µ ¼öµµ ÀÖ´Ù. ¿¹¸¦ µé¾î Á¦°Å ´ë»ó Ä­¿¡ ´ëÇØ ÃÖ»óÀ§ ºñÆ®¸¦ 1·Î ¼³Á¤ÇÏ´Â °Íµµ ³ª¸§´ë·Î ¾µ¸¸ÇÏ´Ù. ±×·¯³ª ÀÌ·¸°Ô ÇÏ¸é ¹«´Ì¸¦ ºñ±³ÇÒ ¶§ ==·Î ¹Ù·Î ºñ±³ÇÒ ¼ö ¾ø°í ÃÖ»óÀ§ ºñÆ®¸¦ ¸¶½ºÅ© ¿ÀÇÁÇÑ ÈÄ ºñ±³ÇØ¾ß ÇϹǷΠ¿ÀÈ÷·Á ´õ ¹ø°Å·Î¿ÍÁø´Ù.

board Á¡°ËÀ» Çϱâ Àü¿¡ Remove´Â FALSE·Î ÃʱâÈ­µÇ°í Çϳª¶óµµ ¿¬¼ÓµÈ ¹«´Ì°¡ ¹ß°ßµÇ¸é ÀÌ °ªÀ» TRUE·Î º¯°æÇϴµ¥ ÀÌ´Â Å»Ãâ ½ÃÁ¡À» °áÁ¤Çϱâ À§Çؼ­ÀÌ´Ù. board ¹è¿­ Àüü¸¦ ´Ù Á¡°ËÇصµ ¿¬¼ÓµÈ ¹«´Ì°¡ ÀüÇô ¹ß°ßµÇÁö ¾ÊÀ¸¸é À̶§°¡ ¹Ù·Î ÇÔ¼ö¸¦ Á¾·áÇÒ ¶§ÀÌ´Ù. ¹Ù²Ù¾î ¸»ÇÏ¸é ¿¬¼ÓµÈ ¹«´Ì°¡ ¹ß°ßµÇ¸é ´Ù½Ã Á¡°ËÀ» ¹Ýº¹ÇØ¾ß ÇÏ¸ç ½×ÀÎ º®µ¹ÀÌ ¸¹À» ¶§´Â ´Ù¼¸ ¹ø, ¿©¼¸ ¹ø ÀÌ °úÁ¤À» ¹Ýº¹ÇÒ °æ¿ìµµ ÀÖ´Ù.

Á¦°ÅÇØ¾ß ÇÒ º®µ¹ÀÌ ¹ß°ßµÇ¾úÀ¸¸é ÀÌ Ä­µéÀ» ±ô¹Ú°Å¸®µµ·Ï ÇÏ¿© »ç¿ëÀÚ¿¡°Ô ¾î¶² º®µ¹ÀÌ Á¦°ÅµÇ´ÂÁö¸¦ ºÐ¸íÈ÷ Ç¥½ÃÇÑ´Ù. ÀÌ Ã³¸®°¡ »ý·«µÇ¸é °ÔÀÓÆÇÀÌ ³Ê¹« ±Þ°ÝÇÏ°Ô º¯ÇϹǷΠ»ç¿ëÀÚ°¡ °ÔÀÓÀÇ ÁøÇà »óȲÀ» Á¤È®ÇÏ°Ô ¾Ë ¼ö ¾ø´Ù. Çí»ç´Â Àڽŵµ ¸ð¸£´Â »çÀÌ¿¡ º®µ¹µéÀÌ ¿¬¼ÓµÇ¾î ÇѲ¨¹ø¿¡ Á¦°ÅµÇ±âµµ ÇϹǷΠÀÌ Ã³¸®´Â ´Ü¼øÇÑ ¸ÚºÎ¸®±â°¡ ¾Æ´Ï¶ó ²À ÇÊ¿äÇÑ Çʼö ¼­ºñ½ºÀÌ´Ù.

±ô¹ÚÀÓ Ã³¸®±îÁö ¿Ï·áÇßÀ¸¸é ½ÇÁ¦ º®µ¹À» ¹è¿­¿¡¼­ Á¦°ÅÇÑ´Ù. óÀ½ºÎÅÍ ³¡±îÁö ´Ù½Ã ·çÇÁ¸¦ µ¹¸é¼­ Á¦°ÅµÉ º®µ¹À» À§ÂÊÀÇ Á¤º¸·Î µ¤¾î ¹ö¸®¸é µÈ´Ù. º®µ¹ Á¦°Å ÈÄ °ÔÀÓÆÇÀ» ¿ÏÀüÈ÷ ´Ù½Ã ±×¸®°í Á¡¼ö¸¦ °è»êÇÑ ÈÄ ´Ù½Ã ·çÇÁÀÇ ¼±µÎ·Î µ¹¾Æ°¡ ´õ Á¦°ÅÇÒ º®µ¹ÀÌ ÀÖ´ÂÁö °è¼Ó Á¡°ËÇÑ´Ù. ÇѲ¨¹ø¿¡ ¸¹Àº º®µ¹À» ¾ø¾Ù¼ö·Ï ³ôÀº Á¡¼ö¸¦ ÁÖµµ·Ï Çߴµ¥ À̴ °°ÇÏ°Ô ¼¼ °³¾¿ ¾ø¾ÖÁö ¸»°í °¡±ÞÀû ¸ð¾Æ µÎ¾ú´Ù°¡ ÇѲ¨¹ø¿¡ ¾ø¾Öµµ·Ï À¯µµÇÏ´Â È¿°ú°¡ ÀÖ´Ù. ±×·¡¼­ »ç¿ëÀÚ´Â ´ÙÀ½ ³ª¿Ã º®µ¹À» º¸°í ÀÌÁß, »ïÁßÀ¸·Î º®µ¹À» Á¦°ÅÇÏ´Â °è»êÀ» ¹Ì¸® ÇØ¾ß Çϸç ÀÌ·± ¸Ó¸® ±¼¸®±â°¡ ÀÌ °ÔÀÓÀÇ ¹¦¹ÌÀÌ´Ù. ¿Ö³ÄÇÏ¸é ¸·»ó ÇØ º¸¸é ¶æ´ë·Î ½±°Ô µÇÁö ¾ÊÀ¸¸ç Àß ¾ÈµÇ¸é ¾à¿À¸£±â ¶§¹®ÀÌ´Ù.