§ 1원점 복귀: go0()
가장 많이 호출되는 함수. 어디서든 (0,0)으로 돌아온다.
go0()는 현재 x좌표만큼 West로, y좌표만큼 South로 이동한다. 벽이 없는 열린 농장에서만 작동한다 — 미로에서는 벽에 막힌다.
go0()
def go0():
for i in range(get_pos_x()):
move(West)
for i in range(get_pos_y()):
move(South)
§ 2뱀 패턴 순회
격자 전체를 한 칸도 빠짐없이 순회하는 기본 패턴. 풀 베기, 씨앗 심기, 수확 — 모든 곳에 쓰인다.
North로 끝까지 올라가고 → East로 한 칸 이동 → South로 끝까지 내려가고 → East로 한 칸 이동. 이걸 while True로 반복하면 격자 전체를 빗질한다.
뱀 패턴 (Snake/Zigzag) 순회
STEP 01 / 6
snake() — 뱀 패턴
def snake():
while True:
for i in range(N-1):
harvest()
move(North)
harvest()
move(East)
for i in range(N-1):
harvest()
move(South)
harvest()
move(East)
직관
농부가 논밭을 가로질러 가는 것과 같다. 한 줄을 끝까지 갔다가, 옆줄로 넘어가서 반대 방향으로 돌아온다. 이 패턴은 모든 타일을 정확히 한 번씩 방문하므로 O(N²) 시간에 전체 격자를 커버한다.
§ 3goto_fast: 토러스 최단경로
게임 세계는 토러스(torus)다. 오른쪽 끝에서 East로 가면 왼쪽 끝으로 나온다. 이걸 이용한 최단경로 계산이 goto_fast()다.
직선 거리 vs 토러스 랩어라운드 거리를 비교하여 더 짧은 쪽으로 이동한다. NxN 맵에서 (0,0) → (N-2,0)로 갈 때 East로 N-2칸 가는 것보다 West로 2칸 가는 게 빠르다.
goto_fast() — 토러스 최단경로
def goto_fast(x, y):
M = get_world_size()
cx = get_pos_x() + 1
cy = get_pos_y() + 1
# x축: 오른쪽 vs 왼쪽 거리 비교
if x > cx:
left = M + cx - x
right = x - cx
else:
right = M - cx + x
left = cx - x
# 짧은 쪽으로 이동
if right > left:
for i in range(left): move(West)
else:
for i in range(right): move(East)
# y축도 동일
토러스 랩어라운드 — 최단경로 선택
STEP 01 / 4
§ 4실전 코드 해부
실제 f0.py에서 사용하는 이동 함수들을 살펴보자. go0()는 원점 복귀, goPos()는 목적지 직선 이동, 그리고 다양한 작물 심기 함수(grass, grabush, pl)가 모두 뱀 패턴 위에 구축되어 있다.
핵심
pl(enti)는 "심기만" 함수다. 엔티티를 인자로 받아 while True 뱀 패턴으로 전체 격자에 harvest + plant를 반복한다. grass(), grabush()도 같은 구조의 변형이다.