up
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "SQ_SENTENCE",
|
||||
"short_name": "SQ_SENTENCE",
|
||||
"name": "G102-sequence",
|
||||
"short_name": "G102-sequence",
|
||||
"start_url": "index.html",
|
||||
"display": "fullscreen",
|
||||
"orientation": "any",
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -3,7 +3,7 @@
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
|
||||
<title>SQ_SENTENCE</title>
|
||||
<title>G102-sequence</title>
|
||||
|
||||
<!-- Standardised web app manifest -->
|
||||
<link rel="manifest" href="appmanifest.json" />
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"version": 1769054861,
|
||||
"version": 1769066087,
|
||||
"fileList": [
|
||||
"data.js",
|
||||
"c2runtime.js",
|
||||
|
||||
@@ -26,7 +26,7 @@ var tdv_sdk = {
|
||||
correctWords: [], // Mảng các từ đúng (theo thứ tự)
|
||||
listPosX: [],
|
||||
newWidth: 150,
|
||||
maxWWidth: 1400,
|
||||
maxWWidth: 1200,
|
||||
margin: 40,
|
||||
|
||||
// --- DỮ LIỆU MẶC ĐỊNH (FALLBACK) ---
|
||||
@@ -103,8 +103,8 @@ var tdv_sdk = {
|
||||
// --- CÁC HÀM CALLBACK ---
|
||||
onGameStart: function () { console.log("SDK: Sentence Game Started"); },
|
||||
onAnswerChecked: function (isCorrect, data) { console.log("SDK: Answer Checked", isCorrect); },
|
||||
onGameFinished: function (finalData) { console.log("SDK: Game Finished", finalData); },
|
||||
onLeaderboardLoaded: function (data) { console.log("SDK: Leaderboard Loaded"); },
|
||||
onGameFinished: function (finalData) { console.log("SDK: Game Finished", finalData,data); },
|
||||
onLeaderboardLoaded: function (data) { console.log("SDK: Leaderboard Loaded",data); },
|
||||
|
||||
// --- KHỞI TẠO & LOAD DỮ LIỆU ---
|
||||
init: function () {
|
||||
@@ -810,51 +810,159 @@ var tdv_sdk = {
|
||||
},
|
||||
|
||||
// ==================== VỊ TRÍ CĂN GIỮA VỚI SPACING CỐ ĐỊNH ====================
|
||||
// centerX: tâm màn hình (mặc định 960)
|
||||
// spacing: khoảng cách giữa các ô (CỐ ĐỊNH, mặc định 200)
|
||||
// ===== CẤU HÌNH CHỈNH TRONG CODE =====
|
||||
centerX: 600, // Tâm màn hình X
|
||||
startY: 840, // Y của dòng đầu tiên
|
||||
spacingX: 210, // Khoảng cách giữa các ô (X & Y)
|
||||
// ===== LAYOUT CONFIG =====
|
||||
startY: 840,
|
||||
spacingX: 210,
|
||||
spacingY: 95,
|
||||
maxPerRow: 5, // Số ô mỗi dòng
|
||||
// Lấy vị trí X của ô theo index (căn giữa + spacing cố định)
|
||||
// Sử dụng: Browser.ExecJS("tdv_sdk.getCenteredPosX(" & loopindex & ", 960, 200)")
|
||||
getCenteredPosX: function (index) {
|
||||
|
||||
// ===== HELPER: chia số ô theo số dòng =====
|
||||
getRowConfig: function () {
|
||||
var n = this.currentWords.length;
|
||||
if (n <= 0) return this.centerX;
|
||||
|
||||
var row = Math.floor(index / this.maxPerRow);
|
||||
// 1 dòng
|
||||
if (n <= 5) {
|
||||
return [n];
|
||||
}
|
||||
|
||||
// Số ô trong dòng hiện tại
|
||||
var itemsInRow = Math.min(
|
||||
this.maxPerRow,
|
||||
n - row * this.maxPerRow
|
||||
);
|
||||
// 2 dòng (dòng trên nặng hơn)
|
||||
if (n <= 10) {
|
||||
var top = Math.ceil(n * 0.6);
|
||||
var bottom = n - top;
|
||||
return [top, bottom];
|
||||
}
|
||||
|
||||
// 3 dòng (giảm dần)
|
||||
var rows = [];
|
||||
var remain = n;
|
||||
|
||||
// dòng 1 ~ 40%
|
||||
var r1 = Math.ceil(n * 0.4);
|
||||
rows.push(r1);
|
||||
remain -= r1;
|
||||
|
||||
// dòng 2 ~ 35% của phần còn lại
|
||||
var r2 = Math.ceil(remain * 0.5);
|
||||
rows.push(r2);
|
||||
remain -= r2;
|
||||
|
||||
// dòng 3: còn lại
|
||||
rows.push(remain);
|
||||
|
||||
return rows;
|
||||
},
|
||||
|
||||
|
||||
// ===== X POSITION =====
|
||||
getCenteredPosX: function (index) {
|
||||
var rows = this.getRowConfig();
|
||||
var centerX = this.maxWWidth / 2;
|
||||
|
||||
var acc = 0;
|
||||
var row = 0;
|
||||
var col = 0;
|
||||
|
||||
for (var i = 0; i < rows.length; i++) {
|
||||
if (index < acc + rows[i]) {
|
||||
row = i;
|
||||
col = index - acc;
|
||||
break;
|
||||
}
|
||||
acc += rows[i];
|
||||
}
|
||||
|
||||
var itemsInRow = rows[row];
|
||||
var totalWidth = (itemsInRow - 1) * this.spacingX;
|
||||
var startX = this.centerX - totalWidth / 2;
|
||||
var startX = centerX - totalWidth / 2;
|
||||
|
||||
var col = index % this.maxPerRow;
|
||||
return startX + col * this.spacingX;
|
||||
},
|
||||
|
||||
// ===== TÍNH Y (XUỐNG DÒNG) =====
|
||||
getCenteredPosY: function () {
|
||||
// ===== Y POSITION =====
|
||||
getCenteredPosY: function (index) {
|
||||
var rows = this.getRowConfig();
|
||||
|
||||
var acc = 0;
|
||||
var row = 0;
|
||||
|
||||
for (var i = 0; i < rows.length; i++) {
|
||||
if (index < acc + rows[i]) {
|
||||
row = i;
|
||||
break;
|
||||
}
|
||||
acc += rows[i];
|
||||
}
|
||||
|
||||
return this.startY + row * this.spacingY;
|
||||
},
|
||||
|
||||
// ===== CHECKER Y (luôn dưới answers) =====
|
||||
getCheckerBaseY: function (index) {
|
||||
var rows = this.getRowConfig();
|
||||
|
||||
// Tổng chiều cao answers
|
||||
var answerBlockHeight = rows.length * this.spacingY;
|
||||
|
||||
// Xác định checker đang ở dòng nào
|
||||
var acc = 0;
|
||||
var row = 0;
|
||||
|
||||
for (var i = 0; i < rows.length; i++) {
|
||||
if (index < acc + rows[i]) {
|
||||
row = i;
|
||||
break;
|
||||
}
|
||||
acc += rows[i];
|
||||
}
|
||||
|
||||
// Checker nằm dưới answers + theo dòng tương ứng
|
||||
return this.startY
|
||||
+ this.spacingY // khoảng cách giữa answers & checker
|
||||
+ row * this.spacingY // dòng checker
|
||||
+ 10; // padding nhỏ
|
||||
},
|
||||
|
||||
// centerX: 600, // Tâm màn hình X
|
||||
// startY: 800, // Y của dòng đầu tiên
|
||||
// spacingX: 210, // Khoảng cách giữa các ô (X & Y)
|
||||
// spacingY: 95,
|
||||
// maxPerRow: 5, // Số ô mỗi dòng
|
||||
// // Lấy vị trí X của ô theo index (căn giữa + spacing cố định)
|
||||
// // Sử dụng: Browser.ExecJS("tdv_sdk.getCenteredPosX(" & loopindex & ", 960, 200)")
|
||||
// getCenteredPosX: function (index) {
|
||||
|
||||
// var n = this.currentWords.length;
|
||||
// if (n <= 0) return this.centerX;
|
||||
|
||||
// var row = Math.floor(index / this.maxPerRow);
|
||||
return this.startY;
|
||||
},
|
||||
getCheckerBaseY: function (index) {
|
||||
|
||||
var n = this.currentWords.length;
|
||||
if (n <= 0) return this.startY;
|
||||
// // Số ô trong dòng hiện tại
|
||||
// var itemsInRow = Math.min(
|
||||
// this.maxPerRow,
|
||||
// n - row * this.maxPerRow
|
||||
// );
|
||||
|
||||
var row = Math.floor(index / this.maxPerRow);
|
||||
// checker nằm dưới dòng answers cuối
|
||||
return this.startY + 1 * this.spacingY + row * this.spacingY + 10;
|
||||
},
|
||||
// var totalWidth = (itemsInRow - 1) * this.spacingX;
|
||||
// var startX = this.centerX - totalWidth / 2;
|
||||
|
||||
// var col = index % this.maxPerRow;
|
||||
// return startX + col * this.spacingX;
|
||||
// },
|
||||
|
||||
// // ===== TÍNH Y (XUỐNG DÒNG) =====
|
||||
// getCenteredPosY: function () {
|
||||
|
||||
// // var row = Math.floor(index / this.maxPerRow);
|
||||
// return this.startY;
|
||||
// },
|
||||
// getCheckerBaseY: function (index) {
|
||||
|
||||
// var n = this.currentWords.length;
|
||||
// if (n <= 0) return this.startY;
|
||||
|
||||
// var row = Math.floor(index / this.maxPerRow);
|
||||
// // checker nằm dưới dòng answers cuối
|
||||
// return this.startY + 1 * this.spacingY + row * this.spacingY + 10;
|
||||
// },
|
||||
shuffleArray: function (array) {
|
||||
for (let i = array.length - 1; i > 0; i--) {
|
||||
const j = Math.floor(Math.random() * (i + 1));
|
||||
|
||||
Reference in New Issue
Block a user