From 89eb5af931b85e18e57cb0cd59367d3d5cf6f558 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=8B=E1=85=A2=E1=84=91=E1=85=B3=E1=86=AF=20=E1=84=82?= =?UTF-8?q?=E1=85=A9=E1=84=90=E1=85=B3=E1=84=87=E1=85=AE=E1=86=A8?= Date: Sat, 25 Aug 2018 18:35:00 +0900 Subject: [PATCH] Add: english_upper_lower --- src/game/lib/announce_box.js | 2 +- .../alphabet_list/english_upper_lower.js | 54 ++++++ src/game/typing/practice/game.js | 14 +- src/game/typing/test/game.js | 6 +- src/game/typing/word_list/korean_sentence.js | 154 +++++++++--------- src/web/client/typing_practice.html | 1 + src/web/sql/insert_active_app.sql | 29 +--- src/web/sql/insert_app.sql | 42 ++--- 8 files changed, 172 insertions(+), 130 deletions(-) create mode 100644 src/game/typing/alphabet_list/english_upper_lower.js diff --git a/src/game/lib/announce_box.js b/src/game/lib/announce_box.js index 391487e..5b40245 100644 --- a/src/game/lib/announce_box.js +++ b/src/game/lib/announce_box.js @@ -47,7 +47,7 @@ class AnnounceBox { text ); announceText.addColor("#ff0000", 0); - announceText.stroke = "#fff"; + announceText.stroke = "#330000"; } diff --git a/src/game/typing/alphabet_list/english_upper_lower.js b/src/game/typing/alphabet_list/english_upper_lower.js new file mode 100644 index 0000000..4b0169e --- /dev/null +++ b/src/game/typing/alphabet_list/english_upper_lower.js @@ -0,0 +1,54 @@ +var englishUpperLowerWordList = [ + "a", + "b", + "c", + "d", + "e", + "f", + "g", + "h", + "i", + "j", + "k", + "l", + "m", + "n", + "o", + "p", + "q", + "r", + "s", + "t", + "u", + "v", + "w", + "x", + "y", + "z", + "A", + "B", + "C", + "D", + "E", + "F", + "G", + "H", + "I", + "J", + "K", + "L", + "M", + "N", + "O", + "P", + "Q", + "R", + "S", + "T", + "U", + "V", + "W", + "X", + "Y", + "Z" +]; \ No newline at end of file diff --git a/src/game/typing/practice/game.js b/src/game/typing/practice/game.js index 312732b..8c99c5d 100644 --- a/src/game/typing/practice/game.js +++ b/src/game/typing/practice/game.js @@ -22,8 +22,7 @@ class TypingPractice { this.typingScore = new TypingScore(); - let STAGE_TIMER_SEC = 5; - this.stageTimer = new StageTimer( STAGE_TIMER_SEC, () => { + this.stageTimer = new StageTimer( TypingPractice.STAGE_TIMER_SEC, () => { self.isOnStage = false; // self.goResult(); @@ -39,7 +38,7 @@ class TypingPractice { let TYPING_CONTENT_Y = 200; - textStyleBasic.font = "bold 84px Arial"; + textStyleBasic.font = "bold 84px Times New Roman"; this.textTypingContent = game.add.text(game.world.centerX, TYPING_CONTENT_Y, "", textStyleBasic) .setShadow(3, 3, 'rgba(0, 0, 0, 1)', 2) .addColor(TypingPractice.COLOR_CONTENT_INPUT, 0); @@ -207,6 +206,7 @@ class TypingPractice { case "english_basic": testContent = englishBasicWordList; + /* testContent = [ "a", "C", @@ -223,6 +223,7 @@ class TypingPractice { "k", "N", ]; + */ break; case "english_left_upper": testContent = englishLeftUpperWordList; @@ -239,6 +240,9 @@ class TypingPractice { case "english_right_lower": testContent = englishRightLowerWordList; break; + case "english_upper_lower": + testContent = englishUpperLowerWordList; + break; case "english_word": testContent = englishWordList; break; @@ -286,6 +290,7 @@ class TypingPractice { showHighlightKey() { let typingText = this.typingRandomContents[this.typingIndex]; + console.log(typingText); if(typingText === undefined) return; @@ -294,6 +299,7 @@ class TypingPractice { moveHands() { let typingText = this.typingRandomContents[this.typingIndex]; + console.log(typingText); if(typingText === undefined) return; @@ -377,7 +383,7 @@ TypingPractice.TYPING_COUNT_PLUS_ENTER = 1; TypingPractice.OFFSET_RIGHT_ALIGN = 10; -TypingPractice.WORD_COUNT_FOR_STAGE = 10; +TypingPractice.STAGE_TIMER_SEC = 60; TypingPractice.COLOR_CONTENT_INPUT = "#dddddd"; TypingPractice.COLOR_BRACKET = "#dddd70"; diff --git a/src/game/typing/test/game.js b/src/game/typing/test/game.js index c6d89c8..5f3105e 100644 --- a/src/game/typing/test/game.js +++ b/src/game/typing/test/game.js @@ -51,7 +51,7 @@ class TypingTest { this.textTypingRecordsDone = []; for(let i = 0; i < TypingTest.TYPING_CONTENT_DONE_COUNT; i++) { this.textTypingContentsDone[i] = game.add.text( - game.world.centerX, TYPING_CONTENT_Y - TYPING_OFFSET_Y - i * 50, + game.world.centerX, TYPING_CONTENT_Y + TYPING_OFFSET_Y + i * 50, "", textStyleBasic ) // .setShadow(3, 3, 'rgba(0, 0, 0, 0.5)', 2) @@ -63,7 +63,7 @@ class TypingTest { SCORE_POSITION_X = 700; this.textTypingRecordsDone[i] = game.add.text( - SCORE_POSITION_X, TYPING_CONTENT_Y - TYPING_OFFSET_Y - i * 50, + SCORE_POSITION_X, TYPING_CONTENT_Y + TYPING_OFFSET_Y + i * 50, "", textStyleBasic ) // .setShadow(3, 3, 'rgba(0, 0, 0, 0.5)', 2) @@ -75,7 +75,7 @@ class TypingTest { this.textTypingContentPreview = []; for(let i = 0; i < TypingTest.TYPING_CONTENT_PREVIEW_COUNT; i++) { this.textTypingContentPreview[i] = game.add.text( - game.world.centerX, TYPING_CONTENT_Y + TYPING_OFFSET_Y + i * 50, + game.world.centerX, TYPING_CONTENT_Y - TYPING_OFFSET_Y - i * 50, "", textStyleBasic ) // .setShadow(3, 3, 'rgba(0, 0, 0, 0.5)', 2) diff --git a/src/game/typing/word_list/korean_sentence.js b/src/game/typing/word_list/korean_sentence.js index 36e2bf1..98689b6 100644 --- a/src/game/typing/word_list/korean_sentence.js +++ b/src/game/typing/word_list/korean_sentence.js @@ -1,90 +1,90 @@ var koreanSentenceList = [ - "가는 말이 고와야 오는 말도 곱다", - "가랑비에 옷 젖는줄 모른다", - "가만히 있으면 중간이나 간다", - "가지 많은 나무에 바람 잘 날 없다", - "간에 붙었다 쓸개에 붙는다", + "가는 말이 고와야 오는 말도 곱다.", + "가랑비에 옷 젖는줄 모른다.", + "가만히 있으면 중간이나 간다.", + "가지 많은 나무에 바람 잘 날 없다.", + "간에 붙었다 쓸개에 붙는다.", "같은 값이면 다홍치마", - "개구리 올챙이 시절 모른다", - "개 같이 벌어서 정승같이 산다", - "개똥도 약에 쓰려면 없다", - "개똥밭에 굴러도 이승이 좋다", + "개구리 올챙이 시절 모른다.", + "개 같이 벌어서 정승같이 산다.", + "개똥도 약에 쓰려면 없다.", + "개똥밭에 굴러도 이승이 좋다.", "계란으로 바위치기", "고양이 목에 방울 달기", "공든 탑이 무너지랴", "구더기 무서워서 장 못 담그랴", - "구르는 돌에는 이끼가 끼지 않는다", + "구르는 돌에는 이끼가 끼지 않는다.", "구슬이 서 말이라도 꿰어야 보배", - "굴러 온 돌이 박힌 돌 뺀다", - "길이 아니면 가지 말고 말이 아니면 듣지 말라", - "까마귀 날자 배 떨어진다", - "낮 말은 새가 듣고 밤 말은 쥐가 듣는다", - "늦게 배운 도둑질이 날 새는 줄 모른다", + "굴러 온 돌이 박힌 돌 뺀다.", + "길이 아니면 가지 말고 말이 아니면 듣지 말라.", + "까마귀 날자 배 떨어진다.", + "낮 말은 새가 듣고 밤 말은 쥐가 듣는다.", + "늦게 배운 도둑질이 날 새는 줄 모른다.", "다람쥐 쳇바퀴 돌리듯", - "달면 삼키고 쓰면 뱉는다", - "닭 잡아먹고 오리발 내민다", - "닭 쫓던 개 지붕 쳐다본다", - "도둑을 맞으려면 개도 안 짖는다", - "도둑이 제 발 저린다", - "돌다리도 두들겨 보고 건너라", - "떡 줄 사람은 생각도 않는데 김칫국부터 마신다", - "똥 묻은 개가 겨 묻은 개 나무란다", - "똥이 무서워서 피하나 더러워서 피하지", - "뛰는 놈 위에 나는 놈 있다", - "말 한마디에 천냥 빚을 갚는다", - "못된 송아지 엉덩이에 뿔난다", - "못 먹는 감 찔러나 본다", - "미꾸라지 한 마리가 온 웅덩이를 흐린다", - "믿는 도끼에 발등 찍히다", - "밑 빠진 독에 물 붓기", - "바늘 도둑이 소 도둑 된다", - "방귀 뀐 놈이 성낸다", - "백지장도 맞들면 낫다", - "뱁새가 황새 따라가면 다리가 찢어진다", + "달면 삼키고 쓰면 뱉는다.", + "닭 잡아먹고 오리발 내민다.", + "닭 쫓던 개 지붕 쳐다본다.", + "도둑을 맞으려면 개도 안 짖는다.", + "도둑이 제 발 저린다.", + "돌다리도 두들겨 보고 건너라.", + "떡 줄 사람은 생각도 않는데 김칫국부터 마신다.", + "똥 묻은 개가 겨 묻은 개 나무란다.", + "똥이 무서워서 피하나 더러워서 피하지.", + "뛰는 놈 위에 나는 놈 있다.", + "말 한마디에 천냥 빚을 갚는다.", + "못된 송아지 엉덩이에 뿔난다.", + "못 먹는 감 찔러나 본다.", + "미꾸라지 한 마리가 온 웅덩이를 흐린다.", + "믿는 도끼에 발등 찍히다.", + "밑 빠진 독에 물 붓기.", + "바늘 도둑이 소 도둑 된다.", + "방귀 뀐 놈이 성낸다.", + "백지장도 맞들면 낫다.", + "뱁새가 황새 따라가면 다리가 찢어진다.", "번데기 앞에서 주름잡기", - "부뚜막의 소금도 집어 넣어야 짜다", - "비온 뒤 땅이 굳는다", - "빈 수레가 더 요란하다", - "빈대 잡다 초가삼간 태운다", - "사공이 많으면 배가 산으로 간다", - "서당개 삼년이면 풍월을 읊는다", - "세 살 버릇 여든까지 간다", - "소 잃고 외양간 고친다", + "부뚜막의 소금도 집어 넣어야 짜다.", + "비온 뒤 땅이 굳는다.", + "빈 수레가 더 요란하다.", + "빈대 잡다 초가삼간 태운다.", + "사공이 많으면 배가 산으로 간다.", + "서당개 삼년이면 풍월을 읊는다.", + "세 살 버릇 여든까지 간다.", + "소 잃고 외양간 고친다.", "소 뒷걸음질 치다 쥐 잡기", - "소문 난 잔치 먹을 것 없다", - "손바닥도 마주쳐야 소리가 난다", - "신선놀음에 도끼자루 썩는 줄 모른다", - "십년이면 강산도 변한다", + "소문 난 잔치 먹을 것 없다.", + "손바닥도 마주쳐야 소리가 난다.", + "신선놀음에 도끼자루 썩는 줄 모른다.", + "십년이면 강산도 변한다.", "아랫돌 빼서 윗돌 괴기", - "얌전한 고양이 부뚜막에 먼저 오른다", - "안 되는 놈은 뒤로 자빠져도 코가 깨진다", - "어물전 망신은 꼴뚜기가 시킨다", - "열길 물 속은 알아도 한길 사람 속은 모른다", - "열 번 찍어 안 넘어가는 나무 없다", - "오르지 못할 나무는 쳐다보지도 말라", - "오얏나무 아래에서 갓을 고쳐 쓰지 마라", - "원수는 외나무 다리에서 만난다", - "원숭이도 나무에서 떨어진다", - "윗 물이 맑아야 아랫물도 맑다", - "자라 보고 놀란 가슴 솥뚜껑 보고 놀란다", - "자랄 나무는 떡잎부터 알아본다", + "얌전한 고양이 부뚜막에 먼저 오른다.", + "안 되는 놈은 뒤로 자빠져도 코가 깨진다.", + "어물전 망신은 꼴뚜기가 시킨다.", + "열길 물 속은 알아도 한길 사람 속은 모른다.", + "열 번 찍어 안 넘어가는 나무 없다.", + "오르지 못할 나무는 쳐다보지도 마라.", + "오얏나무 아래에서 갓을 고쳐 쓰지 마라.", + "원수는 외나무 다리에서 만난다.", + "원숭이도 나무에서 떨어진다.", + "윗물이 맑아야 아랫물도 맑다.", + "자라 보고 놀란 가슴 솥뚜껑 보고 놀란다.", + "자랄 나무는 떡잎부터 알아본다.", "잘 되면 제 탓이요 못 되면 조상 탓이라", - "쥐구멍에도 볕 들 날 있다", - "지렁이도 밟으면 꿈틀한다", - "천리길도 한 걸음부터", - "칼로써 흥한자 칼로써 망한다", - "콩으로 메주를 쑨다 하여도 곧이듣지 않는다", - "콩 심은 데 콩 나고 팥 심은 데 팥 난다", - "털어서 먼지 안 나는 사람 없다", - "팔은 안으로 굽는다", - "피는 물보다 진하다", - "하늘이 무너저도 솟아날 구멍은 있다", - "하룻강아지 범 무서운줄 모른다", - "호랑이도 제 말 하면 온다", - "호랑이에게 물려가도 정신만 차리면 살 수 있다", - "호랑이를 잡으려면 호랑이굴로 가야 한다", - "호미로 막을걸 가래로 막는다", - "호박에 줄 긋는다고 수박되나", - "혹 때러 갔다 혹 붙이고 온다", - "흥정은 붙이고 싸움은 말리랬다" + "쥐구멍에도 볕 들 날 있다.", + "지렁이도 밟으면 꿈틀한다.", + "천리길도 한 걸음부터.", + "칼로써 흥한자 칼로써 망한다.", + "콩으로 메주를 쑨다 하여도 곧이듣지 않는다.", + "콩 심은 데 콩 나고 팥 심은 데 팥 난다.", + "털어서 먼지 안 나는 사람 없다.", + "팔은 안으로 굽는다.", + "피는 물보다 진하다.", + "하늘이 무너저도 솟아날 구멍은 있다.", + "하룻강아지 범 무서운줄 모른다.", + "호랑이도 제 말 하면 온다.", + "호랑이에게 물려가도 정신만 차리면 살 수 있다.", + "호랑이를 잡으려면 호랑이굴로 가야 한다.", + "호미로 막을걸 가래로 막는다.", + "호박에 줄 긋는다고 수박되나.", + "혹 때러 갔다 혹 붙이고 온다.", + "흥정은 붙이고 싸움은 말리랬다." ]; \ No newline at end of file diff --git a/src/web/client/typing_practice.html b/src/web/client/typing_practice.html index 6b17996..c6054e4 100644 --- a/src/web/client/typing_practice.html +++ b/src/web/client/typing_practice.html @@ -45,6 +45,7 @@ + diff --git a/src/web/sql/insert_active_app.sql b/src/web/sql/insert_active_app.sql index ff4202f..136caa2 100644 --- a/src/web/sql/insert_active_app.sql +++ b/src/web/sql/insert_active_app.sql @@ -17,27 +17,8 @@ INSERT INTO `active_app` (`ActiveAppID`, `MaestroID`, `AppID`) VALUES (14, 1, 14), (15, 1, 15), (16, 1, 16), -(17, 1, 29), -(18, 1, 30), -(19, 1, 39), -(20, 1, 40), -(21, 2, 101), -(22, 2, 102), -(23, 2, 1), -(24, 2, 2), -(25, 2, 3), -(26, 2, 4), -(27, 2, 5), -(28, 2, 6), -(29, 2, 7), -(30, 2, 8), -(31, 2, 11), -(32, 2, 12), -(33, 2, 13), -(34, 2, 14), -(35, 2, 15), -(36, 2, 16), -(37, 2, 29), -(38, 2, 30), -(39, 2, 39), -(40, 2, 40); +(17, 1, 16), +(18, 1, 29), +(19, 1, 30), +(20, 1, 39), +(21, 1, 40); \ No newline at end of file diff --git a/src/web/sql/insert_app.sql b/src/web/sql/insert_app.sql index 5be0004..f20ba1a 100644 --- a/src/web/sql/insert_app.sql +++ b/src/web/sql/insert_app.sql @@ -1,7 +1,7 @@ USE moty; INSERT INTO `app` (`AppID`, `AppName`, `KoreanName`, `AppType`, `Status`, `HowToPlay`) VALUES -(1, 'practice_korean_basic', '기본 자리', 1, 1, '왼손 검지를 F 자판위에,\\n오른손 검지를 J 자판위에 올린채\\n손을 움직이지 말고 글자를 입력하세요.'), +(1, 'practice_korean_basic', '기본 자리', 1, 1, '왼손 검지를 [F] 자판위에,\\n오른손 검지를 [J] 자판위에 올린채\\n손을 움직이지 말고 글자를 입력하세요.'), (2, 'practice_korean_left_upper', '왼손 윗글쇠', 1, 1, '왼손 윗글쇠 연습.\\n항상 양 손은 기본 자리 위치에 두고 시작합니다.'), (3, 'practice_korean_second_finger', '검지 글쇠', 1, 1, '기본 자리에 손을 두고, 양 손 검지 손가락으로\\n키보드 안쪽의 글쇠를 눌러주세요.'), (4, 'practice_korean_right_upper', '오른손 윗글쇠', 1, 1, '오른손 윗글쇠 연습.\\n항상 양 손은 기본 자리 위치에 두고 시작합니다.'), @@ -11,33 +11,33 @@ INSERT INTO `app` (`AppID`, `AppName`, `KoreanName`, `AppType`, `Status`, `HowTo (8, 'practice_korean_right_upper_double', '오른손 쌍모음', 1, 1, '오른손 쌍모음. 왼손 새끼손가락으로\\n쉬프트키를 누르고 오른손 윗글쇠를 누르세요.'), (9, 'practice_korean_word', '', 1, 1, '한글 단어 입력으로 타자를 연습합니다.'), (10, 'practice_korean_sentence', '', 1, 1, '한글 문장 입력으로 타자를 연습합니다.'), -(11, 'practice_english_basic', 'Basic', 2, 1, '왼손 검지를 F 자판위에,\\n오른손 검지를 J 자판위에 올린채\\n손을 움직이지 말고 글자를 입력하세요.'), +(11, 'practice_english_basic', 'Basic', 2, 1, '왼손 검지를 [F] 자판위에,\\n오른손 검지를 [J] 자판위에 올린채\\n손을 움직이지 말고 글자를 입력하세요.'), (12, 'practice_english_left_upper', 'Left upper', 2, 1, '왼손 윗글쇠 연습.\\n항상 양 손은 기본 자리 위치에 두고 시작합니다.'), (13, 'practice_english_second_finger', 'Second finger', 2, 1, '기본 자리에 손을 두고, 양 손 검지 손가락으로\\n키보드 안쪽의 글쇠를 눌러주세요.'), (14, 'practice_english_right_upper', 'Right upper', 2, 1, '오른손 윗글쇠 연습.\\n항상 양 손은 기본 자리 위치에 두고 시작합니다.'), (15, 'practice_english_left_lower', 'Left lower', 2, 1, '왼손 밑글쇠 연습.\\n항상 양 손은 기본 자리 위치에 두고 시작합니다.'), (16, 'practice_english_right_lower', 'Right lower', 2, 1, '오른손 밑글쇠 연습.\\n항상 양 손은 기본 자리 위치에 두고 시작합니다.'), +(17, 'practice_english_capital', 'Upper, Lower Case', 2, 1, '대문자, 소문자 연습.\\n대문자를 입력할 때에는 반대편 손\\n새끼손가락으로 [shift] 키를 누르세요.'), (19, 'practice_english_word', '', 2, 1, '영문 단어 입력으로 타자를 연습합니다.'), (20, 'practice_english_sentence', '', 2, 1, '영문 문장 입력으로 타자를 연습합니다.'), -(21, 'test_korean_basic', '기본 자리', 11, 1, '예문을 빨리 입력한 후,\\n엔터 [Enter 또는 Return] 키를 누르세요.'), -(22, 'test_korean_left_upper', '왼손 윗글쇠', 11, 1, '예문을 빨리 입력한 후,\\n엔터 [Enter 또는 Return] 키를 누르세요.'), -(23, 'test_korean_second_finger', '검지 글쇠', 11, 1, '예문을 빨리 입력한 후,\\n엔터 [Enter 또는 Return] 키를 누르세요.'), -(24, 'test_korean_right_upper', '오른손 윗글쇠', 11, 1, '예문을 빨리 입력한 후,\\n엔터 [Enter 또는 Return] 키를 누르세요.'), -(25, 'test_korean_left_lower', '왼손 밑글쇠', 11, 1, '예문을 빨리 입력한 후,\\n엔터 [Enter 또는 Return] 키를 누르세요.'), -(26, 'test_korean_right_lower', '오른손 밑글쇠', 11, 1, '예문을 빨리 입력한 후,\\n엔터 [Enter 또는 Return] 키를 누르세요.'), -(27, 'test_korean_left_lower_double', '왼손 쌍자음', 11, 1, '예문을 빨리 입력한 후,\\n엔터 [Enter 또는 Return] 키를 누르세요.'), -(28, 'test_korean_right_lower_double', '오른손 쌍모음', 11, 1, '예문을 빨리 입력한 후,\\n엔터 [Enter 또는 Return] 키를 누르세요.'), -(29, 'test_korean_word', '시험 - 단어', 11, 1, '예문을 빨리 입력한 후,\\n엔터 [Enter 또는 Return] 키를 누르세요.'), -(30, 'test_korean_sentence', '시험 - 문장', 11, 1, '예문을 빨리 입력한 후,\\n엔터 [Enter 또는 Return] 키를 누르세요.'), -(31, 'test_english_basic', 'Basic', 12, 1, '예문을 빨리 입력한 후,\\n엔터 [Enter 또는 Return] 키를 누르세요.'), -(32, 'test_english_left_upper', 'Left upper', 12, 1, '예문을 빨리 입력한 후,\\n엔터 [Enter 또는 Return] 키를 누르세요.'), -(33, 'test_english_second_finger', 'Second finger', 12, 1, '예문을 빨리 입력한 후,\\n엔터 [Enter 또는 Return] 키를 누르세요.'), -(34, 'test_english_right_upper', 'Right upper', 12, 1, '예문을 빨리 입력한 후,\\n엔터 [Enter 또는 Return] 키를 누르세요.'), -(35, 'test_english_left_lower', 'Left lower', 12, 1, '예문을 빨리 입력한 후,\\n엔터 [Enter 또는 Return] 키를 누르세요.'), -(36, 'test_english_right_lower', 'Right lower', 12, 1, '예문을 빨리 입력한 후,\\n엔터 [Enter 또는 Return] 키를 누르세요.'), -(39, 'test_english_word', 'Word test', 12, 1, '예문을 빨리 입력한 후,\\n엔터 [Enter 또는 Return] 키를 누르세요.'), -(40, 'test_english_sentence', 'Sentence test', 12, 1, '예문을 빨리 입력한 후,\\n엔터 [Enter 또는 Return] 키를 누르세요.'), +(21, 'test_korean_basic', '기본 자리', 11, 1, ''), +(22, 'test_korean_left_upper', '왼손 윗글쇠', 11, 1, ''), +(23, 'test_korean_second_finger', '검지 글쇠', 11, 1, ''), +(24, 'test_korean_right_upper', '오른손 윗글쇠', 11, 1, ''), +(25, 'test_korean_left_lower', '왼손 밑글쇠', 11, 1, ''), +(26, 'test_korean_right_lower', '오른손 밑글쇠', 11, 1, ''), +(27, 'test_korean_left_lower_double', '왼손 쌍자음', 11, 1, ''), +(28, 'test_korean_right_lower_double', '오른손 쌍모음', 11, 1, ''), +(29, 'test_korean_word', '시험 - 단어', 11, 1, '단어를 빠르게 입력하세요.'), +(30, 'test_korean_sentence', '시험 - 문장', 11, 1, '문장을 빠르게 입력하세요.'), +(31, 'test_english_basic', 'Basic', 12, 1, ''), +(32, 'test_english_left_upper', 'Left upper', 12, 1, ''), +(33, 'test_english_second_finger', 'Second finger', 12, 1, ''), +(34, 'test_english_right_upper', 'Right upper', 12, 1, ''), +(35, 'test_english_left_lower', 'Left lower', 12, 1, ''), +(36, 'test_english_right_lower', 'Right lower', 12, 1, ''), +(39, 'test_english_word', 'Word test', 12, 1, '단어를 빠르게 입력하세요.'), +(40, 'test_english_sentence', 'Sentence test', 12, 1, '문장을 빠르게 입력하세요.'), (50, 'typing_venezia', '베네치아', 50, 0, '물에 잠기지 않도록 잘 준비하세요.'), (101, 'space_invaders', '외계인 침공', 100, 1, '외계인이 나타났다!\\n마우스 왼쪽 버튼으로\\n외계인을 클릭해서 물리쳐 주세요.'), (102, 'card_matching', '카드 짝 맞추기', 100, 0, '같은 그림의 카드를 맞춰주세요.'); -