e스포츠 맵 직접 만들기 ①: 준비 NPC
- 출발 지점 옆에 둔 ‘준비’ NPC — NPC 하나에 명령 버튼 두 개 / 줄을 바꾸면 여러 명령이 차례로 실행
- 버튼 1 모두 이동 및 모드 변경
tp @a 469 102 499모두 출발 지점으로gamemode s @a서바이벌로spawnpoint @a 468 102 501재생성 위치 = 출발 지점- 버튼 2 등수 초기화
scoreboard objectives remove rank지난 기록 지우기scoreboard objectives add rank dummy 완주한사람scoreboard objectives setdisplay sidebar rank오른쪽에 표시- 좌표(469 102 499 등)는 원본 월드 기준입니다. 내 맵의 출발 지점 좌표로 바꿔 쓰세요. 이 구조는 파쿠르·퀴즈 스피드런 월드와 같습니다.

e스포츠 맵 직접 만들기 ②: 반복 커맨드 블록
- 오답 칸: 3칸 안의 플레이어를 출발 지점으로 —
tp @a[r=3] 502 101 490 - 설정: 반복 · 무조건부 · 레드스톤 필요 · 지연 0틱
- 장애물: 10칸 위에서 화살 떨어뜨리기 —
summon arrow ~ ~10 ~ - 설정: 반복 · 무조건부 · 레드스톤 필요 · 지연 20틱(1초)


e스포츠 맵 직접 만들기 ③: 승리 선언 NPC
- 도착 지점의 ‘승리 선포’ NPC
title @a title 완주성공!화면 가운데execute as @initiator run say 완주 성공! 도착!scoreboard players add @initiator rank 1점수 +1tp @initiator 471 102 500출발 지점으로- @initiator: NPC 버튼을 누른 사람만 대상으로
- 순위: 먼저 누른 순서대로 채팅에 기록 → 사이드바 점수 증가
- 응용: 퀴즈 NPC·텔레포트·아이템 보상을 더해 나만의 대회 맵 완성
- 명령어 기초와 커맨드 블록 설정은 PART 02 3장 참고

응용: 커맨드로 만든 마크배그 ① 게임 규칙
- 배틀그라운드를 메이크코드 없이 커맨드 블록과 NPC만으로 만든 월드(마크게임제작실험실)
- 시작·종료: 시작 구역의 ‘게임시작’ NPC에서 시작, 끝나면 반드시 ‘종료(초기화)’ 누르기
- 승리 조건(NPC 안내): 정해진 시간 동안 가장 적게 죽은 플레이어가 승리 — 많이 잡기보다 덜 죽기
- 화면: 오른쪽 사이드바 ‘죽음’ 횟수, 가운데 아래 남은 시간(분·초). 4분마다 모든 플레이어가 한곳에 모여 전투
- NPC 보급: 맵 곳곳의 NPC와 대화하면 아이템·효과를 받고, 그 NPC는 다른 곳으로 사라짐. NPC는 30초마다 무작위로 이동
- 노란 NPC는 좋은 보급(축복: 좋은 효과, 잠재력: 불사의 토템 — 왼손에 들기). 배고프면 체력이 회복되지 않으니 빵 챙기기


마크배그 ② NPC 고급 설정으로 보급하기
- 효과 NPC: 버튼마다 가장 가까운 플레이어(@p)에게 효과
/effect @p invisibility 30 1버튼 이름 ‘투명화’/effect @p strength 50 2- 사라지는 NPC: 모든 보급 NPC에
/spreadplayers 47 0 1 90 @s— (47, 0)을 중심으로 90칸 안 무작위 위치로 자기 자신을 보냄 - 이 명령은 버튼 모드를 끈 명령으로 넣어, 버튼을 누를 때가 아니라 대화를 닫을 때마다 실행
- y 좌표가 없어도 지표면 높이에 맞춰 보내 줌
- 시작·종료 NPC: 버튼을 누르면 정해진 자리에 레드스톤 블록을 놓아 숨겨 둔 커맨드 블록 줄을 실행하고, 실행 뒤에는 ‘입력레드스톤삭제’ 블록이 그 레드스톤 블록을 다시 지움(04:22 설명, NPC 명령 원문은 배포 월드에서 /wb 를 켜고 확인)


