Hangul Quiz Game

1) File

2) main.js

const STATE_INIT = 3000;
const STATE_READY = 3001;
const STATE_PLAYING = 3002;
const STATE_JUDGE = 3004;
const STATE_END = 3005;

const WORD_LINES = [
    'ν•œκΈ€λ‚  νœ΄κ²Œμ†Œ ν˜„κΈ°μ¦ ν˜•κ΄‘νŽœ ν˜Έλ‚ λ‘ ν—ˆλ‹ˆλ¬Έ ν•˜λ…Έμ΄ 핫도그 홍두깨 ν—€λ“œμ…‹ 해돋이 ν•œλΌλ΄‰ ν•œλΌμ‚° ν˜Έλž‘μ΄ ν—ˆλ¦¬λ  ν˜„λ―Έκ²½ 흰머리 황무지 햄버거 ν•™λΆ€λͺ¨ 휘발유 ν—ˆλ²…μ§€ ν•˜μˆ˜κ΅¬ ν˜Έμ‹ μˆ  ν™μˆ˜μ•„ ν™”μŠΉμ΄ ν—ˆμŠ€ν‚€ ν–„μŠ€ν„° ν•΄μš΄λŒ€ ν™œμ£Όλ‘œ νœ΄μ§€ν†΅ ν™”μž₯ν’ˆ 회초리 ν•«νŒ¬μΈ  ν•˜νšŒνƒˆ',
    'ν”Όκ·œμ–΄ νŒ”κΏˆμΉ˜ 포도주 피라냐 피라미 ν”Όλ’°μΉ¨ 프리ν‚₯ ν”„λΌν•˜ 포미닛 νŒ₯λΉ™μˆ˜ ν‘œλ°±μ œ νŒμ†Œλ¦¬ ν”Όμ‹œλ°© νŒ”μ”¨λ¦„ ν”Όμ•„λ…Έ 편의점 파자마 포μž₯μ§€ ν‘œμ§€νŒ 파좩λ₯˜ νŒŒμΆœλΆ€ νŒŒμΆœμ†Œ 포청천 팬클럽 포켓볼 ν”ΌμΉ΄μ†Œ ν”ΌμΉ΄μΈ„ 폭탄주 ν”Όν„°νŒ¬',
    'νƒœκ·ΉκΈ° νƒœκΆŒλ„ 턱걸이 ν…Œλ‹ˆμŠ€ 트렁크 터미널 ν‡΄λ§ˆμ‚¬ ν† λ§ˆν†  탬버린 νˆ¬μ„κΈ° ν„±μ‹œλ„ νƒ•μˆ˜μœ‘ ν† μŠ€νŠΈ νƒœμ–‘κ³„ 티아라 타이밍 νƒˆμ˜μ‹€ νŠΈμœ„ν„° ν‡΄μ§κΈˆ 톡쑰림 νƒœμ§„μ•„ νƒœν‰μ–‘ ν…Œν—€λž€',
    'μΊ₯거루 콧ꡬ멍 코끼리 μΊλ‚˜λ‹€ μ½©λ‚˜λ¬Ό μ½”λ„ˆν‚₯ μ»¨λ””μ…˜ μ½”λŸ¬μŠ€ 카메라 μΉ΄λ©”μ˜€ ν‚€λ³΄λ“œ 콀바인 μ½”λΏ”μ†Œ 케이크 μ½”μ½”λ„› 카타λ₯΄ μΉ΅ν…ŒμΌ μ»€ν”Œλ§',
    '참기름 μ² κ°€λ°© 초λŠ₯λ ₯ 좕농증 취두뢀 μ²­κ³„μ²œ μ±…κ°ˆν”Ό 책꽂이 초λŠ₯λ ₯ 좕농증 창덕ꢁ 차두리 μ΅œλ£¨νƒ„ 졜면술 μΉ λ©΄μ‘° μ²­λ°”μ§€ μ²­μ†Œλ…„ μΆœμ„λΆ€ μ°ΉμŒ€λ–‘ μ²­μ™€λŒ€ 첫인상 μΉ˜μ™€μ™€ μ΄ˆμΈμ’… 좔어탕 초음파 μΉ¨μ „λ¬Ό 청첩μž₯ 초콜릿 μΉ˜νŠΈν‚€ μΆœνŒμ‚¬ μ±”ν”Όμ–Έ μΉ¨νŒ¬μ§€ μ΅œν™λ§Œ',
    'κ³„κΈ°νŒ κ°œλ‚˜λ¦¬ 기내식 강낭콩 ꡐ도관 κ³ λ“œλ¦„ κ³¨λ™ν’ˆ 기러기 κ°€λ‘œλ“± κ°€λž˜λ–‘ κΈ€λŸ¬λΈŒ 그림자 κΈ°λͺ¨λ…Έ κΈˆλ©”λ‹¬ 거머리 ꡐ무싀 곡무원 건망증 ꡬ미호 κΉ€λ³‘λ§Œ κ΅­λ°©λΆ€ 거뢁선 κ΄‘λ³΅μ ˆ κ³±λΉΌκΈ° 가속도 각선미 κΈ°μˆ™μ‚¬ κ°€μ˜€λ¦¬ 걸음마 κ°•μ˜μ‹€ 거짓말 ꡐ차둜 골킀퍼 κ³Όνƒœλ£Œ κΉ€νƒœμ› κΉ€νƒœν¬ 건포도 곰팑이 κ³¨νŒμ§€ 곡포탄 κΉ€ν₯κ΅­ κ΄‘ν™”λ¬Έ 곡휴일 κ³ ν˜„μ • 꽹과리 κΉŒλ‚˜λ¦¬ 깍두기 κ½ƒλ‹€λ°œ 꽃등심 꼽등이 κΉŒλ§ˆκ·€ 까치발 깐풍기',
    '케첩 ν‚ΉμΉ΄ 킹콩 컨닝 채찍 μ°½λ¬Έ μ°ΈκΉ¨ 천ꡭ 좕ꡬ 좜근 친ꡬ 치과 취ꢌ μ±„κΆŒ 초과 쑱발 절벽 젖병 μ£ΌλΆ€ 전볡 쀑볡 정볡 절반 쑱보 쟁반 주번 μ’€λΉ„ μ œλΉ„ 사과 사기 μ‹œκΈ‰ μ‹œκ³„ μ†κΈˆ μ„ κ±° 수λŠ₯ μ„€λ‚  μŠ€λ‹˜',
    'λͺ¨λž˜ 미래 미둜 만루 λ–‘λ°₯ λ”ΈκΈ° λ–‘κ΅­ λ‘μœ  λ“μŒ λ‰΄μš• 노을 λ‚™μ—½ λ…Ήμš© 노인 눈물 냉면 λ‚˜λΉ„ λ‚˜λ°© κ°€μœ„ 거울 근윑 기타 κΉƒν„Έ ꡬ토 ꡴뚝 κ°œλ… κ·Έλ„€ ꡬ름 κΈ°λ¦° 경마 κ²½λ§€ 고막 κ°€λ°© 곡뢀 κ³ λ°± 간병 κ°ˆλΉ„ κΉ€λ°₯ 거봉 κ΅°λ°€ κΈ°λΆ„ 건빡 κ°€μ‹œ'
];

