BLOKUS Champins League (v0.2) - 1 -
1. Intrductin 블로커스 (BLOKUS) 는두명혹은그이상이동시에즐길수있는동명의보드게 임을의미한다. 게임의목표는간단하다. 일단, 각플레이어는동일한개수로이루어진블록들을받게된다. ( 각플레이어가가진블록의종류는모든플레이어가동일하다.) 플레이어는자신의차례에판위에블록을놓게되며, 블록을놓은뒤다음플레이어에게차례를넘긴다. 게임은더이상놓을블록이없거나더이상판위에놓을장소가없을때끝나게되며, 더많은칸을차지한플레이어가승리하게된다. 블록은놓을수있다는전제하에어떤변형도가능하다. 예를들어돌리거나 (rtate), 뒤집거나 (flip) 할수있다. 물론블록을잘라내는행위는허용되지않는다. 본프로젝트에서각팀이구현해야하는것은바로어느위치에블록을놓을지결정하는알고리즘을작성하는것이다. 기본적인 API 및규칙은아래에제공될것이다. - 2 -
2. 규칙 A. 판의규칙 10 x 10의칸으로이루어진가상의판을가정한다. 판은 2차원배열로제공되며, 배열의각위치에따른판의지점은다음과같다. (0,0) (0,1) (0,2) (0.3) (0,4) (0,5) (0,6) (0,7) (0,8) (0,9) (1,0) (1,1) (1,2) (1,3) (1,4) (1,5) (1,6) (1,7) (1,8) (1,9) (2,0) (2,1) (2,2) (2,3) (2,4) (2,5) (2,6) (2,7) (2,8) (2,9) (3,0) (3,1) (3,2) (3,3) (3,4) (3,5) (3,6) (3,7) (3,8) (3,9) (4,0) (4,1) (4,2) (4,3) (4,4) (4,5) (4,6) (4,7) (4,8) (4,9) (5,0) (5,1) (5,2) (5,3) (5,4) (5,5) (5,6) (5,7) (5,8) (5,9) (6,0) (6,1) (6,2) (6,3) (6,4) (6,5) (6,6) (6,7) (6,8) (6,9) (7,0) (7,1) (7,2) (7,3) (7,4) (7,5) (7,6) (7,7) (7,8) (7,9) (8,0) (8,1) (8,2) (8,3) (8,4) (8,5) (8,6) (8,7) (8,8) (8,9) (9,0) (9,1) (9,2) (9,3) (9,4) (9,5) (9,6) (9,7) (9,8) (9,9) place_t() 함수를통해서블록을놓을때는아래에기술될블록의시작지점과 블록의종류를인자로넘겨주면된다. B. 블록의종류 블록의종류는다음과같다. 1) SQUARE 4 개의칸으로이루어진정사각형모양의블록이다. 이형태의블록은총 2 개 제공된다. 시작지점은왼쪽아래 ( 로표시되어있는부분 ) 의블록이다. 예를 - 3 -
들어시작지점이 (2,0) 지점에있다면전체블록이차지하는좌표는 (2,0) (1,0) (2,1) (1,1) 이된다. 2) HANDGUN 4개의칸으로이루어진권총모양의블록이다. 이형태의블록은총 1개제공된다. 기본적으로 3x2 혹은 2x3의공간을차지하는블록으로가정한다. 시작지점은 3x2 혹은 2x3 블록의왼쪽아래지점이다. 3) SHOTGUN 6 개의칸으로이루어진샷건모양의블록이다. 이형태의블록은총 1 개제 공된다. 전체블록이차지하는공간은 4x2 혹은 2x4 의공간이다. 시작지점은 4x2 혹은 2x4 블록의왼쪽아래지점이다. 4) WORM 5 개의칸으로이루어진지렁이모양의블록이다. 이형태의블록은총 2 개 제공된다. 전체블록이차지하는공간은 5x1 혹은 1x5 의공간이다. 시작지점 은가장왼쪽혹은가장아래쪽이다. 5) CROWBAR - 4 -
6 개의칸으로이루어진쇠지렛대모양의블록이다. 이모양의블록은총 1 개 제공되며, 5x2 혹은 2x5 의공간을차지한다. 시작지점은왼쪽아래지점이다. 6) CHAIR 3 개의칸으로이루어진앉은뱅이의자모양의블록이다. 이모양의블록은 총 1 개제공되며, 2x2 의공간을차지한다. 시작지점은왼쪽아래지점이다. 7) CROSS 4 개의칸으로이루어진십자모양의블록이다. 이모양의블록은총 1 개제 공되며, 3x3 의공간을차지한다. 시작지점은왼쪽아래지점이다. 8) BOOMERANG 5 개의칸으로이루어진부메랑모양의블록이다. 이모양의블록은총 1 개 제공되며, 3x3 의공간을차지한다. 시작지점은왼쪽아래지점이다. 9) STICK - 5 -
3 개의칸으로이루어진막대기모양의블록이다. 이모양의블록은총 1 개 제공되며, 3x1 혹은 1x3 의공간을차지한다. 시작지점은왼쪽지점혹은가장 아래지점이다. 10) DOT 1개의칸으로이루어진블록이다. 이모양의블록은총 1개제공되며, 1x1의공간을차지한다. C. 게임의규칙 각플레이어는 5초내에모든작업을끝내야한다. 시간을측정하여 5초이상걸릴경우, 실격패로한다. 모든경우에타플레이어의블록을침범할경우, 실격패로처리한다. 매차례종료후, 판을검사하여이를적발한다. 블록이판의경계를벗어나도실격패로처리한다. 게임은양쪽플레이어모두가더이상놓을블록이없을때종료된다. 종료된시점에서각플레이어가차지한말판의칸수를세어더많은칸을차지한플레이어가승리하게된다. 가능한모든플레이어의조합에대해서 3회씩게임을진행한다. 그리고가장승률이높은플레이어부터차례대로순위를매긴다. 같은색의블록은반드시꼭짓점으로이어져야한다. 다음그림을보라. 표 20 올바른경우 - 6 -
위그림은같은색의블록이꼭짓점으로잇닿아있으므로규칙에어긋나지않 는다. 표 21 잘못된경우 위그림은서로같은색의블록이모서리로연결되어있으므로, 규칙에어긋난 다. 표 22 올바른경우 위그림은서로다른색을지닌네블록이규칙을준수한형태로놓여있는것을나타내고있다. 각플레이어는이를반드시준수하여블록을놓아야하며, 만약닿을수있는꼭짓점이없을경우더이상둘수있는공간이없는것으로간주한다. 만약규칙에어긋난형태로블록을놓을경우실격패로판정된다. D. 프로그램의규칙 place_t() 함수를사용할경우, 다른블록을침범했을때에러코드 (OVERLAP) 를리턴한다. place_t 가리턴하는에러코드는다음과같다. - 7 -
Errr cde Value Descriptin NOERROR 0 Nrmal exit OVERLAP 1 Vilate the enemy's blck OUT_OF_STAGE 2 Is ut f stage Table 1 Errr cde 각팀은블록을놓을자리를결정하는함수를작성한다. 함수는정해진값을 리턴해야하며, 리턴코드는다음과같다. Return cde Value Descriptin PLAYING 0 Player in nrmal state OUT_OF_SPACE 1 N ne can be placed int the stage OUT_OF_BLOCK 2 All blcks are placed Table 2 Return cde - 8 -
3. API A. place_t() Functin Descriptin place_t starting pint, blck errr cde 입력으로블록이시작해야할위치와블록을받는다. 해당위치에놓을수있으면, 위치시킨후 NOERROR 코드를리턴하고, 놓을수없다면그에해당하는 errr cde를리턴한다. B. rtate() Functin Descriptin rtate blck, rtate degree 해당사항없음블록을회전시킨다. 입력으로블록과회전시킬정도를입력받는다. 정도는미리정의된값인 SINGLE, DOUBLE, TRIPLE을통해서입력가능하며, SINGLE의경우 90도, DOUBLE일경우 180도, TRIPLE일경우 270도를회전하게된다. 주의해야할것은 2x4 블록의경우 90도회전시켰을때 4x2 블록이된다는것이다. C. flip() 블록을뒤집는다. 입력으로블록과동작지정번호를입력받으며, 1일경우좌우로, 2일경우상하로뒤집게된다. Functin flip blck, flip directive 해당사항없음블록을뒤집는다. HORIZONTAL 지시자를넘겨주었을 Descriptin 경우좌우로, VERTICAL 지시자를넘겨주었을경우상하로뒤집는다. - 9 -
D. get_blcks() Functin get_blcks team clr blck set Descriptin 블록을가져온다. E. get_stage() Functin Descriptin get_stage 해당사항없음 stage 게임이진행되고있는판을가져온다. 플레이어는자신의차례에서이함수를통해게임판을가져올수있다. F. print_blcks() Functin Descriptin print_blcks blck set 해당사항없음현재남아있는블록들과상태를출력한다. 프로젝트수행중에만쓸수있는상태확인용함수이며, 제출시에는이를삭제해야한다. G. print_blck() Functin Descriptin print_blck blck 해당사항없음현재블록의상태를출력한다. 프로젝트수행중에만쓸수있는상태확인용함수이며, 제출시에는이를삭제해야한다. - 10 -
4. Revisin histry 연번 작성자 내용 날짜 1 김성훈 초안작성 2013.05.26 2 김성훈 세부규칙추가 2013.05.29-11 -