1. 한 명 입장
새 손님 한 명을 놀이공원 줄에 들어오게 합니다.
시작흐름자료판단
[시작] 이 오브젝트를 클릭했을 때 │ └─ [판단] 만약 대기인원 < 6 이라면 │ ├─ [자료] 대기인원에 1만큼 더하기 └─ [시작] 손님 입장 신호 보내고 기다리기
생각 확인: 왜 6명일 때는 손님이 더 들어오지 않을까요?
관찰하고, 눌러 보고, 비밀을 찾아요
괴물 놀이공원에는 인기 놀이기구가 있습니다. 손님이 한 명씩 들어오면 줄이 길어지고, 놀이기구를 탄 손님은 줄에서 빠져나갑니다.
그런데 이상합니다. 아무도 안내판을 누르지 않았는데 안내가 저절로 바뀝니다.
먼저 해 보기
손님 수와 안내판이 어떻게 달라지는지 관찰하며 오른쪽 문제를 한 문제씩 풀어 보세요.
① 시작하기 ② 한 명 입장 눌러보기 ③ 한 명 탑승 눌러보기
관찰 문제
1 / 7
관찰에서 발견으로
손님이 들어오거나 탑승할 때, 안내판은 다음 순서로 움직입니다.
그리고 다시 확인하고, 또 확인합니다.
조건을 사용하면 상황에 따라 다른 행동을 정할 수 있어요.
계속 확인하면 상황이 바뀌었을 때 프로그램도 자동으로 반응해요.
다음 비밀
손님이 여러 명 들어와도 서로 겹치지 않고 나란히 섭니다. 손님들의 가로 위치에는 어떤 규칙이 있을까요?
찾았어요! 손님이 한 명 늘어날 때마다 x좌표가 30씩 커집니다.
한 걸음 더 · x좌표
오른쪽으로 갈수록 숫자가 커지고, 왼쪽으로 갈수록 숫자가 작아집니다.
직접 계산하기
칸 수의 비밀
첫 번째 손님은 첫 자리에서 한 칸도 더 움직이지 않아야 합니다. 그래서 1 - 1 = 0에서 시작해요.
이동할 칸 수 = 대기인원 - 1
반대 방향
오른쪽으로 한 칸 가면 +30, 왼쪽으로 한 칸 가면 -30
현재 줄에서의 순서
대기순서 = 줄번호 - 탑승누적
마지막에 수식으로 연결하기
한 칸 = 30
이동 거리 = (대기인원 - 1) × 30
x = 70 + ((대기인원 - 1) × 30)
엔트리로 옮기기
오브젝트를 하나씩 선택하고, 맡은 일을 코드로 만들어 봅시다.
| 오브젝트 | 맡은 일 | 코딩 |
|---|---|---|
| 한 명 입장 | 새 손님을 줄에 들어오게 하기 | 있음 |
| 한 명 탑승 | 기다리던 손님을 태우기 | 있음 |
| 탑승안내판 | 대기 인원을 확인해 안내하기 | 있음 |
| 손님 | 입장해서 자기 줄 자리로 이동하기 | 있음 |
| 대기손님 | 줄에 머물고 앞사람이 타면 다시 이동하기 | 있음 |
| 안내원 | 입장과 탑승 소식 말하기 | 있음 |
| 놀이동산(배경) | 놀이공원의 장소와 분위기 보여 주기 | 없음 |
새 손님 한 명을 놀이공원 줄에 들어오게 합니다.
시작흐름자료판단
[시작] 이 오브젝트를 클릭했을 때 │ └─ [판단] 만약 대기인원 < 6 이라면 │ ├─ [자료] 대기인원에 1만큼 더하기 └─ [시작] 손님 입장 신호 보내고 기다리기
생각 확인: 왜 6명일 때는 손님이 더 들어오지 않을까요?
기다리던 손님 한 명을 태웁니다.
시작흐름자료판단
[시작] 이 오브젝트를 클릭했을 때 │ └─ [판단] 만약 대기인원 > 0 이라면 │ ├─ [자료] 대기인원에 -1만큼 더하기 ├─ [자료] 탑승누적에 1만큼 더하기 └─ [시작] 손님 탑승 신호 보내고 기다리기
생각 확인: 왜 대기인원이 0보다 작아져 -1이 되지 않을까요?
대기 인원을 계속 확인하고 알맞은 안내를 보여 줍니다.
시작흐름자료판단글상자
[시작] 시작하기 버튼을 클릭했을 때
│
├─ [자료] 대기인원을 0으로 정하기
├─ [자료] 탑승누적을 0으로 정하기
│
└─ [흐름] 계속 반복하기
│
└─ [판단] 만약 대기인원 >= 6 이라면
│
├─ [글상자] “혼잡! 다른 놀이기구도 구경해요” 쓰기
│
└─ 아니면
│
└─ [판단] 만약 대기인원 >= 3 이라면
│
├─ [글상자] “잠깐 기다려요” 쓰기
│
└─ 아니면
└─ [글상자] “바로 탑승!” 쓰기
중첩 구조를 살펴보세요. ‘계속 반복하기’ 안에 첫 번째 조건이 있고, 그 조건의 ‘아니면’ 안에 두 번째 조건이 들어 있습니다.
새 손님이 나타나 자기 줄 자리로 이동하고 대기손님을 만듭니다.
시작생김새움직임자료계산흐름
[시작] 시작하기 버튼을 클릭했을 때 │ ├─ [움직임] x: 0, y: -64 위치로 이동하기 └─ [생김새] 모양 숨기기
[시작] 손님 입장 신호를 받았을 때 │ ├─ [움직임] 입구 위치로 이동하기 ├─ [생김새] 1부터 7 사이의 무작위 수 모양으로 바꾸기 ├─ [생김새] 모양 보이기 │ ├─ [움직임] 0.5초 동안 │ x: 70 + ((대기인원 - 1) × 30) │ 위치로 이동하기 │ ├─ [생김새] 모양 숨기기 └─ [흐름] 대기손님의 복제본 만들기
입구의 정확한 y좌표는 작품 화면에서 확인해 정하세요. 여기서는 임의의 값을 만들지 않습니다.
줄에 머물다가 앞사람이 타면 현재 순서를 다시 계산합니다.
시작생김새움직임자료계산흐름판단
[시작] 시작하기 버튼을 클릭했을 때 │ ├─ [자료] 줄번호를 0으로 정하기 ├─ [생김새] 모양 숨기기 └─ [흐름] 모든 복제본 삭제하기
[시작] 복제본이 처음 생성되었을 때
│
├─ [생김새] 1부터 7 사이의 무작위 수 모양으로 바꾸기
│
├─ [자료] 줄번호를
│ 탑승누적 + 대기인원
│ 으로 정하기
│
├─ [움직임] 현재 줄순서를 이용해
│ 왼쪽 대기줄의 x좌표 정하기
│
├─ [생김새] 모양 보이기
│
└─ [흐름] 계속 반복하기
│
└─ [판단] 만약 줄번호 <= 탑승누적 이라면
│
├─ [움직임] 놀이기구 쪽으로 이동하기
├─ [흐름] 이 복제본 삭제하기
│
└─ 아니면
│
└─ [움직임] 현재 대기순서를 다시 계산해
알맞은 줄 자리로 이동하기
현재 대기순서 = 줄번호 - 탑승누적
x = -70 + ((현재 대기순서 - 1) × -30)
손님이 들어오거나 탑승할 때 알맞은 말을 합니다.
시작생김새
[시작] 손님 입장 신호를 받았을 때 └─ [생김새] “새 손님이 왔어요!”를 1초 동안 말하기
[시작] 손님 탑승 신호를 받았을 때 └─ [생김새] “즐거운 탑승!”을 1초 동안 말하기
안내원 코드는 신호에 반응하는 표현 코드입니다. 대기 인원이나 좌표를 계산하는 핵심 코드는 아닙니다.
놀이공원의 장소와 분위기를 보여 줍니다.
코드 없음
코드 없음. 이 오브젝트는 배경으로만 사용하므로 움직임이나 계산 코드를 만들지 않습니다. 모든 오브젝트에 코드가 필요한 것은 아닙니다.
코드 속 규칙 찾기
마지막 확인
확인 문제
1 / 6
오늘의 발견
조건을 사용하면 상황에 따라 다른 행동을 만들 수 있습니다.
반복해서 확인하면 프로그램이 변화에 자동으로 반응합니다.
좌표에도 규칙을 만들면 여러 캐릭터를 자동으로 줄 세울 수 있습니다.