jump 식은 11월 25일 업데이트로 새로 생긴 행마식입니다.

jump 식은 행마식임에도 불구하고, 예시에서 다양한 식이 동원되기 때문에 3.4에 수록하였습니다.

jump식은 jmp식 및 jne식과 다릅니다. 3.1 Procedure & flow 에 등장하는 jmp식은 제어식이지만, jump식은 행마식입니다.

jump식은 take식과 짝을 이룹니다. jump식이 후행하는 take식은 일반 take식과 다르게 동작합니다. take식이 실행된 직후에 jump식을 만난다면, jump식이 true를 내놓건 false를 내놓건, 마지막에 실행된 take식은 take행마법을 활성화하지 않습니다.

jump식 이전에 쓰인 take식은 take-jump식의 일부로도 볼 수 있습니다.

앞에 take 식이 없는데 jump식이 있었다면, false를 내놓고 아무것도 하지 않습니다.

이는 take-jump식을 따로 정의하는 대신, 뒤에 jump가 쓰인 take식을 jump식과 함께 묶어 take-jump식으로 만들기 위한 설계입니다. take-jump를 한번에 쓰는 것은 보드상에서 2개의 위치를 필요로 하기 때문에, 한 번에 4개의 좌표를 입력하기보다는 takejump가 좌표를 따로 지정하게 하기 위한 것입니다.

jump 행마법의 기준 위치 이동 방법과 true, false 반환 조건은 move식과 동일합니다.

예시 분석: Cannon

image.png

do take(1, 0) enemy(0, 0) not while jump(1, 0) repeat(1);
do take(-1, 0) enemy(0, 0) not while jump(-1, 0) repeat(1);
do take(0, 1) enemy(0, 0) not while jump(0, 1) repeat(1);
do take(0, -1) enemy(0, 0) not while jump(0, -1) repeat(1);

do peek(1, 0) while friendly(0, 0) move(1, 0) repeat(1);
do peek(-1, 0) while friendly(0, 0) move(-1, 0) repeat(1);
do peek(0, 1) while friendly(0, 0) move(0, 1) repeat(1);
do peek(0, -1) while friendly(0, 0) move(0, -1) repeat(1);

실질적으로 분석할 것은 위의 4줄입니다. 아래의 4줄은 아군 기물을 뛰어넘는 식 연쇄로, 3.3 Look around 까지의 내용을 바탕으로 직접 해석해보시길 권장드립니다.

  1. do … while 문의 시작 지점인 do
  2. 한 칸 앞에 take를 설치하고 (적이 없으면 anchor만 이동하고 take 행마는 설치되지 않음)
  3. 그곳에 적이 있어서 enemy(0, 0)true
  4. not을 거쳐 false로 반전되고 do ~ while 루프를 탈출
  5. 적이 없었다면 2를 다시 반복
  6. jump식은 take식으로 지정된 위치를 take하면서 자기 칸으로 jump하는 행마를 대신 설치
  7. 6을 반복