💡 [1편] 한 줄 요약
손으로 일일이 블록을 놓지 않고! 마인크래프트 에듀케이션(MakeCode JavaScript) 프롬프트 한 문장으로 실물 첨성대의 유선형 곡선과 남창구 디테일까지 반영한 '경주 첨성대'를 3초 만에 자동 건축하는 노하우를 소개합니다.
🏛️ 한국의 문화유산 시리즈 #1: 코딩으로 만드는 경주 첨성대
마인크래프트 에듀케이션 수업 시간에 학생들과 문화유산 건축 프로젝트를 진행할 때, 수백 개의 블록을 직접 손으로 쌓는 것은 시간이 오래 걸리고 항아리 모양의 원형 곡선을 수동으로 표현하기 어렵습니다.
하지만 AI 프롬프트를 활용해 MakeCode 자바스크립트(JavaScript) 코드를 생성하면, 채팅창에 start만 입력해도 기단부, 곡선 몸통부, 남창구(창문), 정자석(井字石), 대형 칠판과 NPC까지 한 번에 자동 건축된답니다!
📊 수동 블록 배치 vs 자바스크립트 코딩 건축 비교 표
| 구분 / 건축 단계 | 손으로 직접 블록 놓기 (기존) | 자바스크립트 프롬프트 자동 건축 (코딩) |
|---|---|---|
| 몸통 유선형 곡선 구현 | 층별 원형 크기를 눈짐작으로 쌓아 비대칭 오차가 자주 발생함 | `radiusMap` 배열 및 `Math.sqrt()` 반경 알고리즘으로 매끄러운 항아리 곡선 완성 |
| 세부 디테일 (남창구/정자석) | 창문 위치 계산과 상부 교차 우물 정(井)자 돌 배치가 복잡함 | h=8~10층 창문 구멍 및 인방석, Y=20~21층 정자석 교차 배치 자동화 |
| 소요 시간 및 수업 효율 | 단순 블록 노가다로 30분 이상 소요 | 채팅창에 `start` 입력 시 3초 만에 완벽 재현 및 코딩 수학 원리 습득 |
🛠️ AI 프롬프트 구성: 기본형 vs 디테일 정교화 프롬프트
1) 기본형 프롬프트 예시
마인크래프트 에듀케이션(MakeCode JavaScript)에서 실행할 '경주 첨성대' 건축 코드를 작성해 줘. 채팅창에 'start'를 입력하면 하단이 볼록한 곡선 모양으로 만들어지고 정면에 대형 칠판과 NPC를 소환할 것. (STONE 블록 사용 및 player.execute 명령어 활용)
2) 디테일 정교화 프롬프트 (추천)
[역할] 너는 마인크래프트 에듀케이션 코딩 전문가야.
[요청] 채팅창에 'start'를 입력하면 첨성대 사진의 유선형 곡선과 디테일을 반영한 '경주 첨성대(2:1 스케일)'를 자동 건축하고 칠판과 NPC를 생성하는 자바스크립트 코드를 짜줘.
[세부 조건]
- 기단부/정자석: `STONE`, 몸통부: `SANDSTONE`, 인방석/장대석: `CHISELED_SANDSTONE`, 울타리: `OAK_FENCE`
- 1단계 기단부: Y=0 (11x11), Y=1 (9x9)
- 2단계 몸통부: `radiusMap = [5.5, 5.5, 5.4, 5.2, 5.0, 4.8, 4.5, 4.3, 4.1, 3.9, 3.7, 3.5, 3.3, 3.1, 3.0, 3.0, 3.0, 3.0]`, `Math.sqrt()` 사용
- 남창구(창문): h=8~10층 남쪽 구멍 및 인방석, h=12,15층 4축 돌출 장대석 배치
- 3단계 정자석: Y=20(동서 돌출 X:-4~4), Y=21(남북 돌출 Z:-4~4)
- 4단계 칠판/NPC: `player.execute("setblock ~0 ~1 ~9 board")`, `player.execute("summon npc ~3 ~0 ~9")`
💻 완성된 MakeCode JavaScript 코드
// ==================================================
// [한국의 문화유산 #1] 경주 첨성대 (실물 사진 정밀 반영)
// 실행 방법: 마인크래프트 채팅창(T)에 'start' 입력
// ==================================================
player.onChat("start", function () {
let startPos = player.position();
// 사용 블록 정의
let baseBlock = STONE; // 기단부: 매끄러운 돌
let bodyBlock = SANDSTONE; // 몸통부: 사암 (석재 질감)
let pointBlock = CHISELED_SANDSTONE; // 창문 인방석 및 외벽 돌출 석재
let topBlock = STONE; // 정자석: 매끄러운 돌
player.say("🏛️ 실제 첨성대 사진 디테일을 반영한 건축을 시작합니다...");
// --------------------------------------------------
// [1단계] 기단부 (사진 속 계단식 2단 사각형 석단)
// 아래층: 11x11, 위층: 9x9 단차 표현
// --------------------------------------------------
for (let y = 0; y < 2; y++) {
let size = 5 - y;
for (let x = -size; x <= size; x++) {
for (let z = -size; z <= size; z++) {
blocks.place(baseBlock, startPos.add(pos(x, y, z)));
}
}
}
// --------------------------------------------------
// [2단계] 몸통부 - 사진 속 하단 볼록 유선형 곡선 프로필
// --------------------------------------------------
let radiusMap = [
5.5, 5.5, 5.4, 5.2, 5.0, 4.8, 4.5, 4.3,
4.1, 3.9, 3.7, 3.5, 3.3, 3.1, 3.0, 3.0, 3.0, 3.0
];
let startY = 2;
for (let h = 0; h < radiusMap.length; h++) {
let currentY = startY + h;
let r = radiusMap[h];
let rOuter = r + 0.35;
let rInner = r - 0.65;
let maxCoord = Math.ceil(r + 1);
for (let x = -maxCoord; x <= maxCoord; x++) {
for (let z = -maxCoord; z <= maxCoord; z++) {
let dist = Math.sqrt(x * x + z * z);
if (dist >= rInner && dist <= rOuter) {
// [남창구(중앙 정사각 창문)] (h = 8, 9, 10층)
if (h >= 8 && h <= 10 && z > 2 && Math.abs(x) <= 1) {
// 창문 아래/위 받침돌(h=8, h=10) 도드라지게 표현
if ((h === 8 || h === 10) && Math.abs(x) <= 1) {
blocks.place(pointBlock, startPos.add(pos(x, currentY, z)));
}
continue; // 창문 구멍 비우기
}
blocks.place(bodyBlock, startPos.add(pos(x, currentY, z)));
}
}
}
// [사진 속 핵심 디테일] 상부 외벽에 돌출된 장대석 4개 포인트 (h=12, h=15층)
if (h === 12 || h === 15) {
let pr = Math.round(r);
blocks.place(pointBlock, startPos.add(pos(pr, currentY, 0)));
blocks.place(pointBlock, startPos.add(pos(-pr, currentY, 0)));
blocks.place(pointBlock, startPos.add(pos(0, currentY, pr)));
blocks.place(pointBlock, startPos.add(pos(0, currentY, -pr)));
}
}
// --------------------------------------------------
// [3단계] 상단 정자석 (井字石 - 사진 속 교차 돌출 석단)
// --------------------------------------------------
let topY = startY + radiusMap.length; // Y = 20
// 20층 (아래 정자석): 동서 방향 돌출 (길이 8)
for (let x = -4; x <= 4; x++) {
blocks.place(topBlock, startPos.add(pos(x, topY, -2)));
blocks.place(topBlock, startPos.add(pos(x, topY, 2)));
}
// 21층 (위 정자석): 남북 방향 돌출 (길이 8)
for (let z = -4; z <= 4; z++) {
blocks.place(topBlock, startPos.add(pos(-2, topY + 1, z)));
blocks.place(topBlock, startPos.add(pos(2, topY + 1, z)));
}
// --------------------------------------------------
// [4단계] 대형 칠판(2x2 Board) 및 NPC 생성
// --------------------------------------------------
blocks.place(OAK_FENCE, startPos.add(pos(0, 0, 9)));
player.execute("setblock ~0 ~1 ~9 board");
player.execute("summon npc ~3 ~0 ~9");
player.say("✅ 실물 사진의 첨성대 형태가 완벽히 재현되었습니다!");
});
💡 마인크래프트 에듀케이션에서 코드를 실행하는 3단계 방법
🎮 마인크래프트 에듀케이션 코드 적용 순서
- 마인크래프트 에듀케이션 접속 후 키보드의 'C' 키를 눌러 코드 작성기(MakeCode)를 엽니다.
- 코드 작성기 상단 메뉴에서 'JavaScript' (자바스크립트) 모드로 전환합니다.
- 위 자바스크립트 전체 코드를 복사(Ctrl+C)하여 창에 붙여넣기(Ctrl+V)한 후, 우측 하단 재생(▶) 버튼을 누릅니다.
- 게임으로 돌아와 키보드 'T' 키를 눌러 채팅창을 열고
start라고 입력하면 캐릭터 위치에 경주 첨성대가 3초 만에 자동으로 건축됩니다!
🎯 에디터 한줄평
일일이 손으로 쌓던 시대는 끝! 자바스크립트 알고리즘 프롬프트를 통해 수학적 곡선과 역사적 디테일을 갖춘 경주 첨성대를 마인크래프트에서 만나보세요!
📚 마인크래프트 에듀케이션 코딩 시리즈
마인크래프트 에듀케이션 MakeCode JavaScript 코딩을 활용한 한국 문화유산 자동 건축 가이드 시리즈 1편입니다.