User prompt
Türkçeye çeviriyi otomatik yapma. Aynı ingizce sorularda olduğu gibi onları da kodlarda tek tek yaz. Sen ilk sefer için çevir ben sonra çevirileri kontrol ederim.
User prompt
dil seçim butonlarını 150px aşağı indir
User prompt
at languageScreen background is same startingscreen and sho gameBanner too
User prompt
after press startBtn show a new page called languagePage. This page has tho assets: turkish, english. if you press english, go to the same questions. But if you press turkish go another questions gruop which translate language turkish all the other question
Code edit (1 edits merged)
Please save this source code
User prompt
Kodlardaki tüm paketlerin en altlarına tolkien lore hakkında seviyelerine göre 5er soru ekle. İlk seçenek doğru olsun.
User prompt
Oyun doğru sayısını doğru hesaplamıyor. Correct kısmında kaç soruya doğru cevap verildiğini göstermeli bunu düzelt
User prompt
Eğer oyuncu oyunu 10 saniyeden kısa sürede bitirirse süre bonusunu 4te 1 e düşür
User prompt
Eğer soru 13 kelime veya daha fazlası ise font size ı 4 seviye küçült
User prompt
Eğer soru 12 kelime veya daha fazlası ise font size ı 3 seviye küçült
User prompt
Eğer soru 12 kelime veya daha fazlası ise font size ı 3 yap.
User prompt
Eğer soru 12 kelime veya daha fazlası ise puntoyu daha da küçült
User prompt
Begginingscreen sağ üst köşeye mute seçeneği koy ve tüm sesleri sustur aktif edilirse
User prompt
Ending screen de çalan müzikler sadece bir kez çalsın ve oyun yeniden ending screene gelene kadar sussun
User prompt
Endingscreendeki melodiler sadece 1 kez çalsın
User prompt
Endingscreen de eğer oneStars varsa 1Star melodisi, twoStars varsa 2Stars melodisi, threeStars varsa Victory melodisi çalsın
User prompt
StartBtn basınca start sound çal
User prompt
doğru şıklarda True1 yanlış şıklarda Wrong1 çal
Code edit (8 edits merged)
Please save this source code
User prompt
Restart yapıldığında sorunun başlangıç ekranında gözükmesine bir çözüm bul. Tekrar startBtn a basıldığında da gözüksün
User prompt
oyunda süre 90 saniye olsun
User prompt
eğer soru 9 kelimeden fazlaysa sorunun yazı puntosunu 2 küçült
User prompt
threeStars 66 puan üstü olsun
User prompt
Oyun sonunda çıkan star assetlerine animasyon ekle. Hafifçe büyüyüp küçülme. ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Oyun sonunda çıkan star assetlerine animasyon ekle. Yavaşça sağa sola kayma olabilir. ↪💡 Consider importing and using the following plugins: @upit/tween.v1
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
// Option Button Class
var OptionButton = Container.expand(function () {
var self = Container.call(this);
// Attach button background
var btn = self.attachAsset('optionBtn', {
anchorX: 0.5,
anchorY: 0.5
});
// Attach text
var txt = new Text2('', {
size: 80,
fill: "#fff"
});
txt.anchor.set(0.5, 0.5);
self.addChild(txt);
// Set option text
self.setText = function (str) {
txt.setText(str);
};
// Set index (for event handling)
self.index = -1;
// Enable/disable button
self.setEnabled = function (enabled) {
btn.alpha = enabled ? 1 : 0.5;
self.interactive = enabled;
};
// Flash green/red for feedback
self.flash = function (color, duration) {
tween(btn, {
color: color
}, {
duration: duration,
onFinish: function onFinish() {
btn.color = 0x8B0000;
}
});
};
return self;
});
// Restart Button Class (no text inside)
var RestartButton = Container.expand(function () {
var self = Container.call(this);
var btn = self.attachAsset('restart', {
anchorX: 0.5,
anchorY: 0.5
});
return self;
});
// Start Button Class
var StartButton = Container.expand(function () {
var self = Container.call(this);
var btn = self.attachAsset('startBtn', {
anchorX: 0.5,
anchorY: 0.5
});
return self;
});
// Timer Bar Class
var TimerBar = Container.expand(function () {
var self = Container.call(this);
var bg = self.attachAsset('timerBarBg', {
anchorX: 0.5,
anchorY: 0.5
});
var fg = self.attachAsset('timerBarFg', {
anchorX: 0.5,
anchorY: 0.5
});
fg.y = 0;
self.fg = fg;
self.bg = bg;
// Set progress (0-1)
self.setProgress = function (p) {
if (p < 0) {
p = 0;
}
if (p > 1) {
p = 1;
}
fg.width = 1200 * p;
fg.x = -(1200 * (1 - p)) / 2;
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x181818
});
/****
* Game Code
****/
// 3 packages: Easy, Medium, Hard. Each is an array of {q, options, answer, points}
// --- Quiz Data ---
// Button shape: dark red rectangle for options
// Start button shape: larger dark red rectangle
// Timer bar background
// Timer bar foreground
var easyQuestions = [{
q: "What is the name of Bilbo's home?",
options: ["Bag End", "Rivendell", "Minas Tirith", "Helm's Deep"],
answer: 0,
points: 3
}, {
q: "Who created the Two Trees of Valinor?",
options: ["Yavanna", "Varda", "Nienna", "Melian"],
answer: 0,
points: 3
}, {
q: "What is the name of Tom Bombadil’s wife?",
options: ["Goldberry", "Lobelia Sackville-Baggins", "Melian", "Rose Cotton"],
answer: 0,
points: 3
}, {
q: "Who is Samwise's wife?",
options: ["Rose Cotton", "Lobelia Sackville-Baggins", "Esmeralda Took", "Mrs.Maggot"],
answer: 0,
points: 3
}, {
q: "Who is the shape-shifter that helps Thorin's company near the Carrock?",
options: ["Beorn", "Radagast", "Thranduil", "Gwaihir"],
answer: 0,
points: 3
}, {
q: "What was Khazad-dûm later called after it was abandoned by the Dwarves?",
options: ["Moria", "Erebor", "Gundabad", "Aglarond"],
answer: 0,
points: 3
}, {
q: "Who attempted to reclaim Khazad-dûm and was killed by the Balrog?",
options: ["Balin", "Dáin Ironfoot", "Thorin Oakenshield", "Durin VI"],
answer: 0,
points: 3
}, {
q: "What creatures capture the Dwarves and Bilbo in Mirkwood?",
options: ["Giant spiders", "Trolls", "Goblins", "Wolves"],
answer: 0,
points: 3
}, {
q: "What was Bilbo's mother’s name?",
options: ["Belladonna Took", "Lobelia Sackville-Baggins", "Primula Brandybuck", "Esmeralda Took"],
answer: 0,
points: 3
}, {
q: "Who is the old hobbit who tries to claim Bilbo’s home while he is away?",
options: ["Lobelia Sackville-Baggins", "Ted Sandyman", "Otho Baggins", "Lotho Sackville-Baggins"],
answer: 0,
points: 3
}, {
q: "Who owns the Prancing Pony?",
options: ["Barliman Butterbur", "Odo Proudfoot", "Daddy Twofoot", "Hugo Bracegirdle"],
answer: 0,
points: 3
}, {
q: "Who told Thorin the map and key once belonged to his grandfather, Thrór?",
options: ["Gandalf", "Balin", "Elrond", "Thrain"],
answer: 0,
points: 3
}, {
q: "What was the name of Thorin’s sword, found in the troll-hoard?",
options: ["Orcrist", "Glamdring", "Angrist", "Sting"],
answer: 0,
points: 3
}, {
q: "What gift did Galadriel give to Frodo when he left Lothlórien?",
options: ["A phial of light from Eärendil’s star", "A ring of power", "Elvish rope", "A blade of Westernesse"],
answer: 0,
points: 3
}, {
q: "Which forest is ruled by Treebeard and the Ents?",
options: ["Fangorn", "Mirkwood", "Lothlórien", "Ithilien"],
answer: 0,
points: 3
}, {
q: "Who reforged the sword Narsil into Andúril?",
options: ["Elves of Rivendell", "Dwarves of Erebor", "Men of Gondor", "Galadriel"],
answer: 0,
points: 3
}, {
q: "What creature did Gollum used to be?",
options: ["Hobbit", "Elf", "Dwarf", "Orc"],
answer: 0,
points: 3
}, {
q: "What is the name of Frodo's sword?",
options: ["Sting", "Andúril", "Glamdring", "Orcrist"],
answer: 0,
points: 3
}, {
q: "What were the Silmarils made of?",
options: ["The light of the Two Trees", "Fire of Udûn", "Mithril", "Starlight from Varda"],
answer: 0,
points: 3
}, {
q: "Who forged the One Ring?",
options: ["Sauron", "Saruman", "Elrond", "Gandalf"],
answer: 0,
points: 5
}, {
q: "Which group of Elves followed Fëanor into exile?",
options: ["The Noldor", "The Vanyar", "The Teleri", "The Sindar"],
answer: 0,
points: 5
}, {
q: "Who rules the lands of the Old Forest near the Barrow - downs?",
options: ["Tom Bombadil", "The Barrow-wight", "Farmer Maggot", "The Witch-king"],
answer: 0,
points: 5
}];
var mediumQuestions = [{
q: "What is the name of Aragorn's sword?",
options: ["Andúril", "Sting", "Glamdring", "Orcrist"],
answer: 0,
points: 5
}, {
q: "Which forest is home to Legolas?",
options: ["Mirkwood", "Fangorn", "Lothlórien", "Shire"],
answer: 0,
points: 5
}, {
q: "Which of these creatures did not inhabit the Dead Marshes?",
options: ["Watcher in the Water", "Corpse-candles", "Phantoms", "Mists"],
answer: 0,
points: 5
}, {
q: "Which of these languages was not invented by Tolkien?",
options: ["Klingon", "Quenya", "Sindarin", "Adûnaic"],
answer: 0,
points: 5
}, {
q: "What is the name of the pony that Sam takes on the journey from Bree?",
options: ["Bill", "Tom", "Fatty", "Brownie"],
answer: 0,
points: 5
}, {
q: "What unusual weapon does Merry use to wound the Witch king?",
options: ["A dagger from the Barrow-downs", "Sting", "A Gondorian spear", "A Númenórean sword"],
answer: 0,
points: 5
}, {
q: "What is the name of the river near Beorn’s house?",
options: ["Anduin", "Withywindle", "Bruinen", "Entwash"],
answer: 0,
points: 5
}, {
q: "What was the name of the Dwarven door hidden with Elvish inscription at Moria’s western entrance?",
options: ["Doors of Durin", "Gate of Azanulbizar", "Threshold of Thrain", "Iron Hall Gate"],
answer: 0,
points: 5
}, {
q: "What is the name of the elf who welcomes Thorin’s company in Rivendell?",
options: ["Lindir", "Glorfindel", "Galdor", "Erestor"],
answer: 0,
points: 5
}, {
q: "Which of these was not one of the Three Elven Rings?",
options: ["Tenya", "Nenya", "Vilya", "Narya"],
answer: 0,
points: 5
}, {
q: "Who was the king of Doriath?",
options: ["Thingol", "Fingolfin", "Finarfin", "Finrod"],
answer: 0,
points: 5
}, {
q: "Who was the Lord of the Eagles that rescued Thorin’s company from the Wargs?",
options: ["Gwaihir", "Thorondor", "Landroval", "Carcaroth"],
answer: 0,
points: 5
}, {
q: "Who gave birth to Fëanor?",
options: ["Míriel", "Indis", "Nerdanel", "Galadriel"],
answer: 0,
points: 5
}, {
q: "Which of the Valar created the stars before the awakening of the Elves?",
options: ["Varda", "Yavanna", "Nessa", "Nienna"],
answer: 0,
points: 5
}, {
q: "Who helped Beren on his quest for a Silmaril?",
options: ["Lúthien", "Idril", "Finrod", "Elwing"],
answer: 0,
points: 5
}, {
q: "What was the name of the great spider that devoured the light of the Trees?",
options: ["Ungoliant", "Shelob", "Gorgol", "Thuringwethil"],
answer: 0,
points: 5
}, {
q: "What is the true name of Gandalf?",
options: ["Olórin", "Curunír", "Aiwendil", "Mithrandir"],
answer: 0,
points: 10
}, {
q: "Which Vala created the Dwarves?",
options: ["Aulë", "Manwë", "Ulmo", "Yavanna"],
answer: 0,
points: 10
}, {
q: "What is the name of the inn in Bree?",
options: ["The Prancing Pony", "The Green Dragon", "The Golden Perch", "The Ivy Bush"],
answer: 0,
points: 5
}];
var hardQuestions = [{
q: "Who was the first King of Númenor?",
options: ["Elros", "Isildur", "Ar-Pharazôn", "Tar-Míriel"],
answer: 0,
points: 10
}, {
q: "Who spoke the Doom of Mandos to the Noldor at Losgar?",
options: ["Mandos himself", "Manwë", "Oromë", "Eönwë"],
answer: 0,
points: 10
}, {
q: "Who is the father of Galadriel?",
options: ["Finarfin", "Finwë", "Fëanor", "Fingolfin"],
answer: 0,
points: 10
}, {
q: "Who is the cousin Bilbo nearly fought a duel with over his inheritance?",
options: ["Otho Sackville-Baggins", "Drogo Baggins", "Paladin Took", "Fatty Bolger"],
answer: 0,
points: 10
}, {
q: "What ancient spirit animates the Barrow - wights?",
options: ["Evil spirits sent by the Witch-king", "Shades of Men from the First Age", "Fallen Maiar", "Spirits of slain Númenóreans"],
answer: 0,
points: 10
}, {
q: "What was the name of the hidden city where Tuor was raised in Gondolin?",
options: ["Vinyamar", "Osgiliath", "Nargothrond", "Himring"],
answer: 0,
points: 10
}, {
q: "What was the original name of the Balrog that resided in Khazad-dûm?",
options: ["Durin’s Bane", "Gothmog", "Valaraukar", "Glaurung"],
answer: 0,
points: 10
}, {
q: "Which Maia guided the Sun across the sky after the destruction of the Two Trees?",
options: ["Arien", "Eönwë", "Melian", "Ilmarë"],
answer: 0,
points: 10
}, {
q: "What Silmaril did Beren retrieve, and from whom?",
options: ["A Silmaril from Morgoth’s iron crown", "A Silmaril from Sauron’s tower", "A Silmaril from Thingol’s treasury", "A Silmaril from Maedhros’ hand"],
answer: 0,
points: 10
}, {
q: "What is the name of the valley outside the East-gate of Khazad-dûm where a major battle occurred?",
options: ["Azanulbizar", "Dimrill Dale", "Rhovanion", "Dor-Cúarthol"],
answer: 0,
points: 10
}, {
q: "What was the hidden language created by Rúmil of Tirion?",
options: ["Sarati", "Tengwar", "Quenya", "Sindarin"],
answer: 0,
points: 10
}, {
q: "Which creature did Lúthien enchant to help Beren enter Angband?",
options: ["Carcharoth", "Glaurung", "Ancalagon", "Huan"],
answer: 0,
points: 10
}, {
q: "What is Beorn’s people called, who later defend the forest after the War of the Ring?",
options: ["Beornings", "Woodsfolk", "Wildermen", "Bear-clans"],
answer: 0,
points: 10
}, {
q: "What was the name of the troll that Bilbo tried to pickpocket?",
options: ["William", "Bert", "Tom", "Uglúk"],
answer: 0,
points: 10
}, {
q: "What was the true name of the hill where Finrod built Nargothrond?",
options: ["Taur-en-Faroth", "Amon Ethir", "Amon Rûdh", "Amon Ereb"],
answer: 0,
points: 10
}, {
q: "What mountain chain marked the northern boundary of Beleriand?",
options: ["Ered Wethrin", "Ered Luin", "Ered Engrin", "Ered Gorgoroth"],
answer: 0,
points: 10
}, {
q: "What gift did Finrod Felagund receive from the Dwarves of Belegost?",
options: ["The Nauglamír necklace", "The Axe of Hador", "The Helm of Dragonfire", "The Ring of Barahir"],
answer: 0,
points: 10
}, {
q: "What fortress did Melkor build in the far north of Middle-earth?",
options: ["Angband", "Utumno", "Barad-dûr", "Thangorodrim"],
answer: 0,
points: 10
}, {
q: "What was the name of the river that flowed beside Menegroth, the Thousand Caves?",
options: ["Esgalduin ", "Sirion", "Aros", "Narog"],
answer: 0,
points: 10
}, {
q: "What was the name of the sword that Beleg used, later taken by Túrin?",
options: ["Anglachel", "Gurthang", "Ringil", "Aranrúth"],
answer: 0,
points: 10
}, {
q: "What is the name of the mountain where the One Ring was forged?",
options: ["Orodruin", "Caradhras", "Erebor", "Thangorodrim"],
answer: 0,
points: 10
}];
// Helper to pick n random questions from an array
function pickRandomQuestions(arr, n) {
var copy = arr.slice();
shuffleArray(copy);
var out = [];
for (var i = 0; i < n && i < copy.length; i++) {
out.push(copy[i]);
}
return out;
}
// Select 4 easy, 3 medium, 3 hard for a 10-question game
var selectedEasy = pickRandomQuestions(easyQuestions, 4);
var selectedMedium = pickRandomQuestions(mediumQuestions, 3);
var selectedHard = pickRandomQuestions(hardQuestions, 3);
// Combine for 10-question game: 4 easy, 3 medium, 3 hard
var allQuestions = selectedEasy.concat(selectedMedium, selectedHard);
// --- State Variables ---
var currentQuestion = 0;
var score = 0;
var timeLeft = 60.0; // seconds
var timerInterval = null;
var quizStarted = false;
var optionButtons = [];
var timerBar = null;
var questionText = null;
var scoreText = null;
var startButton = null;
var summaryText = null;
var bonusText = null;
var canAnswer = false;
// --- Utility Functions ---
// Shuffle array in-place (Fisher-Yates)
function shuffleArray(arr) {
for (var i = arr.length - 1; i > 0; i--) {
var j = Math.floor(Math.random() * (i + 1));
var tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
}
// Randomize options for a question, return {options, answerIdx}
function randomizeOptions(q) {
var opts = [];
for (var i = 0; i < 4; i++) {
opts.push({
text: q.options[i],
origIdx: i
});
}
shuffleArray(opts);
var answerIdx = -1;
for (var i = 0; i < 4; i++) {
if (opts[i].origIdx === q.answer) {
answerIdx = i;
break;
}
}
return {
options: [opts[0].text, opts[1].text, opts[2].text, opts[3].text],
answerIdx: answerIdx
};
}
// --- UI Setup ---
// Center positions
var centerX = 2048 / 2;
var centerY = 2732 / 2;
// Question text
questionText = new Text2('', {
size: 100,
fill: "#fff"
});
questionText.anchor.set(0.5, 0.5);
questionText.x = centerX;
questionText.y = 350 + questionText.height / 2;
// Score background asset (bottom center, behind score text)
var scoreBgAsset = LK.getAsset('score', {
anchorX: 0.5,
anchorY: 1.0,
x: centerX,
y: 2732 - 40
});
game.addChild(scoreBgAsset);
// Score text (bottom center, GUI, dramatic font)
scoreText = new Text2('Score: 0', {
size: 140,
fill: "#fff",
font: "'Impact','GillSans-Bold','Arial Black','Papyrus','Georgia','Times New Roman',serif"
});
scoreText.anchor.set(0.5, 1.0);
// Move Score: text 188px up and 9px left from its previous position
scoreText.x = centerX - 9;
scoreText.y = 2732 - 40 - 10 - 188;
game.addChild(scoreText);
// Timer bar (below score)
timerBar = new TimerBar();
timerBar.x = centerX;
timerBar.y = 200;
timerBar.setProgress(1);
game.addChild(timerBar);
// Timer digits (top right, GUI, using harmonious style)
var timerDigits = new Text2('60', {
size: 110,
fill: 0xE2C275,
// goldish, harmonious with LOTR
font: "'Papyrus','Georgia','Times New Roman',serif"
});
timerDigits.anchor.set(1, 0); // right-top
timerDigits.x = 2048 - 60; // 60px from right edge, avoid top left menu
timerDigits.y = 0;
LK.gui.top.addChild(timerDigits);
// Option buttons (4)
var optionYStart = 900;
var optionYGap = 260 + 32; // 32px extra gap between options
for (var i = 0; i < 4; i++) {
var btn = new OptionButton();
btn.x = centerX;
btn.y = optionYStart + i * optionYGap;
btn.index = i;
btn.setEnabled(false);
// Event: tap/click
btn.down = function (idx) {
return function (x, y, obj) {
if (!canAnswer) {
return;
}
handleOptionSelected(idx);
};
}(i);
optionButtons.push(btn);
game.addChild(btn);
}
// Starting screen background (centered, behind start button)
var startingScreenBg = LK.getAsset('startingscreen', {
anchorX: 0.5,
anchorY: 0.5,
x: centerX,
y: centerY
});
game.addChild(startingScreenBg);
// tolkienText asset (centered, moved 1600px down)
var tolkienTextAsset = LK.getAsset('tolkienText', {
anchorX: 0.5,
anchorY: 0.5,
x: centerX,
y: centerY - 350 - 100 - 60 + 1600 // moved 1600px down
});
game.addChild(tolkienTextAsset);
// Game banner asset (centered, above start button)
var gameBannerAsset = LK.getAsset('gameBanner', {
anchorX: 0.5,
anchorY: 0.5,
x: centerX,
y: centerY - 350 - 100 - 280 // moved 80px further up
});
game.addChild(gameBannerAsset);
// Start button (centered, moved up 214px from previous position)
startButton = new StartButton();
startButton.x = centerX;
startButton.y = centerY + 440 + 200 - 308; // moved 94px further up (214+94=308)
startButton.scaleX = 1;
startButton.scaleY = 1;
startButton.down = function (x, y, obj) {
if (!quizStarted) {
LK.getSound('Start').play();
startQuiz();
}
};
game.addChild(startButton);
// Animate startBtn: pulse scale up and down forever
function animateStartBtn() {
tween(startButton, {
scaleX: 1.12,
scaleY: 1.12
}, {
duration: 600,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(startButton, {
scaleX: 1,
scaleY: 1
}, {
duration: 600,
easing: tween.easeInOut,
onFinish: animateStartBtn
});
}
});
}
animateStartBtn();
// Summary text (hidden at start)
summaryText = new Text2('', {
size: 110,
fill: "#fff"
});
summaryText.anchor.set(0.5, 0.5);
summaryText.x = centerX;
summaryText.y = centerY - 200;
summaryText.visible = false;
game.addChild(summaryText);
// Bonus text (hidden at start)
bonusText = new Text2('', {
size: 80,
fill: 0x83DE44
});
bonusText.anchor.set(0.5, 0.5);
bonusText.x = centerX;
bonusText.y = centerY + 100;
bonusText.visible = false;
game.addChild(bonusText);
// --- Feedback Assets ---
var trueAsset = LK.getAsset('true', {
anchorX: 0.5,
anchorY: 1.0,
x: centerX - 500,
y: 2732 - 40 + 60
});
var wrongAsset = LK.getAsset('wrong', {
anchorX: 0.5,
anchorY: 1.0,
x: centerX - 500,
y: 2732 - 40 + 60
});
var trueAsset2 = LK.getAsset('true2', {
anchorX: 0.5,
anchorY: 1.0,
x: centerX - 500,
y: 2732 - 40 + 60
});
var wrongAsset2 = LK.getAsset('wrong2', {
anchorX: 0.5,
anchorY: 1.0,
x: centerX - 500,
y: 2732 - 40 + 60
});
trueAsset.visible = false;
wrongAsset.visible = false;
trueAsset2.visible = false;
wrongAsset2.visible = false;
// --- Feedback Text Assets ---
var truetextAsset = LK.getAsset('truetext', {
anchorX: 0.5,
anchorY: 1.0,
x: centerX + 490,
y: 2732 - 300
});
var wrongtextAsset = LK.getAsset('wrongtext', {
anchorX: 0.5,
anchorY: 1.0,
x: centerX + 490,
y: 2732 - 300
});
truetextAsset.visible = false;
wrongtextAsset.visible = false;
game.addChild(trueAsset);
game.addChild(wrongAsset);
game.addChild(trueAsset2);
game.addChild(wrongAsset2);
game.addChild(truetextAsset);
game.addChild(wrongtextAsset);
// --- Game Logic ---
function startQuiz() {
quizStarted = true;
score = 0;
timeLeft = 60.0;
currentQuestion = 0;
scoreText.setText('Score: 0');
timerBar.setProgress(1);
timerDigits.setText("60");
summaryText.visible = false;
bonusText.visible = false;
startButton.visible = false;
startingScreenBg.visible = false;
gameBannerAsset.visible = false;
tolkienTextAsset.visible = false;
for (var i = 0; i < 4; i++) {
optionButtons[i].setEnabled(false);
optionButtons[i].visible = true;
}
showQuestion(currentQuestion);
canAnswer = true;
// Start timer
if (timerInterval) {
LK.clearInterval(timerInterval);
}
timerInterval = LK.setInterval(function () {
if (!quizStarted) {
return;
}
timeLeft -= 0.1;
if (timeLeft < 0) {
timeLeft = 0;
}
timerBar.setProgress(timeLeft / 60.0);
// Update timerDigits to show remaining time as integer seconds, always 2 digits
var shownTime = Math.ceil(timeLeft);
if (shownTime < 0) {
shownTime = 0;
}
if (shownTime > 99) {
shownTime = 99;
}
timerDigits.setText((shownTime < 10 ? "0" : "") + shownTime);
if (timeLeft <= 0) {
endQuiz();
}
}, 100);
}
function showQuestion(idx) {
if (idx >= allQuestions.length) {
endQuiz();
return;
}
var q = allQuestions[idx];
var randomized = randomizeOptions(q);
// Split question into two lines if more than 7 words
var qText = q.q;
var words = qText.split(' ');
if (words.length > 7) {
var mid = Math.ceil(words.length / 2);
var firstLine = words.slice(0, mid).join(' ');
var secondLine = words.slice(mid).join(' ');
qText = firstLine + '\n' + secondLine;
}
// Reduce font size by 2 if question has more than 9 words
if (words.length > 9) {
questionText.setStyle({
size: 98
});
} else {
questionText.setStyle({
size: 100
});
}
questionText.setText(qText);
if (!game.children.includes(questionText)) {
game.addChild(questionText);
}
for (var i = 0; i < 4; i++) {
optionButtons[i].setText(randomized.options[i]);
optionButtons[i].setEnabled(true);
optionButtons[i].visible = true;
optionButtons[i].correct = i === randomized.answerIdx;
}
canAnswer = true;
}
function handleOptionSelected(idx) {
if (!canAnswer) {
return;
}
canAnswer = false;
var q = allQuestions[currentQuestion];
var correctIdx = -1;
for (var i = 0; i < 4; i++) {
if (optionButtons[i].correct) {
correctIdx = i;
break;
}
}
// Feedback: flash green/red
// Pick which feedback asset to show
var showTrue = Math.random() < 0.5;
var showWrong = Math.random() < 0.5;
if (optionButtons[idx].correct) {
// Play correct sound
LK.getSound('True1').play();
optionButtons[idx].flash(0x83de44, 300);
score += q.points;
scoreText.setText('Score: ' + score);
if (showTrue) {
trueAsset.visible = true;
trueAsset2.visible = false;
} else {
trueAsset.visible = false;
trueAsset2.visible = true;
}
wrongAsset.visible = false;
wrongAsset2.visible = false;
// Show truetext asset
truetextAsset.visible = true;
wrongtextAsset.visible = false;
} else {
// Play wrong sound
LK.getSound('Wrong1').play();
optionButtons[idx].flash(0xff0000, 300);
optionButtons[correctIdx].flash(0x83de44, 300);
trueAsset.visible = false;
trueAsset2.visible = false;
if (showWrong) {
wrongAsset.visible = true;
wrongAsset2.visible = false;
} else {
wrongAsset.visible = false;
wrongAsset2.visible = true;
}
// Show wrongtext asset
truetextAsset.visible = false;
wrongtextAsset.visible = true;
}
// Hide feedback after short delay
LK.setTimeout(function () {
trueAsset.visible = false;
wrongAsset.visible = false;
trueAsset2.visible = false;
wrongAsset2.visible = false;
truetextAsset.visible = false;
wrongtextAsset.visible = false;
}, 500);
// Disable all buttons
for (var i = 0; i < 4; i++) {
optionButtons[i].setEnabled(false);
}
// Next question after short delay
LK.setTimeout(function () {
currentQuestion++;
if (currentQuestion < allQuestions.length && timeLeft > 0) {
showQuestion(currentQuestion);
} else {
endQuiz();
}
}, 600);
}
function endQuiz() {
quizStarted = false;
canAnswer = false;
if (timerInterval) {
LK.clearInterval(timerInterval);
timerInterval = null;
}
timerDigits.setText("00");
// Hide question/options
questionText.setText('');
for (var i = 0; i < 4; i++) {
optionButtons[i].setEnabled(false);
optionButtons[i].visible = false;
}
// Calculate number of correct answers
var correctCount = 0;
var tempScore = score;
for (var i = 0; i < allQuestions.length; i++) {
if (tempScore >= allQuestions[i].points) {
correctCount++;
tempScore -= allQuestions[i].points;
}
}
// Calculate bonus: 1 point per 2 seconds left (rounded down)
var bonus = Math.floor(timeLeft / 2);
// If 3 or fewer correct in 10 questions, only 1/4 bonus
if (allQuestions.length === 10 && correctCount <= 3) {
bonus = Math.floor(bonus / 4);
}
var total = score + bonus;
// Hide quiz UI
questionText.visible = false;
scoreText.visible = false;
timerBar.visible = false;
timerDigits.visible = false;
// Show ending screen background and gameBanner
startingScreenBg.visible = true;
startingScreenBg.x = centerX;
startingScreenBg.y = centerY;
startingScreenBg.anchorX = 0.5;
startingScreenBg.anchorY = 0.5;
gameBannerAsset.visible = true;
gameBannerAsset.x = centerX;
gameBannerAsset.y = centerY - 530; // same as starting screen
// Hide tolkienText (not on ending screen)
tolkienTextAsset.visible = false;
// Show final score in bold, large, centered
if (!game.endingScoreText) {
game.endingScoreText = new Text2('', {
size: 160,
fill: 0xFFD700,
// gold
font: "'Impact','GillSans-Bold','Arial Black','Papyrus','Georgia','Times New Roman',serif",
fontWeight: "bold"
});
game.endingScoreText.anchor.set(0.5, 0.5);
game.addChild(game.endingScoreText);
}
if (!game.endingScorePoints) {
game.endingScorePoints = new Text2('', {
size: 260,
fill: 0xFFD700,
// gold
font: "'Impact','GillSans-Bold','Arial Black','Papyrus','Georgia','Times New Roman',serif",
fontWeight: "bold"
});
game.endingScorePoints.anchor.set(0.5, 0.5);
game.addChild(game.endingScorePoints);
}
if (!game.endingScoreDetails) {
game.endingScoreDetails = new Text2('', {
size: 80,
fill: 0x1B7F2A,
// bold green
font: "'GillSans-Bold','Arial Black','Papyrus','Georgia','Times New Roman',serif",
fontWeight: "bold"
});
game.endingScoreDetails.anchor.set(0.5, 0.5);
game.addChild(game.endingScoreDetails);
}
game.endingScoreText.setText("FINAL SCORE:");
game.endingScoreText.x = centerX;
game.endingScoreText.y = centerY + 220; // 40px further down (180+40=220)
game.endingScoreText.visible = true;
game.endingScoreText.setStyle({
size: 110
}); // reduce size
game.endingScorePoints.setText(total + "");
game.endingScorePoints.x = centerX;
game.endingScorePoints.y = centerY + 440; // 30px further down (410+30=440)
game.endingScorePoints.visible = true;
game.endingScorePoints.setStyle({
size: 300
}); // increase font size
game.endingScoreDetails.setText("Correct: " + correctCount + " Time Bonus: " + bonus);
game.endingScoreDetails.x = centerX;
game.endingScoreDetails.y = centerY + 700; // 50px further down (650+50=700)
game.endingScoreDetails.visible = true;
game.endingScoreDetails.setStyle({
fill: 0x14551a
}); // much darker green
// Hide summary and bonus text (not used in new ending screen)
summaryText.visible = false;
bonusText.visible = false;
// Show star asset at the bottom of ending screen based on total score
var starAssetId = '';
var starMusicId = '';
if (total < 31) {
starAssetId = 'oneStars';
starMusicId = '1Star';
} else if (total <= 66) {
starAssetId = 'twoStars';
starMusicId = '2Stars';
} else {
starAssetId = 'threeStars';
starMusicId = 'Victory';
}
// Play the corresponding star melody
LK.playMusic(starMusicId);
if (!game.endingStarsAsset) {
game.endingStarsAsset = LK.getAsset(starAssetId, {
anchorX: 0.5,
anchorY: 1.0,
x: centerX,
y: 2732 - 40 // bottom center, above the very bottom
});
game.addChild(game.endingStarsAsset);
} else {
// Remove previous if any, and create new
game.removeChild(game.endingStarsAsset);
game.endingStarsAsset = LK.getAsset(starAssetId, {
anchorX: 0.5,
anchorY: 1.0,
x: centerX,
y: 2732 - 40
});
game.addChild(game.endingStarsAsset);
}
game.endingStarsAsset.visible = true;
// Animate ending screen star asset: pulse scale up and down forever
function animateEndingStarsAsset() {
if (!game.endingStarsAsset || !game.endingStarsAsset.visible) {
return;
}
tween(game.endingStarsAsset, {
scaleX: 1.12,
scaleY: 1.12
}, {
duration: 600,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(game.endingStarsAsset, {
scaleX: 1,
scaleY: 1
}, {
duration: 600,
easing: tween.easeInOut,
onFinish: animateEndingStarsAsset
});
}
});
}
animateEndingStarsAsset();
// Show ending screen for 8 seconds, then show a custom replay dialog and restore UI
LK.setTimeout(function () {
if (game.endingScoreText) {
game.endingScoreText.visible = false;
}
if (game.endingScorePoints) {
game.endingScorePoints.visible = false;
}
if (game.endingScoreDetails) {
game.endingScoreDetails.visible = false;
}
if (game.endingStarsAsset) {
game.endingStarsAsset.visible = false;
}
summaryText.visible = false;
bonusText.visible = false;
// Keep scoreText visible and up-to-date
scoreText.setText('Score: ' + score);
scoreText.visible = true;
// Show correct count and bonus as a new Text2 (or reuse if already exists)
if (!game.replayCorrectText) {
game.replayCorrectText = new Text2('', {
size: 90,
fill: 0x1B7F2A,
font: "'GillSans-Bold','Arial Black','Papyrus','Georgia','Times New Roman',serif",
fontWeight: "bold"
});
game.replayCorrectText.anchor.set(0.5, 0.5);
game.addChild(game.replayCorrectText);
}
game.replayCorrectText.setText("Correct: " + correctCount + " Time Bonus: " + bonus);
game.replayCorrectText.x = centerX;
game.replayCorrectText.y = centerY + 260;
game.replayCorrectText.visible = true;
timerBar.visible = true;
timerDigits.visible = true;
questionText.visible = true;
// Remove any previous replay dialog
if (game.replayDialogBg) {
game.removeChild(game.replayDialogBg);
game.replayDialogBg = null;
}
if (game.replayDialogText) {
game.removeChild(game.replayDialogText);
game.replayDialogText = null;
}
if (game.replayDialogBtn) {
game.removeChild(game.replayDialogBtn);
game.replayDialogBtn = null;
}
// Create a semi-transparent dark background
var dialogBg = LK.getAsset('startingscreen', {
anchorX: 0.5,
anchorY: 0.5,
x: centerX,
y: centerY,
width: 1200,
height: 900,
color: 0x000000
});
dialogBg.alpha = 0.85;
game.addChild(dialogBg);
game.replayDialogBg = dialogBg;
// No dialog text for replay dialog
game.replayDialogText = null;
// Create replay button (no text inside)
var replayBtn = new RestartButton();
replayBtn.x = centerX;
replayBtn.y = centerY + 120;
replayBtn.scaleX = 0.7;
replayBtn.scaleY = 0.7;
game.addChild(replayBtn);
game.replayDialogBtn = replayBtn;
// --- Show star asset and score under the restart dialog ---
// Show the same star asset as in ending screen, but for replay dialog
if (game.replayStarsAsset) {
game.removeChild(game.replayStarsAsset);
game.replayStarsAsset = null;
}
game.replayStarsAsset = LK.getAsset(starAssetId, {
anchorX: 0.5,
anchorY: 1.0,
x: centerX,
y: centerY + 820 // 400px further down than before
});
game.addChild(game.replayStarsAsset);
game.replayStarsAsset.visible = true;
// Animate replay dialog star asset: pulse scale up and down forever
function animateReplayStarsAsset() {
if (!game.replayStarsAsset || !game.replayStarsAsset.visible) {
return;
}
tween(game.replayStarsAsset, {
scaleX: 1.12,
scaleY: 1.12
}, {
duration: 600,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(game.replayStarsAsset, {
scaleX: 1,
scaleY: 1
}, {
duration: 600,
easing: tween.easeInOut,
onFinish: animateReplayStarsAsset
});
}
});
}
animateReplayStarsAsset();
// Show the final score under the stars in the replay dialog
if (!game.replayScoreText) {
game.replayScoreText = new Text2('', {
size: 120,
fill: 0xFFD700,
font: "'Impact','GillSans-Bold','Arial Black','Papyrus','Georgia','Times New Roman',serif",
fontWeight: "bold"
});
game.replayScoreText.anchor.set(0.5, 0.5);
game.addChild(game.replayScoreText);
}
game.replayScoreText.setText("Score: " + total);
game.replayScoreText.x = centerX;
game.replayScoreText.y = centerY + 940; // 400px further down than before
game.replayScoreText.visible = true;
// Animate replay button
function animateReplayBtn() {
tween(replayBtn, {
scaleX: 0.8,
scaleY: 0.8
}, {
duration: 500,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(replayBtn, {
scaleX: 0.7,
scaleY: 0.7
}, {
duration: 500,
easing: tween.easeInOut,
onFinish: animateReplayBtn
});
}
});
}
animateReplayBtn();
// Replay button event
replayBtn.down = function (x, y, obj) {
// Remove dialog
if (game.replayDialogBg) {
game.removeChild(game.replayDialogBg);
game.replayDialogBg = null;
}
if (game.replayDialogText) {
game.removeChild(game.replayDialogText);
game.replayDialogText = null;
}
if (game.replayDialogBtn) {
game.removeChild(game.replayDialogBtn);
game.replayDialogBtn = null;
}
// Hide correct/bonus text on replay
if (game.replayCorrectText) {
game.replayCorrectText.visible = false;
}
if (game.endingStarsAsset) {
game.endingStarsAsset.visible = false;
}
// Hide replay dialog star asset and score text
if (game.replayStarsAsset) {
game.replayStarsAsset.visible = false;
}
if (game.replayScoreText) {
game.replayScoreText.visible = false;
}
quizStarted = false;
canAnswer = false;
score = 0;
timeLeft = 60.0;
currentQuestion = 0;
// Re-pick questions for new game (4 easy, 3 medium, 3 hard)
selectedEasy = pickRandomQuestions(easyQuestions, 4);
selectedMedium = pickRandomQuestions(mediumQuestions, 3);
selectedHard = pickRandomQuestions(hardQuestions, 3);
allQuestions = selectedEasy.concat(selectedMedium, selectedHard);
scoreText.setText('Score: 0');
timerBar.setProgress(1);
timerDigits.setText("60");
summaryText.visible = false;
bonusText.visible = false;
startButton.visible = true;
startingScreenBg.visible = true;
gameBannerAsset.visible = true;
tolkienTextAsset.visible = true;
questionText.visible = false;
for (var i = 0; i < 4; i++) {
optionButtons[i].setEnabled(false);
optionButtons[i].visible = true;
}
// Ensure questionText and options are visible and show the first question
questionText.visible = true;
showQuestion(0);
canAnswer = true;
};
}, 8000);
}
// --- Game Update ---
game.update = function () {
// No per-frame logic needed; timer handled by interval
};
// --- Touch Handling ---
// No drag/move needed; all handled by button events
// --- End of File --- ===================================================================
--- original.js
+++ change.js
@@ -100,14 +100,14 @@
/****
* Game Code
****/
-// Timer bar foreground
-// Timer bar background
-// Start button shape: larger dark red rectangle
-// Button shape: dark red rectangle for options
-// --- Quiz Data ---
// 3 packages: Easy, Medium, Hard. Each is an array of {q, options, answer, points}
+// --- Quiz Data ---
+// Button shape: dark red rectangle for options
+// Start button shape: larger dark red rectangle
+// Timer bar background
+// Timer bar foreground
var easyQuestions = [{
q: "What is the name of Bilbo's home?",
options: ["Bag End", "Rivendell", "Minas Tirith", "Helm's Deep"],
answer: 0,
@@ -946,15 +946,21 @@
summaryText.visible = false;
bonusText.visible = false;
// Show star asset at the bottom of ending screen based on total score
var starAssetId = '';
+ var starMusicId = '';
if (total < 31) {
starAssetId = 'oneStars';
+ starMusicId = '1Star';
} else if (total <= 66) {
starAssetId = 'twoStars';
+ starMusicId = '2Stars';
} else {
starAssetId = 'threeStars';
+ starMusicId = 'Victory';
}
+ // Play the corresponding star melody
+ LK.playMusic(starMusicId);
if (!game.endingStarsAsset) {
game.endingStarsAsset = LK.getAsset(starAssetId, {
anchorX: 0.5,
anchorY: 1.0,
Make him smile
a LOTR style button with elegant and green leaves. In-Game asset. 2d. High contrast. No shadows
write "TAP to START" on it with LOTR style
tonu daha yapraksı ve dokulu olsun
Kare ama köşeleri oval bir banner. LOTR tarzı. Yeşil ve altın sarısı ağırlıklı. İçinde "Myths of the West" yazıyor.
write: "This is an unofficial, non-commercial quiz game created as a tribute to the epic legends imagined by J.R.R. Tolkien." with golden color and LOTR style. 1400x200. In-Game asset. 2d. High contrast. No shadows
Golden ornoment LOTR style. In-Game asset. 2d. High contrast. No shadows
Same but write "RESTART"
Same stars but make it two.
delete blacks
Write "MAGNIFICENT" bottom of the stars with LOTR style
Arka planı sil şeffaf olsun
Tamamen aynı sanatsal formda ama parmağını aşağı indirip üzülen GOLLUM olacak
Tamamen aynı sanatsal formda ama parmağını aşağı indirip üzülen GRIMA WORMTHONG olacak
Tamamen aynı sanatsal formda ama parmağını yukarı kaldırıp gülen ARAGORN olacak
Tamamen aynı sanatsal formda ama parmağını aşağı indirip üzülen SARUMAN olacak
Make a mute button in lotr style
Çerçeve içinde "5'te 5 BONUS" yazsın. LOTR temalı olacak. Dikkat çekici bir popup bu.. In-Game asset. 2d. High contrast. No shadows
Her şey aynı sadece yazıyı düzenle; "5 out of 5 BONUS"
tamamen aynı sadece rengi biraz daha soluk gri olacak
tamamen aynı ama yeşilin tonunu daha LOTR dünyasına uydur. ve çizgileri koyu kahverengi yap
Tamamen aynı resim olacak ama daha gerçekçi bir hale getir
Tamamen aynı ama yatay olacak
arka planı ve pençesindeki yüzüğü sil