스티브코딩

e스포츠 맵 만들기

NPC·커맨드 블록으로 대회 맵 만들기, 마크배그·경찰과 도둑·방탈출 응용

도구·명령어2026-10-20 갱신

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 등)는 원본 월드 기준입니다. 내 맵의 출발 지점 좌표로 바꿔 쓰세요. 이 구조는 파쿠르·퀴즈 스피드런 월드와 같습니다.
출발 지점 옆에 둔 ‘준비’ NPC
출발 지점 옆에 둔 ‘준비’ NPC

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 점수 +1
  • tp @initiator 471 102 500 출발 지점으로
  • @initiator: NPC 버튼을 누른 사람만 대상으로
  • 순위: 먼저 누른 순서대로 채팅에 기록 → 사이드바 점수 증가
  • 응용: 퀴즈 NPC·텔레포트·아이템 보상을 더해 나만의 대회 맵 완성
  • 명령어 기초와 커맨드 블록 설정은 PART 02 3장 참고
도착 지점의 ‘승리 선포’ NPC
도착 지점의 ‘승리 선포’ NPC

응용: 커맨드로 만든 마크배그 ① 게임 규칙

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

마크배그 ② 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 를 켜고 확인)
① 효과 NPC의 명령과 버튼 이름 (01:56)
① 효과 NPC의 명령과 버튼 이름 (01:56)
② 버튼 모드를 끈 spreadplayers 명령 (02:13)
② 버튼 모드를 끈 spreadplayers 명령 (02:13)

마크배그 ③ 숨겨 둔 커맨드 블록

줄 이름 블록 설정 화면에서 읽은 명령
게임 시작(낙하 지점·모드) 커맨드 블록 줄 `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만 제자리로)
- **게임 시작 줄**이 하는 일: 죽음·분·초 스코어보드 만들기(처음 4분 0초) → 커맨드 블록 출력 끄기 → 시간 체크 시작 → 아이템 비우고 겉날개·지도·기본 아이템 지급 → 놓인 레드스톤 블록을 공기로 지우기(다시 누를 수 있게) - **죽음 처리 원리**: 리스폰 지점에 온 플레이어에게 태그 → 태그 있는 사람만 재생 효과·기본 아이템·죽음 +1·spreadplayers·지도 → 태그 삭제
① 반복 커맨드 블록 npc이동 (05:36)
① 반복 커맨드 블록 npc이동 (05:36)
② 시작npc이동과 게임시작 NPC의 승리 조건 안내 (06:07)
② 시작npc이동과 게임시작 NPC의 승리 조건 안내 (06:07)

응용: 경찰과 도둑 (역할이 다른 팀 게임)

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

응용: 위치로 승리를 판정하는 도둑잡기

  • 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" }
            ] },
            …
player.json의 damage_sensor: 나와 상대 모두 team1이면 (00:59)
player.json의 damage_sensor: 나와 상대 모두 team1이면 (00:59)

응용: 방탈출 템플릿 월드로 나만의 탈출 게임 만들기

  • 시작하는 법: 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 -x z -z y -y 그 방향으로 방 하나 붙이기 → e 방금 만든 방부터 실행 취소(계속 입력하면 모두 지움)
  • 모둠별로 종이에 방 배치를 설계 → 코드로 뼈대 짓기 → 방마다 퀴즈·NPC·레드스톤 장치를 넣어 방탈출 완성
  • 좌표축(x·y·z)과 +·− 방향을 익히는 데도 좋습니다.
① 변수와 채팅 명령 안내(s, x, -x, z, -z, y, -y, e) (00:21)
① 변수와 채팅 명령 안내(s, x, -x, z, -z, y, -y, e) (00:21)
② 여러 방향으로 이어 붙인 방 (02:11)
② 여러 방향으로 이어 붙인 방 (02:11)

관련 영상

관련 공식 자료

함께 보기

출처

  • 스티브코딩 유튜브 「1시간 활동 스피드런
  • 「방탈출 게임 월드 배포! 나의 게임으로 다시 만들어보세요.」(2025)
  • 유튜브 「NPC의 새로운 활용 방법을 알아보자! 마크배그 커맨드해설」(2021-07-09)