1021 lines
41 KiB
JSON
1021 lines
41 KiB
JSON
{
|
|
"game_types": [
|
|
{
|
|
"name": "Quiz - Trắc nghiệm",
|
|
"description": "Câu hỏi trắc nghiệm với các lựa chọn, chọn 1 đáp án đúng",
|
|
"game_mechanics": {
|
|
"cách_chơi": "Người chơi đọc câu hỏi và chọn 1 trong các đáp án",
|
|
"cách_tính_điểm": "Đúng = 1 điểm, Sai = 0 điểm",
|
|
"xác_định_đáp_án": "So sánh đáp án người chơi chọn với trường 'answer'"
|
|
},
|
|
"base_schema": {
|
|
"question": {
|
|
"type": "string",
|
|
"nullable": false,
|
|
"mô_tả": "Nội dung câu hỏi, dùng ____ cho chỗ trống"
|
|
},
|
|
"request": {
|
|
"type": "string",
|
|
"nullable": false,
|
|
"mô_tả": "Yêu cầu (VD: 'Chọn đáp án đúng', 'Điền vào chỗ trống')"
|
|
},
|
|
"answer": {
|
|
"type": "string",
|
|
"nullable": false,
|
|
"mô_tả": "Đáp án đúng"
|
|
},
|
|
"options": {
|
|
"type": "array<string>",
|
|
"nullable": false,
|
|
"mô_tả": "Danh sách các lựa chọn (2-4 options)"
|
|
},
|
|
"image_url": {
|
|
"type": "string",
|
|
"nullable": true,
|
|
"mô_tả": "URL hình ảnh minh họa"
|
|
},
|
|
"image_description": {
|
|
"type": "string",
|
|
"nullable": true,
|
|
"mô_tả": "Mô tả hình ảnh"
|
|
},
|
|
"is_required_image": {
|
|
"type": "boolean",
|
|
"nullable": false,
|
|
"default": false,
|
|
"mô_tả": "true = bắt buộc xem ảnh để trả lời"
|
|
},
|
|
"is_example": {
|
|
"type": "boolean",
|
|
"nullable": false,
|
|
"default": false,
|
|
"mô_tả": "true = đây là câu mẫu"
|
|
}
|
|
},
|
|
"variants": [
|
|
{
|
|
"name": "Quiz Text Only",
|
|
"mô_tả": "Câu hỏi văn bản thuần túy, không có hình ảnh",
|
|
"required_fields": [
|
|
"question",
|
|
"request",
|
|
"answer",
|
|
"options"
|
|
],
|
|
"example": {
|
|
"question": "Con hươu cao cổ có cổ ____.",
|
|
"request": "Điền vào chỗ trống",
|
|
"answer": "dài",
|
|
"options": [
|
|
"dài",
|
|
"ngắn",
|
|
"to"
|
|
]
|
|
}
|
|
},
|
|
{
|
|
"name": "Quiz với Hình ảnh",
|
|
"mô_tả": "Câu hỏi đi kèm hình ảnh minh họa bắt buộc phải xem",
|
|
"required_fields": [
|
|
"question",
|
|
"request",
|
|
"answer",
|
|
"options",
|
|
"image_url",
|
|
"is_required_image"
|
|
],
|
|
"example": {
|
|
"question": "Đây là con gì?",
|
|
"request": "Nhìn tranh và chọn đáp án đúng",
|
|
"answer": "mèo",
|
|
"options": [
|
|
"chó",
|
|
"mèo",
|
|
"thỏ"
|
|
],
|
|
"image_url": "https://example.com/cat.jpg",
|
|
"is_required_image": true
|
|
}
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"name": "Sequence - Sắp xếp thứ tự",
|
|
"description": "Sắp xếp các từ/câu theo đúng thứ tự",
|
|
"game_mechanics": {
|
|
"cách_chơi": "Người chơi kéo thả hoặc chọn thứ tự các phần tử",
|
|
"cách_tính_điểm": "Đúng toàn bộ = 1 điểm, Sai = 0 điểm",
|
|
"xác_định_đáp_án": "So sánh thứ tự người chơi sắp với 'sentence' hoặc 'word'"
|
|
},
|
|
"base_schema": {
|
|
"word": {
|
|
"type": "string",
|
|
"nullable": true,
|
|
"mô_tả": "Từ/cụm từ đúng (dùng khi sub_type='word')"
|
|
},
|
|
"sentence": {
|
|
"type": "string",
|
|
"nullable": true,
|
|
"mô_tả": "Câu hoàn chỉnh đúng (dùng khi sub_type='sentence')"
|
|
},
|
|
"parts": {
|
|
"type": "array<string>",
|
|
"nullable": false,
|
|
"mô_tả": "Mảng các phần tử theo thứ tự xáo trộn từ đề bài gốc"
|
|
},
|
|
"is_scrambled": {
|
|
"type": "boolean",
|
|
"nullable": false,
|
|
"mô_tả": "true = đề bài đã xáo trộn, cần sắp xếp lại"
|
|
},
|
|
"image_url": {
|
|
"type": "string",
|
|
"nullable": true,
|
|
"mô_tả": "URL hình ảnh gợi ý"
|
|
},
|
|
"image_description": {
|
|
"type": "string",
|
|
"nullable": true,
|
|
"mô_tả": "Mô tả hình ảnh"
|
|
},
|
|
"is_required_image": {
|
|
"type": "boolean",
|
|
"nullable": false,
|
|
"default": false,
|
|
"mô_tả": "true = bắt buộc xem ảnh"
|
|
},
|
|
"is_example": {
|
|
"type": "boolean",
|
|
"nullable": false,
|
|
"default": false,
|
|
"mô_tả": "true = đây là câu mẫu"
|
|
}
|
|
},
|
|
"variants": [
|
|
{
|
|
"name": "Sắp xếp câu (Sentence Scramble)",
|
|
"mô_tả": "Sắp xếp các từ rời rạc thành câu hoàn chỉnh",
|
|
"required_fields": [
|
|
"sentence",
|
|
"parts",
|
|
"is_scrambled"
|
|
],
|
|
"note": "parts lấy theo thứ tự xáo trộn trong đề gốc",
|
|
"example": {
|
|
"sentence": "Apple is red.",
|
|
"parts": [
|
|
"red",
|
|
"is",
|
|
"Apple"
|
|
],
|
|
"is_scrambled": true
|
|
}
|
|
},
|
|
{
|
|
"name": "Sắp xếp chữ cái (Word Scramble)",
|
|
"mô_tả": "Sắp xếp các chữ cái rời rạc thành từ hoàn chỉnh",
|
|
"required_fields": [
|
|
"word",
|
|
"parts",
|
|
"is_scrambled"
|
|
],
|
|
"example": {
|
|
"word": "banana",
|
|
"parts": [
|
|
"b",
|
|
"a",
|
|
"n",
|
|
"a",
|
|
"n",
|
|
"a"
|
|
],
|
|
"is_scrambled": true
|
|
}
|
|
},
|
|
{
|
|
"name": "Sắp xếp câu với Hình ảnh",
|
|
"mô_tả": "Sắp xếp câu dựa theo gợi ý hình ảnh",
|
|
"required_fields": [
|
|
"sentence",
|
|
"parts",
|
|
"is_scrambled",
|
|
"image_url",
|
|
"is_required_image"
|
|
],
|
|
"example": {
|
|
"sentence": "The cat is sleeping.",
|
|
"parts": [
|
|
"sleeping",
|
|
"is",
|
|
"cat",
|
|
"The"
|
|
],
|
|
"is_scrambled": true,
|
|
"image_url": "https://example.com/sleeping_cat.jpg",
|
|
"is_required_image": true
|
|
}
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"name": "True/False - Đúng/Sai",
|
|
"description": "Xác định câu phát biểu là đúng hay sai",
|
|
"game_mechanics": {
|
|
"cách_chơi": "Người chơi đọc câu phát biểu và chọn Đúng hoặc Sai",
|
|
"cách_tính_điểm": "Đúng = 1 điểm, Sai = 0 điểm",
|
|
"xác_định_đáp_án": "So sánh lựa chọn người chơi với trường 'is_true'"
|
|
},
|
|
"base_schema": {
|
|
"statement": {
|
|
"type": "string",
|
|
"nullable": false,
|
|
"mô_tả": "Câu phát biểu cần xác định đúng/sai"
|
|
},
|
|
"is_true": {
|
|
"type": "boolean",
|
|
"nullable": false,
|
|
"mô_tả": "true nếu câu đúng, false nếu sai"
|
|
},
|
|
"true_label": {
|
|
"type": "string",
|
|
"nullable": false,
|
|
"default": "True",
|
|
"mô_tả": "Nhãn nút Đúng (VD: 'Đúng', 'Yes')"
|
|
},
|
|
"false_label": {
|
|
"type": "string",
|
|
"nullable": false,
|
|
"default": "False",
|
|
"mô_tả": "Nhãn nút Sai (VD: 'Sai', 'No')"
|
|
},
|
|
"image_url": {
|
|
"type": "string",
|
|
"nullable": true,
|
|
"mô_tả": "URL hình ảnh"
|
|
},
|
|
"image_description": {
|
|
"type": "string",
|
|
"nullable": true,
|
|
"mô_tả": "Mô tả hình ảnh"
|
|
},
|
|
"is_required_image": {
|
|
"type": "boolean",
|
|
"nullable": false,
|
|
"default": false,
|
|
"mô_tả": "true = bắt buộc xem ảnh"
|
|
},
|
|
"is_example": {
|
|
"type": "boolean",
|
|
"nullable": false,
|
|
"default": false,
|
|
"mô_tả": "true = đây là câu mẫu"
|
|
}
|
|
},
|
|
"variants": [
|
|
{
|
|
"name": "Đúng/Sai Text",
|
|
"mô_tả": "Câu phát biểu văn bản thuần túy",
|
|
"required_fields": [
|
|
"statement",
|
|
"is_true",
|
|
"true_label",
|
|
"false_label"
|
|
],
|
|
"example": {
|
|
"statement": "Bầu trời màu xanh.",
|
|
"is_true": true,
|
|
"true_label": "Đúng",
|
|
"false_label": "Sai"
|
|
}
|
|
},
|
|
{
|
|
"name": "Đúng/Sai với Hình ảnh",
|
|
"mô_tả": "Xác định đúng/sai dựa trên hình ảnh",
|
|
"required_fields": [
|
|
"statement",
|
|
"is_true",
|
|
"true_label",
|
|
"false_label",
|
|
"image_url",
|
|
"is_required_image"
|
|
],
|
|
"example": {
|
|
"statement": "Đây là quả táo.",
|
|
"is_true": true,
|
|
"true_label": "Đúng",
|
|
"false_label": "Sai",
|
|
"image_url": "https://example.com/apple.jpg",
|
|
"is_required_image": true
|
|
}
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"name": "Matching - Nối đôi",
|
|
"description": "Nối các cặp tương ứng với nhau",
|
|
"game_mechanics": {
|
|
"cách_chơi": "Người chơi kéo nối hoặc chọn cặp tương ứng giữa 2 cột",
|
|
"cách_tính_điểm": "Mỗi cặp đúng = 1 điểm",
|
|
"xác_định_đáp_án": "So sánh cặp left-right người chơi nối với mảng 'pairs'"
|
|
},
|
|
"base_schema": {
|
|
"pairs": {
|
|
"type": "array<MatchPair>",
|
|
"nullable": false,
|
|
"mô_tả": "Danh sách các cặp nối (min 2, max 10)",
|
|
"item_schema": {
|
|
"left": {
|
|
"text": {
|
|
"type": "string",
|
|
"nullable": true,
|
|
"mô_tả": "Nội dung text cột trái"
|
|
},
|
|
"image_url": {
|
|
"type": "string",
|
|
"nullable": true,
|
|
"mô_tả": "URL hình ảnh cột trái"
|
|
},
|
|
"image_description": {
|
|
"type": "string",
|
|
"nullable": true,
|
|
"mô_tả": "Mô tả hình ảnh"
|
|
}
|
|
},
|
|
"right": {
|
|
"text": {
|
|
"type": "string",
|
|
"nullable": true,
|
|
"mô_tả": "Nội dung text cột phải"
|
|
},
|
|
"image_url": {
|
|
"type": "string",
|
|
"nullable": true,
|
|
"mô_tả": "URL hình ảnh cột phải"
|
|
},
|
|
"image_description": {
|
|
"type": "string",
|
|
"nullable": true,
|
|
"mô_tả": "Mô tả hình ảnh"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"mode": {
|
|
"type": "enum",
|
|
"nullable": false,
|
|
"values": [
|
|
"text_to_text",
|
|
"text_to_image",
|
|
"image_to_image",
|
|
"mixed"
|
|
],
|
|
"mô_tả": "Loại nối đôi"
|
|
},
|
|
"left_label": {
|
|
"type": "string",
|
|
"nullable": false,
|
|
"default": "Column A",
|
|
"mô_tả": "Tên cột trái"
|
|
},
|
|
"right_label": {
|
|
"type": "string",
|
|
"nullable": false,
|
|
"default": "Column B",
|
|
"mô_tả": "Tên cột phải"
|
|
},
|
|
"is_example": {
|
|
"type": "boolean",
|
|
"nullable": false,
|
|
"default": false,
|
|
"mô_tả": "true = đây là câu mẫu"
|
|
}
|
|
},
|
|
"variants": [
|
|
{
|
|
"name": "Nối Text - Text",
|
|
"mô_tả": "Nối 2 cột văn bản (câu hỏi-đáp án, từ-nghĩa)",
|
|
"required_fields": [
|
|
"pairs",
|
|
"mode",
|
|
"left_label",
|
|
"right_label"
|
|
],
|
|
"note": "Cả left và right đều dùng field 'text'",
|
|
"example": {
|
|
"pairs": [
|
|
{
|
|
"left": {
|
|
"text": "Thủ đô của Pháp?"
|
|
},
|
|
"right": {
|
|
"text": "Paris"
|
|
}
|
|
},
|
|
{
|
|
"left": {
|
|
"text": "Màu của bầu trời?"
|
|
},
|
|
"right": {
|
|
"text": "Xanh"
|
|
}
|
|
}
|
|
],
|
|
"mode": "text_to_text",
|
|
"left_label": "Câu hỏi",
|
|
"right_label": "Đáp án"
|
|
}
|
|
},
|
|
{
|
|
"name": "Nối Text - Hình ảnh",
|
|
"mô_tả": "Nối từ với hình ảnh tương ứng",
|
|
"required_fields": [
|
|
"pairs",
|
|
"mode",
|
|
"left_label",
|
|
"right_label"
|
|
],
|
|
"note": "left dùng 'text', right dùng 'image_url' + 'image_description'",
|
|
"example": {
|
|
"pairs": [
|
|
{
|
|
"left": {
|
|
"text": "Apple"
|
|
},
|
|
"right": {
|
|
"image_url": "https://example.com/apple.jpg",
|
|
"image_description": "Quả táo đỏ"
|
|
}
|
|
}
|
|
],
|
|
"mode": "text_to_image",
|
|
"left_label": "Từ vựng",
|
|
"right_label": "Hình ảnh"
|
|
}
|
|
},
|
|
{
|
|
"name": "Nối Hình ảnh - Hình ảnh",
|
|
"mô_tả": "Nối 2 hình ảnh có liên quan với nhau",
|
|
"required_fields": [
|
|
"pairs",
|
|
"mode",
|
|
"left_label",
|
|
"right_label"
|
|
],
|
|
"note": "Cả left và right đều dùng 'image_url' + 'image_description'",
|
|
"example": {
|
|
"pairs": [
|
|
{
|
|
"left": {
|
|
"image_url": "https://example.com/cat.jpg",
|
|
"image_description": "Con mèo"
|
|
},
|
|
"right": {
|
|
"image_url": "https://example.com/fish.jpg",
|
|
"image_description": "Con cá"
|
|
}
|
|
}
|
|
],
|
|
"mode": "image_to_image",
|
|
"left_label": "Động vật",
|
|
"right_label": "Thức ăn yêu thích"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"name": "Odd One Out - Chọn từ khác loại",
|
|
"description": "Chọn từ khác biệt nhất trong nhóm",
|
|
"game_mechanics": {
|
|
"cách_chơi": "Người chơi nhìn nhóm từ và chọn từ không cùng loại",
|
|
"cách_tính_điểm": "Đúng = 1 điểm, Sai = 0 điểm",
|
|
"xác_định_đáp_án": "So sánh lựa chọn với trường 'answer'"
|
|
},
|
|
"base_schema": {
|
|
"options": {
|
|
"type": "array<string>",
|
|
"nullable": false,
|
|
"min": 3,
|
|
"max": 6,
|
|
"mô_tả": "Danh sách 3-6 từ để chọn"
|
|
},
|
|
"answer": {
|
|
"type": "string",
|
|
"nullable": false,
|
|
"mô_tả": "Từ khác loại (đáp án) - phải nằm trong options"
|
|
},
|
|
"reason": {
|
|
"type": "string",
|
|
"nullable": false,
|
|
"mô_tả": "Lý do tại sao đáp án khác biệt"
|
|
},
|
|
"category": {
|
|
"type": "string",
|
|
"nullable": false,
|
|
"mô_tả": "Danh mục của các từ CÒN LẠI (không phải đáp án)"
|
|
},
|
|
"image_url": {
|
|
"type": "string",
|
|
"nullable": true,
|
|
"mô_tả": "URL hình ảnh đáp án"
|
|
},
|
|
"image_description": {
|
|
"type": "string",
|
|
"nullable": true,
|
|
"mô_tả": "Mô tả hình ảnh"
|
|
},
|
|
"is_required_image": {
|
|
"type": "boolean",
|
|
"nullable": false,
|
|
"default": false,
|
|
"mô_tả": "true = bắt buộc xem ảnh"
|
|
},
|
|
"is_example": {
|
|
"type": "boolean",
|
|
"nullable": false,
|
|
"default": false,
|
|
"mô_tả": "true = đây là câu mẫu"
|
|
}
|
|
},
|
|
"variants": [
|
|
{
|
|
"name": "Chọn từ khác loại - Text",
|
|
"mô_tả": "Nhóm từ văn bản, chọn từ khác biệt",
|
|
"required_fields": [
|
|
"options",
|
|
"answer",
|
|
"reason",
|
|
"category"
|
|
],
|
|
"example": {
|
|
"options": [
|
|
"chó",
|
|
"mèo",
|
|
"táo",
|
|
"chim"
|
|
],
|
|
"answer": "táo",
|
|
"reason": "Các từ khác là động vật, táo là hoa quả",
|
|
"category": "động vật"
|
|
}
|
|
},
|
|
{
|
|
"name": "Chọn từ khác loại - Với Hình ảnh",
|
|
"mô_tả": "Nhóm từ kèm hình ảnh minh họa cho đáp án",
|
|
"required_fields": [
|
|
"options",
|
|
"answer",
|
|
"reason",
|
|
"category",
|
|
"image_url",
|
|
"is_required_image"
|
|
],
|
|
"example": {
|
|
"options": [
|
|
"xe đạp",
|
|
"ô tô",
|
|
"máy bay",
|
|
"chuối"
|
|
],
|
|
"answer": "chuối",
|
|
"reason": "Các từ khác là phương tiện, chuối là hoa quả",
|
|
"category": "phương tiện",
|
|
"image_url": "https://example.com/banana.jpg",
|
|
"is_required_image": true
|
|
}
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"name": "Fill Blank - Điền vào chỗ trống",
|
|
"description": "Điền từ/chữ cái còn thiếu",
|
|
"game_mechanics": {
|
|
"cách_chơi": "Người chơi kéo thả hoặc gõ từ/chữ cái vào chỗ trống",
|
|
"cách_tính_điểm": "Mỗi chỗ trống đúng = 1 điểm",
|
|
"xác_định_đáp_án": "So sánh input người chơi với mảng 'answers' theo thứ tự"
|
|
},
|
|
"base_schema": {
|
|
"mode": {
|
|
"type": "enum",
|
|
"nullable": false,
|
|
"values": [
|
|
"drag_drop",
|
|
"type"
|
|
],
|
|
"mô_tả": "drag_drop = kéo thả, type = gõ tay"
|
|
},
|
|
"target": {
|
|
"type": "enum",
|
|
"nullable": false,
|
|
"values": [
|
|
"sentence",
|
|
"word"
|
|
],
|
|
"mô_tả": "sentence = điền từ, word = điền chữ cái"
|
|
},
|
|
"question": {
|
|
"type": "string",
|
|
"nullable": false,
|
|
"mô_tả": "Câu/từ với ____ đánh dấu chỗ trống"
|
|
},
|
|
"answers": {
|
|
"type": "array<string>",
|
|
"nullable": false,
|
|
"mô_tả": "Danh sách đáp án theo thứ tự chỗ trống"
|
|
},
|
|
"word_bank": {
|
|
"type": "array<string>",
|
|
"nullable": false,
|
|
"default": [],
|
|
"mô_tả": "Ngân hàng từ (chỉ dùng cho mode=drag_drop)"
|
|
},
|
|
"image_url": {
|
|
"type": "string",
|
|
"nullable": true,
|
|
"mô_tả": "URL hình ảnh gợi ý"
|
|
},
|
|
"image_description": {
|
|
"type": "string",
|
|
"nullable": true,
|
|
"mô_tả": "Mô tả hình ảnh"
|
|
},
|
|
"is_required_image": {
|
|
"type": "boolean",
|
|
"nullable": false,
|
|
"default": false,
|
|
"mô_tả": "true = bắt buộc xem ảnh"
|
|
},
|
|
"is_example": {
|
|
"type": "boolean",
|
|
"nullable": false,
|
|
"default": false,
|
|
"mô_tả": "true = đây là câu mẫu"
|
|
}
|
|
},
|
|
"variants": [
|
|
{
|
|
"name": "Điền từ - Kéo thả",
|
|
"mô_tả": "Kéo từ từ ngân hàng từ vào chỗ trống trong câu",
|
|
"required_fields": [
|
|
"mode",
|
|
"target",
|
|
"question",
|
|
"answers",
|
|
"word_bank"
|
|
],
|
|
"example": {
|
|
"mode": "drag_drop",
|
|
"target": "sentence",
|
|
"question": "Mặt trời mọc ở hướng ____.",
|
|
"answers": [
|
|
"đông"
|
|
],
|
|
"word_bank": [
|
|
"đông",
|
|
"tây",
|
|
"nam",
|
|
"bắc"
|
|
]
|
|
}
|
|
},
|
|
{
|
|
"name": "Điền từ - Gõ tay",
|
|
"mô_tả": "Tự gõ từ vào chỗ trống (không có gợi ý)",
|
|
"required_fields": [
|
|
"mode",
|
|
"target",
|
|
"question",
|
|
"answers"
|
|
],
|
|
"note": "word_bank để rỗng []",
|
|
"example": {
|
|
"mode": "type",
|
|
"target": "sentence",
|
|
"question": "Việt Nam có thủ đô là ____.",
|
|
"answers": [
|
|
"Hà Nội"
|
|
],
|
|
"word_bank": []
|
|
}
|
|
},
|
|
{
|
|
"name": "Điền chữ cái - Spelling",
|
|
"mô_tả": "Điền chữ cái còn thiếu trong từ, thường kèm hình ảnh gợi ý",
|
|
"required_fields": [
|
|
"mode",
|
|
"target",
|
|
"question",
|
|
"answers",
|
|
"word_bank",
|
|
"image_url",
|
|
"is_required_image"
|
|
],
|
|
"example": {
|
|
"mode": "drag_drop",
|
|
"target": "word",
|
|
"question": "A____ple",
|
|
"answers": [
|
|
"p"
|
|
],
|
|
"word_bank": [
|
|
"p",
|
|
"b",
|
|
"d"
|
|
],
|
|
"image_url": "https://example.com/apple.jpg",
|
|
"is_required_image": true
|
|
}
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"name": "Circle Word - Khoanh tròn từ đúng",
|
|
"description": "Chọn từ đúng trong các tùy chọn nằm trong câu",
|
|
"game_mechanics": {
|
|
"cách_chơi": "Người chơi đọc câu và click/chọn từ đúng trong ngoặc",
|
|
"cách_tính_điểm": "Đúng = 1 điểm, Sai = 0 điểm",
|
|
"xác_định_đáp_án": "So sánh từ người chọn với trường 'answer'"
|
|
},
|
|
"base_schema": {
|
|
"sentence_template": {
|
|
"type": "string",
|
|
"nullable": false,
|
|
"mô_tả": "Câu với ____ đánh dấu vị trí cần chọn từ"
|
|
},
|
|
"options": {
|
|
"type": "array<string>",
|
|
"nullable": false,
|
|
"min": 2,
|
|
"max": 2,
|
|
"mô_tả": "Các từ để chọn (2 từ)"
|
|
},
|
|
"answer": {
|
|
"type": "string",
|
|
"nullable": false,
|
|
"mô_tả": "Từ đúng - phải nằm trong options"
|
|
},
|
|
"image_url": {
|
|
"type": "string",
|
|
"nullable": true,
|
|
"mô_tả": "URL hình ảnh gợi ý"
|
|
},
|
|
"image_description": {
|
|
"type": "string",
|
|
"nullable": true,
|
|
"mô_tả": "Mô tả hình ảnh"
|
|
},
|
|
"is_required_image": {
|
|
"type": "boolean",
|
|
"nullable": false,
|
|
"default": false,
|
|
"mô_tả": "true = bắt buộc xem ảnh"
|
|
},
|
|
"is_example": {
|
|
"type": "boolean",
|
|
"nullable": false,
|
|
"default": false,
|
|
"mô_tả": "true = đây là câu mẫu"
|
|
}
|
|
},
|
|
"variants": [
|
|
{
|
|
"name": "Khoanh tròn từ - Ngữ pháp",
|
|
"mô_tả": "Chọn từ đúng ngữ pháp trong câu (2 lựa chọn)",
|
|
"required_fields": [
|
|
"sentence_template",
|
|
"options",
|
|
"answer"
|
|
],
|
|
"example": {
|
|
"sentence_template": "You should speak ____ to your teacher.",
|
|
"options": [
|
|
"politely",
|
|
"loudly"
|
|
],
|
|
"answer": "politely"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"name": "Drag Drop - Kéo thả đáp án",
|
|
"description": "Kéo thả đáp án đúng vào chỗ trống",
|
|
"game_mechanics": {
|
|
"cách_chơi": "Người chơi kéo từ từ danh sách options vào chỗ trống trong câu",
|
|
"cách_tính_điểm": "Đúng = 1 điểm, Sai = 0 điểm",
|
|
"xác_định_đáp_án": "So sánh từ người kéo vào với trường 'answer'"
|
|
},
|
|
"base_schema": {
|
|
"question": {
|
|
"type": "string",
|
|
"nullable": false,
|
|
"mô_tả": "Câu với ____ đánh dấu chỗ trống"
|
|
},
|
|
"instruction": {
|
|
"type": "string",
|
|
"nullable": false,
|
|
"default": "Drag the correct answer",
|
|
"mô_tả": "Hướng dẫn cho người chơi"
|
|
},
|
|
"options": {
|
|
"type": "array<string>",
|
|
"nullable": false,
|
|
"min": 2,
|
|
"mô_tả": "Danh sách từ để kéo thả"
|
|
},
|
|
"answer": {
|
|
"type": "string",
|
|
"nullable": false,
|
|
"mô_tả": "Đáp án đúng - phải nằm trong options"
|
|
},
|
|
"image_url": {
|
|
"type": "string",
|
|
"nullable": true,
|
|
"mô_tả": "URL hình ảnh gợi ý"
|
|
},
|
|
"image_description": {
|
|
"type": "string",
|
|
"nullable": true,
|
|
"mô_tả": "Mô tả hình ảnh"
|
|
},
|
|
"is_required_image": {
|
|
"type": "boolean",
|
|
"nullable": false,
|
|
"default": false,
|
|
"mô_tả": "true = bắt buộc xem ảnh"
|
|
},
|
|
"is_example": {
|
|
"type": "boolean",
|
|
"nullable": false,
|
|
"default": false,
|
|
"mô_tả": "true = đây là câu mẫu"
|
|
}
|
|
},
|
|
"variants": [
|
|
{
|
|
"name": "Kéo thả - Text Only",
|
|
"mô_tả": "Kéo từ vào câu, không có hình ảnh",
|
|
"required_fields": [
|
|
"question",
|
|
"instruction",
|
|
"options",
|
|
"answer"
|
|
],
|
|
"example": {
|
|
"question": "He can ____.",
|
|
"instruction": "Hoàn thành câu",
|
|
"options": [
|
|
"run",
|
|
"swim",
|
|
"read"
|
|
],
|
|
"answer": "run"
|
|
}
|
|
},
|
|
{
|
|
"name": "Kéo thả - Với Hình ảnh",
|
|
"mô_tả": "Nhìn hình và kéo từ đúng vào chỗ trống",
|
|
"required_fields": [
|
|
"question",
|
|
"instruction",
|
|
"options",
|
|
"answer",
|
|
"image_url",
|
|
"is_required_image"
|
|
],
|
|
"example": {
|
|
"question": "She can ____.",
|
|
"instruction": "Nhìn tranh và hoàn thành câu",
|
|
"options": [
|
|
"run",
|
|
"swim",
|
|
"read"
|
|
],
|
|
"answer": "read",
|
|
"image_url": "https://example.com/girl_reading.jpg",
|
|
"is_required_image": true
|
|
}
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"name": "Quiz Image - Chọn hình đúng",
|
|
"description": "Chọn hình ảnh đúng dựa trên câu hỏi",
|
|
"game_mechanics": {
|
|
"cách_chơi": "Người chơi đọc câu hỏi và click vào hình ảnh đúng",
|
|
"cách_tính_điểm": "Đúng = 1 điểm, Sai = 0 điểm",
|
|
"xác_định_đáp_án": "So sánh id hình người chọn với option có is_correct=true"
|
|
},
|
|
"base_schema": {
|
|
"question": {
|
|
"type": "string",
|
|
"nullable": false,
|
|
"mô_tả": "Câu hỏi yêu cầu chọn hình"
|
|
},
|
|
"options": {
|
|
"type": "array<ImageOption>",
|
|
"nullable": false,
|
|
"min": 2,
|
|
"max": 4,
|
|
"mô_tả": "Danh sách hình ảnh để chọn",
|
|
"item_schema": {
|
|
"id": {
|
|
"type": "number",
|
|
"nullable": false,
|
|
"mô_tả": "Index của option (0-3)"
|
|
},
|
|
"image_url": {
|
|
"type": "string",
|
|
"nullable": false,
|
|
"mô_tả": "URL hình ảnh"
|
|
},
|
|
"image_description": {
|
|
"type": "string",
|
|
"nullable": false,
|
|
"mô_tả": "Mô tả nội dung hình ảnh"
|
|
},
|
|
"is_correct": {
|
|
"type": "boolean",
|
|
"nullable": false,
|
|
"mô_tả": "true nếu đây là đáp án đúng"
|
|
},
|
|
"text_label": {
|
|
"type": "string",
|
|
"nullable": true,
|
|
"mô_tả": "Nhãn hiển thị dưới hình (optional)"
|
|
}
|
|
}
|
|
},
|
|
"is_example": {
|
|
"type": "boolean",
|
|
"nullable": false,
|
|
"default": false,
|
|
"mô_tả": "true = đây là câu mẫu"
|
|
}
|
|
},
|
|
"variants": [
|
|
{
|
|
"name": "Chọn hình - Text Question",
|
|
"mô_tả": "Đọc câu hỏi văn bản và chọn hình ảnh đúng",
|
|
"required_fields": [
|
|
"question",
|
|
"options"
|
|
],
|
|
"note": "Chính xác 1 option phải có is_correct=true",
|
|
"example": {
|
|
"question": "Đâu là quả táo?",
|
|
"options": [
|
|
{
|
|
"id": 0,
|
|
"image_url": "https://example.com/apple.jpg",
|
|
"image_description": "Quả táo đỏ",
|
|
"is_correct": true,
|
|
"text_label": null
|
|
},
|
|
{
|
|
"id": 1,
|
|
"image_url": "https://example.com/banana.jpg",
|
|
"image_description": "Quả chuối vàng",
|
|
"is_correct": false,
|
|
"text_label": null
|
|
},
|
|
{
|
|
"id": 2,
|
|
"image_url": "https://example.com/orange.jpg",
|
|
"image_description": "Quả cam",
|
|
"is_correct": false,
|
|
"text_label": null
|
|
}
|
|
]
|
|
}
|
|
}
|
|
]
|
|
}
|
|
],
|
|
"excluded_games": [
|
|
{
|
|
"name": "Writing - Viết tự do",
|
|
"lý_do_loại_bỏ": "Không thể xác định đáp án đúng/sai bằng thuật toán, cần AI hoặc người chấm manual"
|
|
},
|
|
{
|
|
"name": "Voice/Audio Games",
|
|
"lý_do_loại_bỏ": "Chưa hỗ trợ xử lý giọng nói/audio, tất cả các trường audio_* đã được loại bỏ"
|
|
}
|
|
],
|
|
"notes": {
|
|
"image_url": "Thay thế image_path từ backend, sử dụng URL hình ảnh trực tiếp có thể load được",
|
|
"removed_ai_fields": [
|
|
"image_keywords",
|
|
"image_is_complex",
|
|
"original_quote",
|
|
"image_roi_box"
|
|
],
|
|
"removed_audio_fields": [
|
|
"audio_path",
|
|
"audio_script",
|
|
"is_required_audio"
|
|
],
|
|
"is_required_image": "true = bắt buộc phải có và xem hình ảnh để chơi game, false = hình ảnh chỉ là minh họa hoặc không có",
|
|
"blank_format": "Sử dụng ____ (4 gạch dưới) cho chỗ trống trong câu hỏi",
|
|
"nullable_meaning": "nullable: true = có thể null/không điền, nullable: false = bắt buộc phải có giá trị"
|
|
}
|
|
} |