/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1");
/****
* Classes
****/
// QuestionButton: A tappable answer button
var QuestionButton = Container.expand(function () {
var self = Container.call(this);
// Button background
var bg = self.attachAsset('buttonBg', {
width: 1400,
height: 180,
color: 0x222222,
shape: 'box',
anchorX: 0.5,
anchorY: 0.5
});
// Button text
var txt = new Text2('', {
size: 70,
fill: 0xFFFFFF
});
txt.anchor.set(0.5, 0.5);
self.addChild(txt);
self.setText = function (t) {
txt.setText(t);
};
self.setWidth = function (w) {
bg.width = w;
};
self.setY = function (y) {
self.y = y;
};
self.setEnabled = function (enabled) {
self.interactive = enabled;
bg.alpha = enabled ? 1 : 0.5;
};
self.flash = function (color, duration) {
tween(bg, {
color: color
}, {
duration: duration / 2,
easing: tween.easeIn,
onFinish: function onFinish() {
tween(bg, {
color: 0x222222
}, {
duration: duration / 2,
easing: tween.easeOut
});
}
});
};
self.down = function (x, y, obj) {
if (self.interactive && typeof self.onSelect === 'function') {
self.onSelect();
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x181818
});
/****
* Game Code
****/
// No custom assets needed; LK will auto-create Text2 and shape assets as used below
// Meme questions: Each has {q: question, a: [answers], c: correctIndex}
var memeQuestions = [{
q: "What animal is famous for 'Doge' meme?",
a: ["Shiba Inu", "Corgi", "Pug", "Bulldog"],
c: 0
}, {
q: "Which phrase is associated with 'Success Kid'?",
a: ["Nailed it!", "I did it!", "Yes!", "Win!"],
c: 3
}, {
q: "What color is the background of 'Distracted Boyfriend' meme?",
a: ["Blue", "City street", "Green", "Classroom"],
c: 1
}, {
q: "What is the catchphrase of 'Grumpy Cat'?",
a: ["Nope.", "I had fun once, it was awful.", "Meh.", "Whatever."],
c: 1
}, {
q: "Which meme features a frog on a unicycle?",
a: ["Dat Boi", "Pepe", "Kermit", "Froggo"],
c: 0
}, {
q: "What is 'Pepe the Frog' usually expressing?",
a: ["Happiness", "Sadness", "Anger", "Excitement"],
c: 1
}, {
q: "What is the name of the meme with a dog in a burning room saying 'This is fine'?",
a: ["Disaster Dog", "This is Fine", "Crisis Canine", "Calm Dog"],
c: 1
}, {
q: "Which meme is known for 'Hide the Pain'?",
a: ["Harold", "Steve", "Bob", "Larry"],
c: 0
}, {
q: "What is the punchline of 'Woman Yelling at Cat' meme?",
a: ["Why are you yelling?", "No!", "Confused Cat", "Table Cat"],
c: 3
}, {
q: "What is the name of the meme with a guy blinking in disbelief?",
a: ["Blinking Guy", "Surprised Pikachu", "Confused Nick Young", "Roll Safe"],
c: 0
}, {
q: "Which meme is associated with 'Is this a pigeon?'",
a: ["Anime Guy", "Butterfly Guy", "Pigeon Guy", "Confused Guy"],
c: 1
}, {
q: "What is the name of the meme with a man tapping his head?",
a: ["Roll Safe", "Smart Guy", "Think About It", "Head Tap"],
c: 0
}, {
q: "Which meme is known for 'Expanding Brain'?",
a: ["Galaxy Brain", "Big Brain", "Brainstorm", "Brain Blast"],
c: 0
}, {
q: "What is the name of the meme with a surprised yellow mouse?",
a: ["Shocked Pikachu", "Surprised Pikachu", "Astonished Pikachu", "Confused Pikachu"],
c: 1
}, {
q: "What is the reward for answering all 15 questions?",
a: ["A real million dollars", "A virtual million dollars", "A meme trophy", "A pizza"],
c: 1
}];
// Shuffle questions for each game
function shuffleQuestions(arr) {
var out = [];
var used = [];
for (var i = 0; i < arr.length; i++) used[i] = false;
for (var j = 0; j < arr.length; j++) {
var idx;
do {
idx = Math.floor(Math.random() * arr.length);
} while (used[idx]);
used[idx] = true;
out.push(arr[idx]);
}
return out;
}
// State
var currentQuestionIndex = 0;
var currentQuestions = [];
var bestStreak = storage.bestStreak || 0;
var streak = 0;
var buttons = [];
var questionText = null;
var streakText = null;
var bestText = null;
var millionText = null;
var canAnswer = true;
// Layout
var questionY = 420;
var buttonStartY = 900;
var buttonSpacing = 260;
// GUI: Streak and best streak
streakText = new Text2('Streak: 0', {
size: 70,
fill: "#fff"
});
streakText.anchor.set(0, 0);
LK.gui.top.addChild(streakText);
bestText = new Text2('Best: ' + bestStreak, {
size: 70,
fill: "#fff"
});
bestText.anchor.set(1, 0);
LK.gui.topRight.addChild(bestText);
// Million text (shows on win)
millionText = new Text2('YOU WON $1,000,000!', {
size: 120,
fill: 0xFFE600
});
millionText.anchor.set(0.5, 0.5);
millionText.visible = false;
LK.gui.center.addChild(millionText);
// Question text
questionText = new Text2('', {
size: 100,
fill: "#fff"
});
questionText.anchor.set(0.5, 0);
questionText.x = 2048 / 2;
questionText.y = questionY;
game.addChild(questionText);
// Create answer buttons
for (var i = 0; i < 4; i++) {
var btn = new QuestionButton();
btn.x = 2048 / 2;
btn.y = buttonStartY + i * buttonSpacing;
btn.setWidth(1400);
btn.setEnabled(false);
btn.onSelect = function (idx) {
return function () {
if (!canAnswer) return;
handleAnswer(idx);
};
}(i);
game.addChild(btn);
buttons.push(btn);
}
// Start a new game
function startGame() {
currentQuestions = shuffleQuestions(memeQuestions);
currentQuestionIndex = 0;
streak = 0;
updateStreak();
millionText.visible = false;
showQuestion();
}
// Show current question
function showQuestion() {
canAnswer = true;
var q = currentQuestions[currentQuestionIndex];
questionText.setText("Q" + (currentQuestionIndex + 1) + ": " + q.q);
for (var i = 0; i < 4; i++) {
buttons[i].setText(q.a[i]);
buttons[i].setEnabled(true);
}
}
// Handle answer selection
function handleAnswer(idx) {
canAnswer = false;
var q = currentQuestions[currentQuestionIndex];
var correct = idx === q.c;
// Disable all buttons
for (var i = 0; i < 4; i++) {
buttons[i].setEnabled(false);
}
if (correct) {
buttons[idx].flash(0x4caf50, 400);
streak++;
updateStreak();
// Next question or win
LK.setTimeout(function () {
if (currentQuestionIndex === 14) {
// Win
millionText.visible = true;
LK.effects.flashScreen(0xffe600, 800);
if (streak > bestStreak) {
bestStreak = streak;
storage.bestStreak = bestStreak;
bestText.setText('Best: ' + bestStreak);
}
LK.showYouWin();
} else {
currentQuestionIndex++;
showQuestion();
}
}, 600);
} else {
buttons[idx].flash(0xff4444, 400);
buttons[q.c].flash(0x4caf50, 400);
LK.effects.flashScreen(0xff0000, 800);
LK.setTimeout(function () {
if (streak > bestStreak) {
bestStreak = streak;
storage.bestStreak = bestStreak;
bestText.setText('Best: ' + bestStreak);
}
LK.showGameOver();
}, 900);
}
}
// Update streak display
function updateStreak() {
streakText.setText('Streak: ' + streak);
}
// On game reset, start new game
startGame();
// On game over or win, LK will reset the game and re-run this file, so no need to handle reset logic here. ===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,284 @@
-/****
+/****
+* Plugins
+****/
+var tween = LK.import("@upit/tween.v1");
+var storage = LK.import("@upit/storage.v1");
+
+/****
+* Classes
+****/
+// QuestionButton: A tappable answer button
+var QuestionButton = Container.expand(function () {
+ var self = Container.call(this);
+ // Button background
+ var bg = self.attachAsset('buttonBg', {
+ width: 1400,
+ height: 180,
+ color: 0x222222,
+ shape: 'box',
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ // Button text
+ var txt = new Text2('', {
+ size: 70,
+ fill: 0xFFFFFF
+ });
+ txt.anchor.set(0.5, 0.5);
+ self.addChild(txt);
+ self.setText = function (t) {
+ txt.setText(t);
+ };
+ self.setWidth = function (w) {
+ bg.width = w;
+ };
+ self.setY = function (y) {
+ self.y = y;
+ };
+ self.setEnabled = function (enabled) {
+ self.interactive = enabled;
+ bg.alpha = enabled ? 1 : 0.5;
+ };
+ self.flash = function (color, duration) {
+ tween(bg, {
+ color: color
+ }, {
+ duration: duration / 2,
+ easing: tween.easeIn,
+ onFinish: function onFinish() {
+ tween(bg, {
+ color: 0x222222
+ }, {
+ duration: duration / 2,
+ easing: tween.easeOut
+ });
+ }
+ });
+ };
+ self.down = function (x, y, obj) {
+ if (self.interactive && typeof self.onSelect === 'function') {
+ self.onSelect();
+ }
+ };
+ return self;
+});
+
+/****
* Initialize Game
-****/
+****/
var game = new LK.Game({
- backgroundColor: 0x000000
-});
\ No newline at end of file
+ backgroundColor: 0x181818
+});
+
+/****
+* Game Code
+****/
+// No custom assets needed; LK will auto-create Text2 and shape assets as used below
+// Meme questions: Each has {q: question, a: [answers], c: correctIndex}
+var memeQuestions = [{
+ q: "What animal is famous for 'Doge' meme?",
+ a: ["Shiba Inu", "Corgi", "Pug", "Bulldog"],
+ c: 0
+}, {
+ q: "Which phrase is associated with 'Success Kid'?",
+ a: ["Nailed it!", "I did it!", "Yes!", "Win!"],
+ c: 3
+}, {
+ q: "What color is the background of 'Distracted Boyfriend' meme?",
+ a: ["Blue", "City street", "Green", "Classroom"],
+ c: 1
+}, {
+ q: "What is the catchphrase of 'Grumpy Cat'?",
+ a: ["Nope.", "I had fun once, it was awful.", "Meh.", "Whatever."],
+ c: 1
+}, {
+ q: "Which meme features a frog on a unicycle?",
+ a: ["Dat Boi", "Pepe", "Kermit", "Froggo"],
+ c: 0
+}, {
+ q: "What is 'Pepe the Frog' usually expressing?",
+ a: ["Happiness", "Sadness", "Anger", "Excitement"],
+ c: 1
+}, {
+ q: "What is the name of the meme with a dog in a burning room saying 'This is fine'?",
+ a: ["Disaster Dog", "This is Fine", "Crisis Canine", "Calm Dog"],
+ c: 1
+}, {
+ q: "Which meme is known for 'Hide the Pain'?",
+ a: ["Harold", "Steve", "Bob", "Larry"],
+ c: 0
+}, {
+ q: "What is the punchline of 'Woman Yelling at Cat' meme?",
+ a: ["Why are you yelling?", "No!", "Confused Cat", "Table Cat"],
+ c: 3
+}, {
+ q: "What is the name of the meme with a guy blinking in disbelief?",
+ a: ["Blinking Guy", "Surprised Pikachu", "Confused Nick Young", "Roll Safe"],
+ c: 0
+}, {
+ q: "Which meme is associated with 'Is this a pigeon?'",
+ a: ["Anime Guy", "Butterfly Guy", "Pigeon Guy", "Confused Guy"],
+ c: 1
+}, {
+ q: "What is the name of the meme with a man tapping his head?",
+ a: ["Roll Safe", "Smart Guy", "Think About It", "Head Tap"],
+ c: 0
+}, {
+ q: "Which meme is known for 'Expanding Brain'?",
+ a: ["Galaxy Brain", "Big Brain", "Brainstorm", "Brain Blast"],
+ c: 0
+}, {
+ q: "What is the name of the meme with a surprised yellow mouse?",
+ a: ["Shocked Pikachu", "Surprised Pikachu", "Astonished Pikachu", "Confused Pikachu"],
+ c: 1
+}, {
+ q: "What is the reward for answering all 15 questions?",
+ a: ["A real million dollars", "A virtual million dollars", "A meme trophy", "A pizza"],
+ c: 1
+}];
+// Shuffle questions for each game
+function shuffleQuestions(arr) {
+ var out = [];
+ var used = [];
+ for (var i = 0; i < arr.length; i++) used[i] = false;
+ for (var j = 0; j < arr.length; j++) {
+ var idx;
+ do {
+ idx = Math.floor(Math.random() * arr.length);
+ } while (used[idx]);
+ used[idx] = true;
+ out.push(arr[idx]);
+ }
+ return out;
+}
+// State
+var currentQuestionIndex = 0;
+var currentQuestions = [];
+var bestStreak = storage.bestStreak || 0;
+var streak = 0;
+var buttons = [];
+var questionText = null;
+var streakText = null;
+var bestText = null;
+var millionText = null;
+var canAnswer = true;
+// Layout
+var questionY = 420;
+var buttonStartY = 900;
+var buttonSpacing = 260;
+// GUI: Streak and best streak
+streakText = new Text2('Streak: 0', {
+ size: 70,
+ fill: "#fff"
+});
+streakText.anchor.set(0, 0);
+LK.gui.top.addChild(streakText);
+bestText = new Text2('Best: ' + bestStreak, {
+ size: 70,
+ fill: "#fff"
+});
+bestText.anchor.set(1, 0);
+LK.gui.topRight.addChild(bestText);
+// Million text (shows on win)
+millionText = new Text2('YOU WON $1,000,000!', {
+ size: 120,
+ fill: 0xFFE600
+});
+millionText.anchor.set(0.5, 0.5);
+millionText.visible = false;
+LK.gui.center.addChild(millionText);
+// Question text
+questionText = new Text2('', {
+ size: 100,
+ fill: "#fff"
+});
+questionText.anchor.set(0.5, 0);
+questionText.x = 2048 / 2;
+questionText.y = questionY;
+game.addChild(questionText);
+// Create answer buttons
+for (var i = 0; i < 4; i++) {
+ var btn = new QuestionButton();
+ btn.x = 2048 / 2;
+ btn.y = buttonStartY + i * buttonSpacing;
+ btn.setWidth(1400);
+ btn.setEnabled(false);
+ btn.onSelect = function (idx) {
+ return function () {
+ if (!canAnswer) return;
+ handleAnswer(idx);
+ };
+ }(i);
+ game.addChild(btn);
+ buttons.push(btn);
+}
+// Start a new game
+function startGame() {
+ currentQuestions = shuffleQuestions(memeQuestions);
+ currentQuestionIndex = 0;
+ streak = 0;
+ updateStreak();
+ millionText.visible = false;
+ showQuestion();
+}
+// Show current question
+function showQuestion() {
+ canAnswer = true;
+ var q = currentQuestions[currentQuestionIndex];
+ questionText.setText("Q" + (currentQuestionIndex + 1) + ": " + q.q);
+ for (var i = 0; i < 4; i++) {
+ buttons[i].setText(q.a[i]);
+ buttons[i].setEnabled(true);
+ }
+}
+// Handle answer selection
+function handleAnswer(idx) {
+ canAnswer = false;
+ var q = currentQuestions[currentQuestionIndex];
+ var correct = idx === q.c;
+ // Disable all buttons
+ for (var i = 0; i < 4; i++) {
+ buttons[i].setEnabled(false);
+ }
+ if (correct) {
+ buttons[idx].flash(0x4caf50, 400);
+ streak++;
+ updateStreak();
+ // Next question or win
+ LK.setTimeout(function () {
+ if (currentQuestionIndex === 14) {
+ // Win
+ millionText.visible = true;
+ LK.effects.flashScreen(0xffe600, 800);
+ if (streak > bestStreak) {
+ bestStreak = streak;
+ storage.bestStreak = bestStreak;
+ bestText.setText('Best: ' + bestStreak);
+ }
+ LK.showYouWin();
+ } else {
+ currentQuestionIndex++;
+ showQuestion();
+ }
+ }, 600);
+ } else {
+ buttons[idx].flash(0xff4444, 400);
+ buttons[q.c].flash(0x4caf50, 400);
+ LK.effects.flashScreen(0xff0000, 800);
+ LK.setTimeout(function () {
+ if (streak > bestStreak) {
+ bestStreak = streak;
+ storage.bestStreak = bestStreak;
+ bestText.setText('Best: ' + bestStreak);
+ }
+ LK.showGameOver();
+ }, 900);
+ }
+}
+// Update streak display
+function updateStreak() {
+ streakText.setText('Streak: ' + streak);
+}
+// On game reset, start new game
+startGame();
+// On game over or win, LK will reset the game and re-run this file, so no need to handle reset logic here.
\ No newline at end of file