엔트리로 야구게임 중 주자가 홈에 도달했을 때 점수를 표시하려면 신호(signal) 기능과 조건문(if-then)을 활용하여 오브젝트 간의 상호작용을 설정해야 합니다.
엔트리 블록 프로그래밍 기초 이해하기
엔트리는 네이버커넥트 재단에서 제작한 무료 블록형 프로그래밍 언어로, 초등학교 6학년 실과교과서에도 수록된 교육용 플랫폼입니다.
엔트리의 기본 구성은 다음과 같습니다:
- 오브젝트: 투수, 타자, 야구공, 야구장 등 게임에 필요한 요소
- 명령 블록: 오브젝트의 동작을 제어하는 블록(움직임, 회전, 색상 변경 등)
- 블록 조합: 블록들을 조립하여 프로그램 로직 구현
야구게임처럼 여러 오브젝트가 상호작용하는 게임은 각 오브젝트별로 별도 블록 세트를 작성해야 합니다. 예를 들어 투수가 공을 던지고, 타자가 친 공이 날아가는 방식으로 각각의 움직임을 독립적으로 프로그래밍합니다.
초보자가 주의할 점은 배경화면을 선택한 상태에서 블록을 입력하면 배경이 움직이거나 말하게 되는 실수를 피하는 것입니다. 블록을 작성하기 전에 항상 어떤 오브젝트가 선택되어 있는지 확인해야 합니다.
신호(Signal) 기능으로 오브젝트 간 상호작용 설정
주자가 홈에 들어올 때 점수가 올라가는 기능을 구현하려면 신호(signal) 기능을 사용합니다. 이는 한 오브젝트의 동작이 다른 오브젝트의 동작을 트리거하는 메커니즘입니다.
신호 생성 방법:
- 신호 만들기: 엔트리 좌측 [속성] – [신호 만들기]에서 “홈런” 또는 “점수” 같은 새로운 신호 생성
- 신호 발신: 주자 오브젝트가 특정 위치(홈 베이스)에 도달하면 이 신호를 발신하도록 블록 작성
- 신호 수신: 점수 표시 오브젝트가 신호를 받으면 점수 변수를 1 증가시키는 블록 실행
예시 구성:
– 주자 블록: “주자가 홈 위치(x, y)에 도달하면” → “점수 신호 발신”
– 점수판 블록: “점수 신호를 받으면” → “점수 변수 + 1” → “점수 표시”
이 방식으로 여러 주자가 동시에 홈에 도달해도 각각 점수가 누적됩니다.
조건문(if-then)과 변수로 점수 누적 로직 구현
신호와 함께 조건문(if-then) 블록을 사용하면 더 정교한 점수 시스템을 만들 수 있습니다.
점수 누적의 기본 흐름:
1단계: 변수 선언 → "점수" 변수 생성 (초기값 0)
2단계: 충돌 감지 → 주자가 홈베이스에 닿았는가?
3단계: 조건 판정 → if(주자.닿음) then(점수 + 1)
4단계: 점수판 업데이트 → 변수값을 텍스트로 표시
감지 방법별 구현:
| 감지 방식 | 사용 블록 | 특징 |
|---|---|---|
| 신호 기반 | [신호 받기] | 여러 오브젝트의 상호작용에 유리 |
| 조건 기반 | [만약] + [닿음] | 실시간 감지로 반응 속도 빠름 |
| 좌표 기반 | [x 값이 ~일 때] | 정확한 위치 판정 필요 시 |
조건문에서 주의할 점은 무한 루프 방지입니다. 같은 주자가 여러 번 점수를 얻지 않도록 “처음 한 번만 신호 발신” 옵션을 추가하거나, 주자가 홈을 통과한 후 “리셋” 신호를 받도록 구성합니다.
게임 데이터 관리와 점수판 UI 구성
점수 기능이 완성되었다면 게임 UI(점수판)을 시각적으로 표현해야 합니다.
점수판 구성 요소:
- 점수 숫자 표시: 텍스트 오브젝트로 “점수: 0” 형식의 초기 텍스트 설정
- 변수 값 실시간 반영: 점수 변수가 변경될 때마다 텍스트 내용을 업데이트하는 블록
- 시각 효과: 점수가 올라갈 때 색상 변경, 사운드 추가 등으로 게임 경험 강화
예시 블록 구성:
[무한 반복]
→ [텍스트를 점수 변수로 바꾸기]
→ [새로운 값: ("현재 점수: " + 점수)]
추가 기능으로 회차별/이닝별 점수 분리도 가능합니다. 점수 변수를 “팀A 점수”, “팀B 점수”로 나누어 설정하면 다인 게임으로 확장할 수 있습니다. 게임 리셋 버튼을 만들어 “R 키를 누르면 모든 점수 0으로 초기화”하는 기능도 초보자가 쉽게 추가할 수 있습니다.
초보자가 자주 하는 실수와 해결 방법
엔트리 야구게임 제작 과정에서 흔한 문제와 그 해결법은 다음과 같습니다:
실수 1: 점수가 올라가지 않음
– 원인: 신호 발신 블록과 수신 블록의 신호 이름이 일치하지 않음
– 해결: [속성]에서 신호 목록을 확인하고 정확한 신호명 사용
실수 2: 점수가 계속 올라감 (무한 증가)
– 원인: 조건이 계속 만족되어 신호를 반복 발신
– 해결: “주자가 홈을 떠난 후에만 다시 인식”하는 로직 추가
실수 3: 특정 주자만 점수 안 올라감
– 원인: 개별 주자 오브젝트에 신호 발신 블록이 누락됨
– 해결: 각 주자(1루, 2루, 3루)마다 독립적인 블록 세트 작성
실수 4: 배경화면이 움직임
– 원인: 배경화면 선택 상태에서 블록 입력
– 해결: 블록 작성 전 항상 해당 오브젝트 클릭 확인
게임이 복잡해질수록 각 오브젝트의 역할을 명확히 문서화하고, 블록 조립 전에 전체 구조를 스케치하는 것을 추천합니다.
자주 하는 질문
Q. 엔트리에서 신호 기능을 사용하면 여러 번 반복으로 보내질 수 있나요?
네, 신호는 조건이 만족될 때마다 반복 발신됩니다. 다만 주자가 홈에 도달할 때 한 번만 점수가 올라가도록 하려면 신호 발신 후 “주자가 홈에서 떠날 때까지 대기” 로직을 추가해야 합니다. 신호 수신 쪽에서 “처음 한 번만” 플래그를 사용하는 방법도 있어요.
Q. 엔트리에서 점수 변수의 초기값을 0이 아닌 다른 숫자로 설정할 수 있나요?
물론입니다. 변수를 만들 때 초기값을 0 대신 다른 숫자로 설정하거나, 게임 시작 시 “점수를 10으로 설정” 같은 블록을 추가할 수 있어요. 여러 경기를 이어갈 때는 [무한 반복] 블록 전에 “점수를 0으로 설정” 블록을 넣어 매번 초기화하면 됩니다.
Q. 1루에서 온 주자와 2루에서 온 주자에게 서로 다른 점수를 줄 수 있나요?
가능합니다. 1루에서 홈까지는 1점, 2루에서 홈까지는 2점 같은 식으로 구현하려면, 주자마다 신호를 분리하거나(“1루 주자 점수”, “2루 주자 점수”) 변수에 스코어를 다르게 더해주는 블록을 사용하면 되어요.
Q. 엔트리 야구게임에서 여러 명의 주자가 동시에 홈에 도달하면 어떻게 처리되나요?
신호 기반 구현이라면 각 주자가 독립적으로 신호를 발신하므로 각각의 점수가 누적됩니다. 예를 들어 3명이 동시에 홈에 들어오면 점수가 3점 올라갑니다. 만약 “동시 도달 1점만 인정” 같은 룰을 원한다면 추가 로직(“일정 시간 내 도달한 주자는 1점”이라는 조건)을 구성해야 해요.
Q. 아웃이 되었을 때 획득한 점수를 다시 뺄 수 있도록 구현할 수 있나요?
네, 점수 변수에 음수를 더하거나 “점수에서 1 빼기” 블록을 사용하면 됩니다. 아웃 판정은 주자가 특정 구역(아웃 존)에 들어가거나 투수 공에 닿을 때 신호를 발신하게 만들고, 그 신호를 받으면 점수를 감소시키거나 주자를 초기화하는 방식으로 구현할 수 있어요.