마크배그 ③ 숨겨 둔 커맨드 블록
| 줄 이름 | 블록 설정 | 화면에서 읽은 명령 |
| 게임 시작(낙하 지점·모드) | 커맨드 블록 줄 | `tp @a 30 200 6` → `gamemode s @a` (하늘에서 겉날개로 낙하 시작) |
| 스폰위치설정 | 커맨드 블록 | `setworldspawn 30 64 8` |
| npc이동 | 반복 · 무조건부 · 항상 사용 | `/spreadplayers 47 0 1 90 @e[type=npc]` |
| 시작npc이동 | 체인 · 조건부 · 항상 사용 | `tp @e[name=Man] 22 64 8` (시작 NPC만 제자리로) |


응용: 경찰과 도둑 (역할이 다른 팀 게임)
- 술래잡기(경도)를 마인크래프트 게임으로 만든 예(마크게임제작실험실, 2019)
- 경찰 1명: 엔더 진주로 순간이동 / 능력 아이템으로 무작위 플레이어 한 명에게 구속·실명 / 힘 버프라 한 번만 때려도 잡음
- 도둑 나머지: 다이아몬드 곡괭이를 들고 클릭하면 유리벽을 세워 경찰을 한 번 막음 / 신속 버프
- 진행: 연습 라운드 → 본 라운드 2분 → 경찰을 바꿔 가며 반복
- 밸런스 조정: 경찰이 너무 느려 신속 버프를 더 줌 — 플레이 후 학생과 ‘어떻게 고치면 공정할까’ 토의
- 영상 설명란에 ‘스티브코딩팀이 메이크코드로 직접 디자인한 게임’이라고 적혀 있고, 게임 코드는 자료 링크에서 받습니다.


