Code edit (10 edits merged)
Please save this source code
User prompt
a şıkkını 500 pixel aşağı 200 pixel sola götü ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
a şıkkını 500 pixel aşağı 200 pixel sola götü
Code edit (1 edits merged)
Please save this source code
User prompt
Please fix the bug: 'Uncaught TypeError: Cannot read properties of undefined (reading 'index')' in or related to this line: 'self.selectFriend(obj.parent.index);' Line Number: 152
Code edit (1 edits merged)
Please save this source code
User prompt
Quiz Master Challenge
Initial prompt
A quiz like game i will upload the background and the template you will place buttons on the template and depend on the situation you will close one photo and upload other photo imagine if there is 10 quesyions there will be 10 templates for each questions and there will be characters when get the question right happy character will appear when lost sad character appears when there is small time left excited character will appear depen on the situation and there will be jokers first joker makes random 2 wrong button disappear second joker is asking to the audience and accuracy of this joker is depending on the question first question has %99 accuracy of showing right choice and all choices has a name like a b c d second question has %94 accuracy getting lower %5 accuracy each question third joker is asking on the qhone if asking the right person player gets the right answer there will be 4 persons to ask, forth joker is giving you an extra try for example you give the wrong asnwer the answer you gave button disappears and you keep playing after the first wrong answer you keep playing just as the before joker and if the person gets the answer right after using the joker joker goes for nothing
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1", {
highScore: 0,
totalPlayed: 0
});
/****
* Classes
****/
var Character = Container.expand(function () {
var self = Container.call(this);
var happyFace = self.attachAsset('characterHappy', {
anchorX: 0.5,
anchorY: 0.5
});
happyFace.visible = false;
var sadFace = self.attachAsset('characterSad', {
anchorX: 0.5,
anchorY: 0.5
});
sadFace.visible = false;
var excitedFace = self.attachAsset('characterExcited', {
anchorX: 0.5,
anchorY: 0.5
});
excitedFace.visible = false;
var neutralFace = self.attachAsset('characterNeutral', {
anchorX: 0.5,
anchorY: 0.5
});
neutralFace.visible = true;
self.showHappy = function () {
happyFace.visible = true;
sadFace.visible = false;
excitedFace.visible = false;
neutralFace.visible = false;
};
self.showSad = function () {
happyFace.visible = false;
sadFace.visible = true;
excitedFace.visible = false;
neutralFace.visible = false;
};
self.showExcited = function () {
happyFace.visible = false;
sadFace.visible = false;
excitedFace.visible = true;
neutralFace.visible = false;
};
self.showNeutral = function () {
happyFace.visible = false;
sadFace.visible = false;
excitedFace.visible = false;
neutralFace.visible = true;
};
return self;
});
var Joker = Container.expand(function (type, icon) {
var self = Container.call(this);
self.type = type;
self.used = false;
var background = self.attachAsset('jokerButton', {
anchorX: 0.5,
anchorY: 0.5
});
var text = new Text2(icon, {
size: 50,
fill: 0xFFFFFF
});
text.anchor.set(0.5, 0.5);
self.addChild(text);
self.use = function () {
if (self.used) {
return false;
}
self.used = true;
tween(self, {
alpha: 0.4
}, {
duration: 300
});
return true;
};
self.reset = function () {
self.used = false;
self.alpha = 1;
};
self.down = function (x, y, obj) {
if (!self.used && !gameOver && !answerLocked) {
activateJoker(self.type);
}
};
return self;
});
var PhoneFriendPopup = Container.expand(function () {
var self = Container.call(this);
var background = self.attachAsset('questionCard', {
anchorX: 0.5,
anchorY: 0.5,
width: 1200,
height: 800
});
background.tint = 0xF5F5F5;
var titleText = new Text2("Phone a Friend", {
size: 80,
fill: 0x333333
});
titleText.anchor.set(0.5, 0);
titleText.position.set(0, -320);
self.addChild(titleText);
var friends = [];
var friendNames = ["Professor", "Scientist", "Artist", "Engineer"];
for (var i = 0; i < 4; i++) {
var friendButton = new Container();
var buttonBg = LK.getAsset('buttonBackground', {
anchorX: 0.5,
anchorY: 0.5,
width: 500,
height: 100
});
friendButton.addChild(buttonBg);
var nameText = new Text2(friendNames[i], {
size: 50,
fill: 0x333333
});
nameText.anchor.set(0.5, 0.5);
friendButton.addChild(nameText);
friendButton.position.set(0, -150 + i * 150);
friendButton.index = i;
friendButton.interactive = true;
friendButton.down = function (x, y, obj) {
self.selectFriend(i); // Use the value of i from the loop instead of obj.parent.index
};
self.addChild(friendButton);
friends.push(friendButton);
}
self.visible = false;
self.show = function () {
self.visible = true;
};
self.hide = function () {
self.visible = false;
};
self.selectFriend = function (index) {
self.hide();
phoneFriendCallback(index);
};
return self;
});
var QuestionButton = Container.expand(function (index, text) {
var self = Container.call(this);
self.index = index;
self.isCorrect = false;
self.isSelected = false;
self.isEliminated = false;
var background = self.attachAsset('buttonBackground', {
anchorX: 0.5,
anchorY: 0.5
});
var buttonText = new Text2(text, {
size: 60,
fill: 0x333333
});
buttonText.anchor.set(0.5, 0.5);
self.addChild(buttonText);
var overlay = self.attachAsset('correctAnswerOverlay', {
anchorX: 0.5,
anchorY: 0.5
});
overlay.alpha = 0;
self.setText = function (newText) {
buttonText.setText(newText);
};
self.setCorrect = function (correct) {
self.isCorrect = correct;
};
self.markAsCorrect = function () {
overlay.tint = 0x00FF00;
tween(overlay, {
alpha: 0.5
}, {
duration: 500
});
};
self.markAsIncorrect = function () {
overlay.tint = 0xFF0000;
tween(overlay, {
alpha: 0.5
}, {
duration: 500
});
};
self.reset = function () {
overlay.alpha = 0;
self.isSelected = false;
self.isEliminated = false;
};
self.eliminate = function () {
if (self.isCorrect) {
return false;
}
self.isEliminated = true;
tween(self, {
alpha: 0.3
}, {
duration: 300
});
return true;
};
self.down = function (x, y, obj) {
if (!self.isEliminated && !gameOver && !answerLocked) {
self.isSelected = true;
submitAnswer(self.index);
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x87CEEB
});
/****
* Game Code
****/
// Game constants
// Character images for different emotions/states
var TOTAL_QUESTIONS = 10;
var TIME_PER_QUESTION = 30; // seconds
var BUTTON_SPACING = 180;
// Game state variables
var currentQuestion = 0;
var score = 0;
var timeLeft = TIME_PER_QUESTION;
var gameOver = false;
var answerLocked = false;
var usedSecondChance = false;
var currentCorrectIndex = 0;
// Quiz questions
var questions = [{
question: "What is the capital of France?",
answers: ["Paris", "London", "Berlin", "Madrid"],
correctIndex: 0
}, {
question: "Which planet is known as the Red Planet?",
answers: ["Venus", "Mars", "Jupiter", "Saturn"],
correctIndex: 1
}, {
question: "What is the largest mammal on Earth?",
answers: ["Elephant", "Giraffe", "Blue Whale", "Polar Bear"],
correctIndex: 2
}, {
question: "Which of these is not a programming language?",
answers: ["Java", "Python", "Banana", "Ruby"],
correctIndex: 2
}, {
question: "What year did the Titanic sink?",
answers: ["1912", "1905", "1920", "1931"],
correctIndex: 0
}, {
question: "Which element has the chemical symbol 'O'?",
answers: ["Gold", "Oxygen", "Osmium", "Oganesson"],
correctIndex: 1
}, {
question: "Who painted the Mona Lisa?",
answers: ["Van Gogh", "Picasso", "Michelangelo", "Leonardo da Vinci"],
correctIndex: 3
}, {
question: "What is the smallest prime number?",
answers: ["0", "1", "2", "3"],
correctIndex: 2
}, {
question: "Which country is home to the kangaroo?",
answers: ["New Zealand", "South Africa", "Australia", "Brazil"],
correctIndex: 2
}, {
question: "How many sides does a hexagon have?",
answers: ["5", "6", "7", "8"],
correctIndex: 1
}];
// Background colors for different questions
var backgroundColors = [0x87CEEB,
// Sky blue
0x98FB98,
// Pale green
0xFFB6C1,
// Light pink
0xFFD700,
// Gold
0xE6E6FA,
// Lavender
0xFFA07A,
// Light salmon
0xADD8E6,
// Light blue
0xF0E68C,
// Khaki
0xD8BFD8,
// Thistle
0xAFEEEE // Pale turquoise
];
// Create UI elements
var questionCard = game.addChild(LK.getAsset('questionCard', {
anchorX: 0.5,
anchorY: -0.8
}));
questionCard.position.set(2048 / 2, 2732 / 2 - 500);
var questionText = new Text2("", {
size: 70,
fill: 0x333333
});
questionText.anchor.set(0.5, 0.5);
questionText.position.set(0, 0);
questionCard.addChild(questionText);
var answerButtons = [];
for (var i = 0; i < 4; i++) {
var button = new QuestionButton(i, "");
if (i === 0) {
// Move button A 500 pixels down and 200 pixels left
button.position.set(2048 / 2 - 500, 2732 / 2 - 100 + i * BUTTON_SPACING + 500);
} else {
if (i === 0) {
// Move button A 500 pixels down and 200 pixels left
button.position.set(2048 / 2 - 200, 2732 / 2 - 100 + i * BUTTON_SPACING + 500);
} else {
button.position.set(2048 / 2, 2732 / 2 - 100 + i * BUTTON_SPACING);
}
}
answerButtons.push(button);
game.addChild(button);
}
// Create jokers
var jokers = [];
var jokerTypes = ["fifty", "audience", "phone", "second"];
var jokerIcons = ["50/50", "👥", "📞", "🔄"];
for (var i = 0; i < 4; i++) {
var joker = new Joker(jokerTypes[i], jokerIcons[i]);
joker.position.set(250 + i * 150, 200);
jokers.push(joker);
game.addChild(joker);
}
// Create character
var character = new Character();
character.position.set(2048 / 2, 2732 - 300);
game.addChild(character);
// Create timer UI
var timerText = new Text2("", {
size: 100,
fill: 0xFF0000
});
timerText.anchor.set(0.5, 0.5);
timerText.position.set(2048 / 2, 150);
game.addChild(timerText);
// Create score display
var scoreText = new Text2("Score: 0", {
size: 70,
fill: 0xFFFFFF
});
scoreText.anchor.set(1, 0);
scoreText.position.set(2048 - 50, 50);
game.addChild(scoreText);
// Create question counter
var counterText = new Text2("Question: 1/" + TOTAL_QUESTIONS, {
size: 70,
fill: 0xFFFFFF
});
counterText.anchor.set(0, 0);
counterText.position.set(150, 50);
game.addChild(counterText);
// Create phone a friend popup
var phoneFriendPopup = new PhoneFriendPopup();
phoneFriendPopup.position.set(2048 / 2, 2732 / 2);
game.addChild(phoneFriendPopup);
// Game timer
var gameTimer = LK.setInterval(function () {
if (gameOver || answerLocked) {
return;
}
timeLeft--;
timerText.setText(timeLeft);
// Change character expression when time is running low
if (timeLeft <= 5) {
character.showExcited();
}
if (timeLeft <= 0) {
timeExpired();
}
}, 1000);
// Game functions
function loadQuestion(index) {
if (index >= questions.length) {
endGame(true);
return;
}
// Change background color
game.setBackgroundColor(backgroundColors[index]);
var question = questions[index];
questionText.setText(question.question);
currentCorrectIndex = question.correctIndex;
for (var i = 0; i < 4; i++) {
answerButtons[i].setText(question.answers[i]);
answerButtons[i].setCorrect(i === question.correctIndex);
answerButtons[i].reset();
}
timeLeft = TIME_PER_QUESTION;
timerText.setText(timeLeft);
currentQuestion = index;
counterText.setText("Question: " + (currentQuestion + 1) + "/" + TOTAL_QUESTIONS);
character.showNeutral();
usedSecondChance = false;
answerLocked = false;
}
function submitAnswer(index) {
if (answerLocked) {
return;
}
answerLocked = true;
var correct = index === currentCorrectIndex;
if (correct) {
LK.getSound('correctSound').play();
answerButtons[index].markAsCorrect();
character.showHappy();
score++;
scoreText.setText("Score: " + score);
LK.setTimeout(function () {
loadQuestion(currentQuestion + 1);
}, 1500);
} else {
LK.getSound('incorrectSound').play();
answerButtons[index].markAsIncorrect();
answerButtons[currentCorrectIndex].markAsCorrect();
character.showSad();
// Check if second chance joker is available
var canUseSecondChance = !usedSecondChance && findJokerByType("second") && !findJokerByType("second").used;
if (canUseSecondChance) {
LK.setTimeout(function () {
activateJoker("second");
}, 1500);
} else {
LK.setTimeout(function () {
endGame(false);
}, 2000);
}
}
}
function timeExpired() {
answerLocked = true;
character.showSad();
// Highlight correct answer
answerButtons[currentCorrectIndex].markAsCorrect();
LK.setTimeout(function () {
endGame(false);
}, 2000);
}
function activateJoker(type) {
var joker = findJokerByType(type);
if (!joker || joker.used) {
return;
}
LK.getSound('jokerSound').play();
switch (type) {
case "fifty":
useFiftyFifty();
break;
case "audience":
useAudienceHelp();
break;
case "phone":
usePhoneFriend();
break;
case "second":
useSecondChance();
break;
}
joker.use();
}
function findJokerByType(type) {
for (var i = 0; i < jokers.length; i++) {
if (jokers[i].type === type) {
return jokers[i];
}
}
return null;
}
function useFiftyFifty() {
var eliminated = 0;
var attempts = 0;
// Try to eliminate two wrong answers
while (eliminated < 2 && attempts < 10) {
attempts++;
var randomIndex = Math.floor(Math.random() * 4);
if (answerButtons[randomIndex].eliminate()) {
eliminated++;
}
}
}
function useAudienceHelp() {
// Calculate audience accuracy based on question number
// Accuracy decreases as questions get harder
var baseAccuracy = 0.99 - currentQuestion * 0.05;
for (var i = 0; i < 4; i++) {
var percentage;
if (i === currentCorrectIndex) {
// Correct answer gets higher percentage based on accuracy
percentage = Math.floor(baseAccuracy * 100);
} else {
// Distribute remaining percentage among wrong answers
percentage = Math.floor((1 - baseAccuracy) * 33);
}
// Update button text to show percentage
var originalText = questions[currentQuestion].answers[i];
answerButtons[i].setText(originalText + " (" + percentage + "%)");
}
// Reset the text after 5 seconds
LK.setTimeout(function () {
for (var i = 0; i < 4; i++) {
answerButtons[i].setText(questions[currentQuestion].answers[i]);
}
}, 5000);
}
function usePhoneFriend() {
phoneFriendPopup.show();
}
function useSecondChance() {
usedSecondChance = true;
// Reset all buttons
for (var i = 0; i < 4; i++) {
answerButtons[i].reset();
}
// Unlock answer selection
answerLocked = false;
// Reset character
character.showNeutral();
}
function phoneFriendCallback(friendIndex) {
var friendKnowledge;
// Different friends have different knowledge areas
switch (friendIndex) {
case 0:
// Professor - 80% chance of being correct
friendKnowledge = 0.8;
break;
case 1:
// Scientist - 70% chance of being correct
friendKnowledge = 0.7;
break;
case 2:
// Artist - 60% chance of being correct
friendKnowledge = 0.6;
break;
case 3:
// Engineer - 75% chance of being correct
friendKnowledge = 0.75;
break;
}
var answerIndex;
// Determine if friend gives correct answer based on knowledge
if (Math.random() < friendKnowledge) {
answerIndex = currentCorrectIndex;
} else {
// Select a random wrong answer
do {
answerIndex = Math.floor(Math.random() * 4);
} while (answerIndex === currentCorrectIndex);
}
// Highlight the friend's suggestion
var originalColor = answerButtons[answerIndex].children[0].tint;
answerButtons[answerIndex].children[0].tint = 0x00FFFF;
// Reset the highlight after 5 seconds
LK.setTimeout(function () {
answerButtons[answerIndex].children[0].tint = originalColor;
}, 5000);
}
function endGame(completed) {
gameOver = true;
// Update high score
if (score > storage.highScore) {
storage.highScore = score;
}
// Update total games played
storage.totalPlayed = (storage.totalPlayed || 0) + 1;
// Show game over screen
if (completed) {
LK.showYouWin();
} else {
LK.showGameOver();
}
}
// Initialize game
function initGame() {
score = 0;
gameOver = false;
currentQuestion = 0;
// Reset jokers
for (var i = 0; i < jokers.length; i++) {
jokers[i].reset();
}
// Update score text
scoreText.setText("Score: " + score);
// Start with first question
loadQuestion(0);
// Play background music
LK.playMusic('backgroundMusic');
}
// Start the game
initGame(); ===================================================================
--- original.js
+++ change.js
@@ -322,9 +322,9 @@
for (var i = 0; i < 4; i++) {
var button = new QuestionButton(i, "");
if (i === 0) {
// Move button A 500 pixels down and 200 pixels left
- button.position.set(2048 / 2 - 200, 2732 / 2 - 100 + i * BUTTON_SPACING + 500);
+ button.position.set(2048 / 2 - 500, 2732 / 2 - 100 + i * BUTTON_SPACING + 500);
} else {
if (i === 0) {
// Move button A 500 pixels down and 200 pixels left
button.position.set(2048 / 2 - 200, 2732 / 2 - 100 + i * BUTTON_SPACING + 500);