# 공룡
공룡은 고대 뼈를 얻기 위해 기를 수 있는 고대의, 장엄한 생물이에요.

불행히도 공룡은 오래전에 멸종했기 때문에, 지금 우리가 할 수 있는 최선은 공룡처럼 옷을 입는 것이에요.
이 목적을 위해 새로운 공룡 모자를 받았어요.

모자는 다음으로 장착할 수 있어요
`change_hat(Hats.Dinosaur_Hat)`

안타깝게도 광고에서 보던 것과는 좀 달라요...

공룡 모자를 장착하고 선인장이 충분하면, [사과](objects/apple)가 자동으로 구매되어 드론 아래에 놓여요.
드론이 사과 위에 있다가 다시 움직이면, 사과를 먹고 꼬리가 하나 길어져요. 여유가 있다면, 새 사과가 구매되어 무작위 위치에 놓여요.
사과가 생성되려는 곳에 다른 것이 심어져 있으면 사과는 생성될 수 없어요.

공룡의 꼬리는 드론 뒤에 끌리면서 드론이 이전에 지나간 타일을 채워요. 드론이 꼬리 위로 움직이려고 하면 `move()`는 실패하고 `False`를 반환할 거예요.
꼬리의 마지막 부분은 이동 중에 비켜나므로 그 위로 움직일 수 있어요. 하지만, 뱀이 농장 전체를 채우면 더 이상 움직일 수 없게 돼요. 따라서 더 이상 움직일 수 없는지 확인하여 뱀이 다 자랐는지 확인할 수 있어요.

사과에 `measure()`를 사용하면 다음 사과의 위치를 튜플로 반환해요.

`next_x, next_y = measure()`

다른 모자를 장착하여 모자를 다시 벗으면, 꼬리가 수확돼요.
꼬리 길이의 제곱만큼 뼈를 받게 돼요. 따라서 길이가 `n`인 꼬리는 `n**2`개의 `Items.Bone`을 받게 돼요.
예시:
길이 1 => 뼈 1개
길이 2 => 뼈 4개
길이 3 => 뼈 9개
길이 4 => 뼈 16개
길이 16 => 뼈 256개
길이 100 => 뼈 10000개

공룡 모자는 매우 무거워서, 장착하면 `move()`가 200틱 대신 400틱이 걸려요. 하지만, 사과를 집을 때마다 꼬리가 길어지면 움직이는 데 도움이 되므로 `move()`가 사용하는 틱 수가 3% 감소해요 (내림).

다음 루프는 사과를 몇 개든 집은 후 `move()`가 사용하는 틱 수를 출력해요:

`ticks = 400
for i in range(100):
    print("사과 ", i, "개 후의 틱 수: ", ticks)
    ticks -= ticks * 0.03 // 1`

공룡 모자는 하나뿐이므로, 한 드론만 쓸 수 있어요.

<spoiler=힌트 1 보기>밭 전체를 덮는 같은 경로를 계속 따라 움직이면, 매번 밭 전체를 덮는 뱀을 쉽게 만들 수 있어요. 아주 효율적이진 않지만, 작동은 해요.
매우 큰 농장을 완전히 순회하는 데는 오랜 시간이 걸릴 수 있고, 실제로 그렇게 많은 뼈가 필요하지 않을 수도 있어요. `set_world_size()`를 자유롭게 사용하여 농장 크기를 더 편리한 것으로 바꾸세요.</spoiler>