본문 바로가기

마인크래프트 애드온 제작

문제 내고 푸는 퀴즈 게임 만들기(스크립트 API 활용) #애드온제작

누구든 채팅창에 정답을 입력하면 된다!

 

 

복붙용 코드


import { world, system } from "@minecraft/server";

// 문제 목록
const questions = [
    { question: "마인크래프트 개발사 이름은?", answer: "모장" },
    { question: "마인크래프트 주인공 이름은?", answer: "스티브" },
    { question: "지금 보는 유튜브 채널 이름은?", answer: "스티브코딩" },
    { question: "지금 보는 유튜브 채널 이름은?", answer: "스티브코딩" },

    // 추가 문제들을 필요에 따라 이어서 나열, 정답은 띄어쓰기까지 구분함

];

// 현재 진행 중인 게임 여부를 나타내는 변수
let isGameActive = false;

// 현재 진행 중인 문제의 인덱스
let currentQuestionIndex = 0;

// 현재 문제의 정보를 저장하는 변수
let currentQuestion = {};

// 플레이어가 맞추기 위해 입력한 메시지를 저장할 변수
let playerGuess = "";

// 게임 시작 함수
function startGame() {
    // 게임이 이미 진행 중이라면 종료
    if (isGameActive) {
        return;
    }

    // 게임 시작
    isGameActive = true;
    currentQuestionIndex = 0;
    askQuestion();
}

// 문제를 플레이어에게 제시하는 함수
function askQuestion() {
    // 현재 문제 설정
    currentQuestion = questions[currentQuestionIndex];

    // 플레이어에게 문제 제시
    world.getPlayers().forEach((player) => {
        player.sendMessage(currentQuestion.question);
        world.getDimension("overworld").runCommandAsync(`title @a subtitle ${currentQuestion.question}`)
        world.getDimension("overworld").runCommandAsync(`title @a title ${currentQuestionIndex + 1}번 문제`)
    });
}

// 플레이어가 메시지를 입력할 때마다 호출되는 이벤트 핸들러
world.afterEvents.chatSend.subscribe((event) => {
    const player = event.sender;
    const message = event.message;

    // '시작'이라는 단어가 포함된 경우에 게임 시작
    if (message === '시작') {

        startGame();

        return;


    }

    // 게임이 진행 중이라면 플레이어의 입력을 정답과 비교
    if (isGameActive) {
        playerGuess = message.trim();

        // 정답이 맞는지 확인
        if (playerGuess.toLowerCase() === currentQuestion.answer.toLowerCase()) {
            // 맞았을 경우 축하 메시지 전송
            world.getPlayers().forEach((player) => {
                player.sendMessage(`정답입니다! 다음 문제로 진행합니다.`);
            });

            // 다음 문제로 이동
            currentQuestionIndex++;

            // 모든 문제를 푼 경우에는 게임 종료
            if (currentQuestionIndex >= questions.length) {
                world.getPlayers().forEach((player) => {
                    player.sendMessage(`게임이 종료되었습니다. 수고하셨습니다!`);
                });
                isGameActive = false;
            } else {
                // 다음 문제 제시
                askQuestion();
            }
        }
    }

    // '종료'가 입력되면 게임 종료
    if (message.includes('종료')) {
        isGameActive = false;
        playerGuess = "";
        currentQuestionIndex = 0;
        world.getPlayers().forEach((player) => {
            player.sendMessage("게임이 종료되었습니다. 다시 시작하려면 '시작'을 입력하세요.");
        });
    }
});


🏆스크립트 API에 대해서 잘 모른다면 다음 글을 참고하세요! 🏆

https://stevecoding.tistory.com/2


- 🌟 게임을 시작하는 방법: "채팅창을 열어서 시작이라고" 메시지를 입력합니다.

- 🎮 1번 문제가 나오고 채팅창에 정답을 입력합니다.

- 🎮 모든 문제를 풀면 게임이 종료됩니다.

 

- 📚 문제 수정 및 추가: 코드를 수정하여 새로운 문제를 추가하거나 변경할 수 있습니다.

 

- ⚙️ 변수 설명: 이 코드에서 사용하고 있는 변수를 약속한 부분입니다. 



- 🚀 게임 시작 함수: 변수 isGameActive이 참이면 게임을 종료하고 거짓이면 게임을 시작합니다.

 

- 📝 문제를 제시하는 함수: 저장된 문제 리스트를 순서에 맞게(questions[currentQuestionIndex] )변수 currentQuestion에 저장해서 보여줍니다. 

 

- 📝 게임을 진행하는 코드: 플레이어의 채팅 메시지를 이벤트를 받아 코드가 조건에 맞게 실행  

 

 

직접 영상을 통해 자세히 확인해보세요.