응용: 위치로 승리를 판정하는 도둑잡기
- 30×30 경기장 · 네 모서리(높이 3)가 감옥 · 도둑 NPC 4명
- 경찰 승리: 네 모서리 감옥에 도둑이 모두 들어가면 / 도둑 승리: 도둑이 경기장 밖으로 빠져나가면
- 준비: NPC 버튼으로 도둑을 경기장 안에 흩어 놓기 (
spreadplayers 15 15 1 11 @s· 감옥 좌표 1·29) scoreboard players set "잡힌 도둑" CountNpc 0반복: 매번 0부터execute as @e[type=npc,x=1,y=3,z=1,r=1] run scoreboard players add "잡힌 도둑" CountNpc 1감옥 4곳execute if score "잡힌 도둑" CountNpc matches 4 run title @a title 경찰 승리!
교사용 메모 · 도둑잡기 만드는 법
- 경찰(학생)이 도둑 NPC 4명을 네 모서리 감옥으로 옮기면 경찰 승리, 도둑이 경기장 밖으로 나가면 도둑 승리인 게임입니다. 커맨드 블록 3세트(게임 설정 / 잡힌 도둑 세기 / 나간 도둑 세기)로 만듭니다.
- 원본(2022)은 옛 문법(testfor + 조건부 체인,
execute @e[...] ~~~ …)이라 현재 교육용(베드락) 문법execute as … run/execute if score … matches로 바꿨습니다. 바꾼 명령이라 수업 전에 시험 월드에서 한 번 돌려 봅니다. - 게임 설정(일반):
scoreboard objectives add CountNpc dummy 도둑/scoreboard objectives setdisplay sidebar CountNpc/gamerule commandblockoutput false/spawnpoint @a 15 3 15/setworldspawn 15 3 15 - 게임 시작:
setblock 7 -9 20 redstone_block(세기 회로 켜기) →title @a title 도둑잡기 게임 시작! - NPC 버튼:
tp @s 1 3 29처럼 자리를 잡은 뒤spreadplayers 15 15 1 11 @s로 경기장 안에 흩어짐 - 이긴 뒤에는
execute if score … matches 4 run setblock 7 -9 20 air로 회로를 끕니다. - [확인 필요] 탈출 판정: 원본은 ‘나간 도둑’을
execute @e[type=npc,x=4,y=2,z=4,dx=22,dy=0,dz=22]로 세는데, 이 범위는 경기장 안쪽이라 승리 조건이 거꾸로일 수 있습니다. 경기장 밖을 세려면 예:execute as @e[type=npc] unless entity @s[x=0,y=0,z=0,dx=30,dy=10,dz=30] run scoreboard players add "나간 도둑" CountNpc 1(감옥 칸이 경기장 범위 안에 있는지도 함께 확인).
팀전 설정: 같은 팀끼리 공격 막기 (팀킬 금지)
- 팀은 태그로 구별 — 두 플레이어에게 같은 태그(
team1)를 주면 서로 때려도 피해가 없음, 태그가 없거나 다르면 공격 가능 - 행동팩 →
entities→player.json의 components에minecraft:damage_sensor를 추가해 구현 - 영상의 player.json에는 팀이 다섯 개까지 들어 있고, 팀 이름을 바꾸려면 이 부분의 태그 이름을 고침(태그는 행동팩에 적힌 이름과 같아야 함)
- 고급(행동팩 수정) 내용입니다. 코드 전체는 영상 설명란의 GitHub player.json에서 복사합니다.
"minecraft:damage_sensor": {
"triggers": [
{
"on_damage": {
"filters": {
"any_of": [
{ "all_of": [
{ "test": "has_tag", "value": "team1" },
{ "test": "has_tag", "subject": "other", "value": "team1" }
] },
…

응용: 방탈출 템플릿 월드로 나만의 탈출 게임 만들기
- 시작하는 법: 1 NPC 대화 — 코드 작성기(C)로 코드 불러와 시작 → 2 채팅에 1 — 1번 방으로 이동 → 3 방 통과 — 조건을 채우면 다음 방(채팅 명령 2, 3 …)
| 방 | 미션 | 통과 조건(코드) |
| 1 | 힌트(신호등·겨자·경고 카드) | 숨은 노란 양털 부수기 |
| 2 | 유리를 부숴라 | 좀벌레 처치 → 공중부양 |
| 3 | 건곤감리 | 빈칸에 검은색 콘크리트(블록 탐지) |
| 4 | 몬스터 대결 | 변명자 처치 수 6 초과 |
| 5 | 수수께끼 | 정답을 채팅에 영어로 입력 |
| 6 | NPC 퀴즈 | 정답이면 통과, 오답이면 몬스터 |
| 7 | 미로(화살표 힌트) | 다이아 블록 탐지 |
| 8 | 파쿠르 | 블록 탐지 → 탈출 성공 |

교사용 메모 · 방탈출 템플릿 코드 구조
- 직접 탈출 맵을 만들어 보기 위한 템플릿 월드입니다. 월드와 코드 작성기(MakeCode)를 함께 씁니다.
- 시작(영상 0:00): 월드의 NPC와 대화 → C 키로 코드 작성기를 열어 코드 불러오기 → 시작 → 채팅에 1 입력 → 1번 방으로 이동.
- 코드 구조(3:53~): 방을 만드는 코드 + 채팅 명령 1, 2, 3 … 이 각 방으로 텔레포트하는 코드. 방마다 조건(블록 파괴·블록 탐지·처치 수·채팅 입력)을 만족하면 다음 번호의 채팅 명령을 실행합니다.
- 3번 방: 정해진 좌표에 원하는 블록이 놓였는지 블록 탐지로 확인
- 4번 방: 변명자를 잡을 때마다 새로 소환하고 처치 수를 세어 6마리를 넘으면 통과
- 6번 방: NPC 버튼 명령은
/wb(월드빌더)를 켜야 볼 수 있습니다. 오답(x)이면 몬스터, 정답(o)이면 다음 방 명령 실행(5:21). NPC 버튼 명령 원문은 영상 5:30 설명과 배포 월드에서 확인합니다. - 8번 방: 블록 탐지 → 공중부양 효과, 크리에이티브 모드, 탈출 성공 메시지
- PART 05 ‘역사 방탈출’(NPC 문제형)과 달리 방 이동을 코드로 처리하므로 코딩 수업으로 이어 가기 좋습니다. 학생은 방의 문제·조건만 바꿔 자기 게임으로 만듭니다.
탈출 맵 뼈대를 코드로 빨리 짓기 (건축 템플릿)
- 메이크코드 건축 템플릿: 코드 파일을 받아 코드 작성기의 ‘가져오기’로 불러오기
- 시작하면 블록에서 변수 정하기: 높이(영상 6), 가로세로(영상 10), 벽블록·바닥블록·천정블록
- 채팅 명령:
s내 위치에 첫 방 →x-xz-zy-y그 방향으로 방 하나 붙이기 →e방금 만든 방부터 실행 취소(계속 입력하면 모두 지움) - 모둠별로 종이에 방 배치를 설계 → 코드로 뼈대 짓기 → 방마다 퀴즈·NPC·레드스톤 장치를 넣어 방탈출 완성
- 좌표축(x·y·z)과 +·− 방향을 익히는 데도 좋습니다.

