WeniVooks

검색

위니브 월드(선생님용)

캣의 결심

1. 챕터의 목표

이동: move()를 이용하여 캐릭터를 한 칸 움직일 수 있습니다.

줍기: pick()을 이용하여 캐릭터 아래 있는 아이템을 하나 주울 수 있습니다.

말하기: say()를 이용하여 캐릭터가 말할 수 있습니다.

2. 스토리

위니브월드, 철저한 약육강식의 세계. 힘 있는 자는 지배하고 독식하며, 힘없는 자는 빼앗기고 굶주리는 세계. 마법과 기계가 공존하는 세계입니다.

캣은 위니브월드 외곽에서 생선가게를 운영하는 평민입니다. 아픈 어머니를 대신하여 새벽이면 험한 바다에 나가 고기를 잡고, 오후가 되면 생선을 파는 생활을 반복하고 있는 지극히 평범한 소년이죠.

"생선가게를 잘 부탁한다…"

어머니의 병세는 더욱 심해졌습니다. 위니브월드에서 병원은 귀족만이 다닐 수 있는 곳, 평민은 죽어도 묻어주지도 않는 야속한 곳이었습니다.

"지금 내가 가장 잘해야 할 것은 고기를 잡고 파는 것이다냥!"

캣은 지금 할 수 있는 것을 하기로 했습니다. 매일 무너지더라도 매일 일어났습니다. 무뎌지지 않도록 자신을 점검하고, 나약한 모습을 보이지 않도록 마음을 다잡았습니다.

'평민도 이용할 수 있는 병원을 세우겠다냥!'

캣은 매일 번 돈으로 건강에 좋다는 음식과 약재로 어머니를 간호하고, 물고기를 잡으면서도 더 많은 물고기를 잡기 위해 스스로 단련하기를 쉬지 않았습니다. 어려운 기술을 접하더라도 밤낮을 가리지 않고 탐구했습니다. 매사에 의욕적이었고, 의욕적인 만큼 성과도 따라왔죠.

시간은 지나가고 그의 실력은 날로 높아져 이제 위니브월드에서 그 누구도 캣만큼이나 고기를 많이 잡지 못하게 되었습니다.

2.1 임무

모든 물고기를 잡고 자리로 되돌아와 "hello, world!"를 말합니다. print 함수를 사용하지 않고 say 함수를 사용해 주세요.

2.2 사용 코드

아래 코드들을 조합하여 문제를 풀어주세요.

mission_start()
mission_end()
move()
turn_left()
repeat(2, move)
pick()
say('hello world!')
mission_start()
mission_end()
move()
turn_left()
repeat(2, move)
pick()
say('hello world!')

3. 문제 풀이

실행할 코드 셀에 world(캐릭터가 움직이는 부분)를 사용하는 함수가 있다면 아래와 같이 코드를 필수적으로 사용해야 합니다. 아래 코드를 포함하지 않았을 경우 print의 출력 결과가 늦어지거나 캐릭터가 늦게 움직이는 등의 오류를 발생시킬 수 있습니다.

mission_start()
# world를 사용하는 코드
 
mission_end()
mission_start()
# world를 사용하는 코드
 
mission_end()

먼저 아래와 같이 한 칸을 움직여 보도록 하겠습니다.

mission_start()
move()
mission_end()
mission_start()
move()
mission_end()

위 코드를 Notebook에 작성하고 실행 버튼을 누르거나 Shift + Enter 또는 Alt + Enter를 눌러 실행시켜 주세요.

위와 같이 라이캣이 한 칸 이동한 것을 확인할 수 있습니다. 여기서 아래 있는 아이템을 주워보도록 하겠습니다. 코드 셀을 하나 더 추가하여 실행해 주세요.

위와 같이 하나의 생선을 주운 것을 볼 수 있습니다. 노트북은 아래와 같은 형태가 되었을 것입니다.

mission_start()
move()
pick()
move()
pick()
move()
pick()
move()
pick()
mission_end()
mission_start()
move()
pick()
move()
pick()
move()
pick()
move()
pick()
mission_end()

이제 자리로 돌아와야 합니다. turn_left()를 사용하면 왼쪽으로 90도 회전합니다. 총 2번의 turn_left()를 실행하면 뒤를 바라보게 되죠. 셀을 추가하여 아래 코드를 입력합니다.

mission_start()
turn_left() # 왼쪽으로 90도 회전
turn_left()
mission_end()
mission_start()
turn_left() # 왼쪽으로 90도 회전
turn_left()
mission_end()

이제 앞으로 4번만 이동하면 됩니다. 그 아래 셀에 입력해주세요.

mission_start()
move()
move()
move()
move()
mission_end()
mission_start()
move()
move()
move()
move()
mission_end()

이제 "hello, world!"를 말해야 합니다. 아래와 같이 입력해 주세요. say()print()mission_start(), mission_end()를 하지 않아도 됩니다. say()는 캐릭터의 말풍선으로 출력되고, print()는 터미널에 출력됩니다.

say("hello, world!")
say("hello, world!")

repeat을 이용하면 좀 더 효율적인 풀이가 가능합니다. repeat(반복횟수, 함수이름) 형태로 사용할 수 있습니다. 예를 들어 마지막 코드 move가 4번 사용된 것은 아래와 같이 쉽게 단축할 수 있습니다.

mission_start()
repeat(4, move)
mission_end()
mission_start()
repeat(4, move)
mission_end()

4. 정답 코드

문제의 정답 코드입니다. 월드를 초기화한 후 아래의 코드를 실행시켜 보세요.

mission_start()
move()
pick()
move()
pick()
move()
pick()
move()
pick()
repeat(2, turn_left)
repeat(4, move)
say('hello, world!')
mission_end()
mission_start()
move()
pick()
move()
pick()
move()
pick()
move()
pick()
repeat(2, turn_left)
repeat(4, move)
say('hello, world!')
mission_end()
2장 위니브월드 탐험대2.2 라이캣의 탄생