본문 바로가기

스마트 육아 가이드

스크래치 장애물 만들기 | 초등 3학년 아들, 좌표 몰라서 고양이 위치를 바꿔버렸습니다

SCRATCH CODING DAY 2

좌표를 모르면 캐릭터를 바꾸면 되지
— 아들의 창의적 해결책

스크래치 2일차 | 장애물 미션 | 초등 3학년

📋 TODAY'S MISSION

장애물이 고양이 쪽으로 다가온다. 고양이는 점프해서 피해야 한다.

장애물 종류 자율 선택 x좌표 이동 활용 미션 수행 40분

아들이 선택한 장애물: 바퀴벌레 🪳

자율 선택이라고 했더니 5초도 안 걸렸습니다. 주저 없이 바퀴벌레를 골랐어요. 이유는 물어보지 않았습니다. 그냥 그게 아들 취향이겠지, 하고 넘겼죠.

세팅은 간단했습니다. 고양이는 왼쪽, 바퀴벌레는 오른쪽. 바퀴벌레가 고양이 쪽으로 다가와야 하니까요.

🤔 첫 번째 벽: "어? 왜 오른쪽으로 가지?"

아들은 망설임 없이 "x좌표를 10씩 이동" 블록을 골라 무한반복에 연결했습니다. 실행해 보니 바퀴벌레가 오른쪽으로 달아나기 시작했어요. 아직 좌표 방향 개념을 배우지 않은 초등 3학년에게는 당연한 결과였죠.

고양이랑 바퀴벌레 자리를 바꾸면 되잖아요 😂

잠시 고민하더니 아들이 캐릭터 위치를 조작하기 시작했습니다. 고양이를 오른쪽으로, 바퀴벌레를 왼쪽으로 옮겨놓고는 당당하게 외쳤어요.

"아빠, 됐어요! 바퀴벌레가 고양이한테 가잖아요!"

틀린 말은 아닙니다. 바퀴벌레가 고양이 쪽으로 이동하고 있으니까요. 근데 미션 조건이 있었죠 — 고양이는 왼쪽, 장애물은 오른쪽에서 출발.

"잘 만들었는데, 미션 조건을 다시 봐봐. 고양이가 어디에 있어야 해?"
— 아빠의 최대한 덤덤한 반응

그렇게 좌표 개념 설명이 시작되었습니다. x가 오른쪽으로 갈수록 커지고, 왼쪽으로 갈수록 작아진다는 것. 음수는 왼쪽 방향이라는 것. 설명을 듣더니 아들은 바로 이해했고, "x좌표를 -3씩 이동"으로 바꿨습니다. 바퀴벌레가 드디어 올바른 방향으로 달려오기 시작했어요.

반응형

스스로 업그레이드: "닿으면 게임이 끝나야 해요"

미션을 클리어하자마자 아들이 멈추지 않았습니다. 처음엔 "무한반복"으로 연결했던 구조를 바꾸기 시작했어요.

"고양이한테 닿으면 게임이 끝나야 하잖아요. 그러면 조건이 있어야 해요."

1일차에 배운 "~까지 반복하기" 블록이 떠올랐던 거죠. 색상을 어떻게 고양이 색으로 지정하냐는 게 문제였는데, 이 타이밍에 저는 딱 하나만 알려줬습니다.

💡 아빠가 알려준 것: 스포이드

색상 선택 창에서 스포이드 아이콘을 클릭하면 화면에서 직접 색을 뽑아올 수 있다는 것. 나머지는 아들이 직접 해봤어요.

스포이드로 고양이 몸통을 클릭하자 색상이 등록되었고, "고양이 색에 닿을 때까지 반복"하다가 닿는 순간 멈추는 바퀴벌레가 완성되었습니다.

바퀴벌레 스크래치 스크립트

바퀴벌레 스프라이트의 최종 스크립트 — 색에 닿을 때까지 반복, 닿으면 시작 위치로 복귀

보너스: 점프도 혼자 만들었습니다

미션 수행 시간이 남자 아들이 바로 선언했어요. "이제 고양이가 점프해야 해요."

이번엔 제가 아무것도 알려주지 않았습니다. 어떻게 하나 지켜봤더니, 고양이 스프라이트를 클릭했을 때 작동하는 블록을 스스로 구성하기 시작했어요.

