* 목차 *

2026년 4월 15일 수요일

마인크래프트 에듀케이션 픽셀아트를 위한 10 by 10 구획 생성 CO-STAR 프롬프트

마인크래프트 에듀케이션 에디션을 활용한 수업, 특히 픽셀아트나 개별 건축 수업을 진행해 보신 선생님이시라면 누구나 공감하실 고민이 있습니다. 바로 "학생들이 서로의 영역을 침범하거나, 실수로 바닥과 경계선을 부수는 문제"입니다.

오늘은 이런 고민을 한 번에 해결해 줄 '10x10 절대 파괴 불가 개인 캔버스' 자동 생성 자바스크립트 코드를 소개합니다. 채팅창에 명령어 하나만 입력하면 25명의 학생이 안전하게 작업할 수 있는 공간이 1초 만에 만들어집니다!

 왜 이 코드가 필요한가요?

이 코드는 초등학교 중학년 학생들을 대상으로 한 코딩 및 미술 통합 수업을 위해 맞춤 제작되었습니다. 학급 관리 도구를 자동화하여 선생님의 수업 준비 시간을 획기적으로 줄여줍니다.

 주요 기능 및 특징

  • 완벽한 물리적 보호 (Griefing 방지): * 경계선과 바닥 기초는 암반(ID 7)과 거부 블록(ID 211)으로 겹겹이 쌓여 있습니다. 서바이벌 모드의 학생들은 절대 친구의 영역이나 경계선을 파괴할 수 없습니다.

  • 안전한 자유 편집 구역:

    • 각 구역의 내부 바닥(-2 좌표)에는 허용 블록(ID 210)이 깔려 있습니다. 학생들은 이 블록 위(10x10 크기의 흰색 양털 캔버스)에서만 자유롭게 블록을 설치하고 부수며 픽셀아트를 즐길 수 있습니다.

  • 직관적인 시각적 안내:

    • 1번부터 25번까지의 자리 번호가 각 캔버스 바닥에 석탄 블록(ID 173)으로 명확하게 새겨져 있어, 학생들이 자신의 자리를 쉽게 찾을 수 있습니다.

  • 안정성 최적화: * 버전 차이로 인한 명칭(Name) 오류를 방지하기 위해 가장 안정적인 숫자 ID 방식으로 작성되었습니다.

 메이크코드(MakeCode) 자바스크립트

마이크로소프트 메이크코드의 자바스크립트 탭에 아래 코드를 그대로 복사하여 붙여넣기만 하면 됩니다. 게임 내 채팅창에 grid라고 입력하면 즉시 5x5(총 25개) 형태의 캔버스가 생성됩니다.

JavaScript
player.onChat("grid", function () {
    let size = 10;
    let count = 5;
    let totalSize = count * (size + 1) + 1;

    // 1. 구획 선 및 바닥 기초 공사
    for (let i = 0; i <= count; i++) {
        let offset = i * (size + 1);
        
        // [구획 선] 암반(7) 아래에 거부 블록(211)을 깔아 절대 파괴 방지
        blocks.fill(211, pos(offset, -2, 0), pos(offset, -2, totalSize - 1), FillOperation.Replace);
        blocks.fill(7, pos(offset, -1, 0), pos(offset, -1, totalSize - 1), FillOperation.Replace);
        
        blocks.fill(211, pos(0, -2, offset), pos(totalSize - 1, -2, offset), FillOperation.Replace);
        blocks.fill(7, pos(0, -1, offset), pos(totalSize - 1, -1, offset), FillOperation.Replace);
    }

    // 2. 학생 작업 공간 (허용 블록 설치)
    let num = 1;
    for (let z = 0; z < count; z++) {
        for (let x = 0; x < count; x++) {
            let startX = x * (size + 1) + 1;
            let startZ = z * (size + 1) + 1;

            // [핵심] 구획 안쪽 바닥에 허용 블록(210)을 설치
            // 이 블록이 깔린 곳 위에서는 학생들이 자유롭게 블록을 추가/삭제할 수 있습니다.
            blocks.fill(210, pos(startX, -2, startZ), pos(startX + 9, -2, startZ + 9), FillOperation.Replace);

            // 캔버스용 흰색 양털 (ID: 35)
            blocks.fill(35, pos(startX, -1, startZ), pos(startX + 9, -1, startZ + 9), FillOperation.Replace);

            // 숫자 그리기 (석탄 블록 ID: 173)
            drawRealNumber(startX + 2, startZ + 2, num);
            num++;
        }
    }
    player.say("구획은 무적! 안쪽은 자유! 격자 생성이 완료되었습니다.");
});

