https://youtube.com/shorts/P76GsDmj4ng?si=JSGeQbdNDbmAEbbm

이 예제에서는 3단계까지 배운 모든 지식을 총동원하여 벽에 한 번 튕기는 비숍을 단계별로 구축해 나가는 과정을 설명합니다.

우리의 목표:

  1. 비숍의 슬라이드를 구현합니다.
  2. 슬라이드가 멈췄을 때, 적을 잡아서 멈춘 것인지, 벽에 막혀서 멈춘 것인지 구분합니다.
  3. 벽에 막혔을 경우에만 바운스 로직을 실행합니다.
  4. 만약 오른쪽 벽에 막혔다면, 정해진 방향(북서)으로 튕겨나갑니다.
  5. 만약 오른쪽 벽이 아니고 윗쪽 벽에 막혔다면, 다른 정해진 방향(남동)으로 튕겨나갑니다.

1단계: 멈추지 않는 슬라이드

먼저, take-movefalse를 반환해도 '식 연쇄'가 종료되지 않는 루프가 필요합니다. "3.1 고급 제어"에서 배운 do...while을 사용합니다.

do
	take-move(1, 1)
while

Chessembly는 이 코드를 이렇게 실행합니다.

  1. dodo ... while을 시작하는 위치입니다.
  2. take-move(1, 1)이 실행됩니다.
  3. while 식이 바로 직전 식, 즉 take-move의 값을 확인합니다.
  4. while은 "연쇄 종료의 예외"입니다. false를 받아도 연쇄를 종료시키지 않고, 다음 식으로 실행을 넘깁니다.

2단계: 바운스 관문 - peek(0, 0)

슬라이드가 false로 멈췄습니다. 멈춘 이유는 적을 잡았거나, 벽에 막혔거나, 아군에 막혔거나 셋 중 하나입니다.