🖱️ 이 스프라이트를 클릭했을 때
  ↑ y좌표를 70만큼 바꾸기
  ⏱️ 3초 기다리기
  ↓ y좌표를 -70만큼 바꾸기

올라갔다가, 잠깐 있다가, 다시 내려오는 점프. y좌표 개념을 배운 지 30분도 안 됐는데 직접 점프에 적용했어요. 숫자 70도 여러 번 바꿔가며 "너무 높으면 이상하다"는 걸 느끼면서 조정했습니다.

스크래치 2일차 결과 - 무대 위의 고양이와 바퀴벌레

콘서트 무대 위에서 벌어지는 고양이와 바퀴벌레의 숨막히는 추격전 🎸

💬 아들의 선언

"바퀴벌레가 고양이 잡으면 처음 위치로 돌아와서 또 달려와야 해요. 그래야 진짜 게임이잖아요."

그리고 아들은 실제로 그걸 구현했습니다.

결국 게임 루프까지 완성했습니다

계획된 미션 시간은 이미 초과한 상태였습니다. 그런데 아들이 자리에서 일어나지 않았어요.

최종 구현 내용은 이렇습니다. 바퀴벌레는 노란색(고양이)에 닿거나 벽에 닿을 때까지 x좌표를 -3씩 이동합니다. 조건이 만족되는 순간 (x, y) = (180, -73) — 오른쪽 출발 위치로 순간 이동한 뒤, 처음부터 다시 반복합니다. 스크린샷 속 스크립트가 바로 그 최종본이에요.

🔁 무한 반복하기
  🔁 노란색에 닿거나, 벽에 닿을 때까지 반복
    ↔ x좌표를 -3만큼 바꾸기
  📍 x: 180, y: -73 으로 이동하기

게임이 끝나지 않고 계속 이어지는 구조. 어른의 눈으로 보면 게임 루프입니다. 아들의 눈으로 보면 그냥 "바퀴벌레가 계속 달려와야 하니까"였고요.

👨‍💻 이 장면이 저를 웃게 만든 이유

미션 시간이 초과됐다고 알려줬는데, 아들이 한 말이 이거였어요.

"아빠, 조금만요. 이거 완성 안 하면 찜찜해요."

개발자라면 다 아는 그 마음입니다. 기능 하나 미완성인 채로 PR 올리기 싫은 그 마음. 퇴근 시간이 지났는데 버그 하나 남겨두고 자리 뜨지 못하는 그 마음. 아들한테서 그걸 봤습니다.

개발자 아빠의 시각: 오늘 아들이 배운 것

오늘 세션에서 아들이 다룬 개념을 정리하면 이렇습니다. x, y 좌표의 방향 개념, 조건부 반복("~까지 반복"), 스포이드를 이용한 색상 감지, y좌표로 점프 구현, 그리고 위치 초기화와 게임 루프. 그리고 하나 더 — 막혔을 때 다른 방법을 시도하는 것.

고양이랑 바퀴벌레 위치를 바꾼 건 "틀린 답"이 아니었습니다. 제약 조건을 바꿔서 문제를 우회하려는 시도였어요. 개발 세계에서는 이걸 창의적 해결이라고 부릅니다. 물론 미션 조건이 있었으니 다시 도전해야 했지만, 그 발상 자체는 나쁘지 않았어요.

🧭

막히면 우회로를 찾는다

좌표가 이해 안 되면 캐릭터를 바꾸면 되지. 이게 아이의 논리였습니다.

🔁

개념은 쓰면서 익힌다

y좌표를 설명한 게 아니라, 점프를 만들다 보니 y좌표가 이해되었어요.

🎮

미션이 동기를 만든다

"게임이 되어야 해"는 동기가 되어 자발적인 추가 구현까지 이어졌습니다.

완성해야 편하다

시간 초과도 아랑곳 않고 게임 루프를 완성했습니다. 이미 개발자 마인드네요.

다음 이야기

3일차는 어떤 미션이 기다리고 있을까요?

이미 게임 루프까지 구현한 아들. 다음 미션의 난이도는 올라갑니다.