// 숫자 픽셀아트 생성 함수
function drawRealNumber(x: number, z: number, n: number) {
    let b = 173; 
    if (n >= 10) {
        let ten = Math.floor(n / 10);
        if (ten == 1) { for(let i=0; i<5; i++) blocks.place(b, pos(x, -1, z+i)); }
        else if (ten == 2) {
            blocks.fill(b, pos(x, -1, z), pos(x+2, -1, z), FillOperation.Replace);
            blocks.place(b, pos(x+2, -1, z+1));
            blocks.fill(b, pos(x, -1, z+2), pos(x+2, -1, z+2), FillOperation.Replace);
            blocks.place(b, pos(x, -1, z+3));
            blocks.fill(b, pos(x, -1, z+4), pos(x+2, -1, z+4), FillOperation.Replace);
        }
        x += 4;
    }
    let digit = n % 10;
    if (digit == 1) { for(let i=0; i<5; i++) blocks.place(b, pos(x+1, -1, z+i)); }
    else if (digit == 2) {
        blocks.fill(b, pos(x, -1, z), pos(x+2, -1, z), FillOperation.Replace);
        blocks.place(b, pos(x+2, -1, z+1));
        blocks.fill(b, pos(x, -1, z+2), pos(x+2, -1, z+2), FillOperation.Replace);
        blocks.place(b, pos(x, -1, z+3));
        blocks.fill(b, pos(x, -1, z+4), pos(x+2, -1, z+4), FillOperation.Replace);
    } else if (digit == 3) {
        blocks.fill(b, pos(x, -1, z), pos(x+2, -1, z), FillOperation.Replace);
        blocks.place(b, pos(x+2, -1, z+1));
        blocks.fill(b, pos(x, -1, z+2), pos(x+2, -1, z+2), FillOperation.Replace);
        blocks.place(b, pos(x+2, -1, z+3));
        blocks.fill(b, pos(x, -1, z+4), pos(x+2, -1, z+4), FillOperation.Replace);
    } else if (digit == 4) {
        blocks.fill(b, pos(x, -1, z), pos(x, -1, z+2), FillOperation.Replace);
        blocks.place(b, pos(x+1, -1, z+2));
        blocks.fill(b, pos(x+2, -1, z), pos(x+2, -1, z+4), FillOperation.Replace);
    } else if (digit == 5) {
        blocks.fill(b, pos(x, -1, z), pos(x+2, -1, z), FillOperation.Replace);
        blocks.place(b, pos(x, -1, z+1));
        blocks.fill(b, pos(x, -1, z+2), pos(x+2, -1, z+2), FillOperation.Replace);
        blocks.place(b, pos(x+2, -1, z+3));
        blocks.fill(b, pos(x, -1, z+4), pos(x+2, -1, z+4), FillOperation.Replace);
    } else if (digit == 6) {
        blocks.fill(b, pos(x, -1, z), pos(x+2, -1, z), FillOperation.Replace);
        blocks.place(b, pos(x, -1, z+1));
        blocks.fill(b, pos(x, -1, z+2), pos(x+2, -1, z+2), FillOperation.Replace);
        blocks.place(b, pos(x, -1, z+3)); blocks.place(b, pos(x+2, -1, z+3));
        blocks.fill(b, pos(x, -1, z+4), pos(x+2, -1, z+4), FillOperation.Replace);
    } else if (digit == 7) {
        blocks.fill(b, pos(x, -1, z), pos(x+2, -1, z), FillOperation.Replace);
        for(let i=1; i<5; i++) blocks.place(b, pos(x+2, -1, z+i));
    } else if (digit == 8) {
        blocks.fill(b, pos(x, -1, z), pos(x+2, -1, z), FillOperation.Replace);
        blocks.place(b, pos(x, -1, z+1)); blocks.place(b, pos(x+2, -1, z+1));
        blocks.fill(b, pos(x, -1, z+2), pos(x+2, -1, z+2), FillOperation.Replace);
        blocks.place(b, pos(x, -1, z+3)); blocks.place(b, pos(x+2, -1, z+3));
        blocks.fill(b, pos(x, -1, z+4), pos(x+2, -1, z+4), FillOperation.Replace);
    } else if (digit == 9) {
        blocks.fill(b, pos(x, -1, z), pos(x+2, -1, z), FillOperation.Replace);
        blocks.place(b, pos(x, -1, z+1)); blocks.place(b, pos(x+2, -1, z+1));
        blocks.fill(b, pos(x, -1, z+2), pos(x+2, -1, z+2), FillOperation.Replace);
        blocks.place(b, pos(x+2, -1, z+3));
        blocks.fill(b, pos(x, -1, z+4), pos(x+2, -1, z+4), FillOperation.Replace);
    } else if (digit == 0) {
        blocks.fill(b, pos(x, -1, z), pos(x+2, -1, z+4), FillOperation.Outline);
    }
}


이제 수업 시간마다 학생들이 울상을 지으며 "선생님, 친구가 제 블록 부쉈어요!"라고 외치는 일은 없을 것입니다. 안정적이고 쾌적한 환경에서 아이들의 멋진 픽셀아트 작품들이 탄생하기를 기대합니다!