let WORDS = [];

let _state = STATE_INIT;
let _stateTimer = 0;
let _timer = 0;
let _choanswer = '';
let _answer = '';
let _start = false;
let _widget = null; // using for contents UI
let _players = App.player;
let _result = '';

for(let w in WORD_LINES)
    WORDS =  WORDS.concat(WORD_LINES[w].trim().split(' '));

function cho_hangul(str) {
    cho = ["γ„±","γ„²","γ„΄","γ„·","γ„Έ","γ„Ή","ㅁ","γ…‚","γ…ƒ","γ……","γ…†","γ…‡","γ…ˆ","γ…‰","γ…Š","γ…‹","γ…Œ","ㅍ","γ…Ž"];
    result = "";
    for (let i = 0; i < str.length; ++i ) {
      code = str.charCodeAt(i)-44032;
      if(code>-1 && code<11172) result += cho[Math.floor(code/588)];
      else result += str.charAt(i);
    }
    return result;
}

App.onStart.Add(function(){
    startState(STATE_INIT);
});

// when chatting event
// player : person who chatted
// text : chat text
// return : enter chatting box
// return false or true : not appear in chatting box
App.onSay.add(function(player, text) {
    if(_state == STATE_PLAYING)
    {
        if(_answer == text)
        {
            _result = player.name + 'λ‹˜ μ •λ‹΅!\n정닡은 ' + _answer;

            startState(STATE_JUDGE);
        }
    }
});

function startState(state) {
    _state = state;
    _stateTimer = 0;

    switch(_state)
    {
        case STATE_INIT:
            if(_widget)
            {
                _widget.destroy();
                _widget = null;
            }
            _answer = WORDS[Math.floor(Math.random() * WORDS.length)];
            _timer = 60;
    
            _choanswer = cho_hangul(_answer);
    
            // called html UI
            // param1 : file name
            // param2 : position 
            // [ top, topleft, topright, middle, middleleft, middleright, bottom, bottomleft, bottomright, popup ]
            // param3 : width size
            // param4 : height size
            _widget = App.showWidget('widget.html', 'top', 200, 300);
            
            _widget.sendMessage({
                state: _state,
                timer: _timer,
                answer: _choanswer,
            });

            startState(STATE_READY);
            break;
        case STATE_READY:
            _start = true;
            startState(STATE_PLAYING);
            break;
        case STATE_PLAYING:
            App.showCenterLabel('λͺ©ν‘œ: μ΄ˆμ„±νžŒνŠΈλ‘œ 단어λ₯Ό μ°Ύμ•„λ‚΄μ„Έμš”.',0xFFFFFF, 0x000000, 115);
            _widget.sendMessage({
                state: _state,
                timer: _timer,
                answer: _choanswer,
            });
            break;
        case STATE_JUDGE:
            break;
        case STATE_END:
            if(_widget)
            {
                _widget.destroy();
                _widget = null; // must to do for using again
            }

            _start = false;
            break;
    }
}

App.onLeavePlayer.Add(function(p) {
    p.title = null;
    p.sprite = null;
    p.moveSpeed = 80;
    p.sendUpdated();
});

App.onDestroy.Add(function() {
    _start = false;
    
    if(_widget)
    {
        _widget.destroy();
        _widget = null;
    }
});

App.onUpdate.Add(function(dt) {
    if(!_start)
        return;

    _stateTimer += dt;

    switch(_state)
    {
        case STATE_INIT:
            break;
        case STATE_READY:
            _start = true;
            break;
        case STATE_PLAYING:
            if(_stateTimer >= 1)
            {
                _stateTimer = 0;
                _timer -= 1;
            }

            if(_timer == 0)
            {
                _result = '정닡은 ' + _answer + ' μž…λ‹ˆλ‹€.';
                startState(STATE_JUDGE);
            }
            break;
        case STATE_JUDGE:
            App.showCenterLabel(_result, 0xFFFFFF, 0x000000, 115);

            if(_stateTimer >= 3)
                startState(STATE_END);
            break;
        case STATE_END:
            break;
    }
});

Last updated

Was this helpful?