User prompt
Je veux personnalisé le fond du jeu avec mon propre asset
User prompt
Fait en sorte que la montée en niveau du joueur et la collecte d'argent se fait fur a mesure que le joueur collecte des arbres, a chaque arbre collecter, le joueur gagne entre 50 et 100 euros d'argent (virtuellement dans le jeu biensur), quand le joueur cumule 500 euros, il monte au niveau 2, Et à chaque nouveau niveau le nombre d'argents requis pour monter au niveau suivant double par rapport au niveau précédent
User prompt
Ajoute 50 nouvelles questions débiles!
User prompt
Définit les bonnes réponses dans le code pour que le joueur gagne de l'argent et des niveaux en choisissant la bonne réponse
User prompt
Fait en sorte que le texte qui affiche l'argent et niveau du joueur se modifie quand le joueur gagne de l'argent (en répondant correctement aux questions débiles)
User prompt
Définit les bonnes réponses aux questions débiles, et fait en sorte que le joueur gagne de l'argent et des niveaux en répondant correctement aux questions débiles
User prompt
La musique ne se joue ps règle ce problème
User prompt
Ajoute une musique de fond en boucle au jeu
User prompt
Ajoute une musique de fond en boucle au jeu et l'assets correspondant
User prompt
Ajoute une musique de fond en boucle au jeu
User prompt
Fait en sorte que chacune question débile est une bonne réponse, et que si le joueur répond correctement avec la bonne réponse, il gagne de l'argent dans le jeu pour monter en niveau
User prompt
Ajoute la fonctionnalité qui permet lorsque le joueur a répondue correctement a la question débile, de gagner de l'argent dans le jeu pour monter en niveau
Initial prompt
Ajoute la fonctionnalité qui permet lorsque le joueur a répondue correctement a la question débile, de gagner de l'argent dans le jeu pour monter en niveau
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ // Player class var Player = Container.expand(function () { var self = Container.call(this); var playerAsset = self.attachAsset('player', { anchorX: 0.5, anchorY: 1 }); // For jump animation self.isJumping = false; return self; }); // Tree class var Tree = Container.expand(function () { var self = Container.call(this); var treeAsset = self.attachAsset('tree', { anchorX: 0.5, anchorY: 1 }); // Add a money icon on the tree var moneyAsset = self.attachAsset('money', { anchorX: 0.5, anchorY: 0.5, y: -treeAsset.height * 0.7 }); // Used to know if this tree has been collected self.collected = false; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x1e5631 // deep forest green }); /**** * Game Code ****/ /**** * Questions ****/ // Player asset: blue box // Money asset: yellow box // Tree asset: green ellipse // Game constants var QUESTIONS = [{ q: "Combien de bananes faut-il pour faire un vélo ?", a: ["Aucune, c'est absurde !", "42", "3, si elles sont très grandes"], c: 0 }, { q: "Quel animal est le plus susceptible de devenir président ?", a: ["Le lama", "Le poisson rouge", "Le pigeon voyageur"], c: 2 }, { q: "Si un arbre tombe dans une forêt et que personne ne l’entend, fait-il du bruit ?", a: ["Oui, mais il chuchote", "Non, il chante", "Seulement les jours pairs"], c: 0 }, { q: "Quelle est la couleur du cheval vert d’Henri IV ?", a: ["Vert", "Bleu", "Invisible"], c: 0 }, { q: "Combien de lunes autour de la Terre un mardi ?", a: ["Une", "Trois", "Aucune, elles sont en vacances"], c: 0 }, { q: "Quel est le cri du billet de banque ?", a: ["Chling !", "Miaou", "Bip bip"], c: 0 }, { q: "Si tu plantes une pièce de 1€, que poussera-t-il ?", a: ["Un arbre à billets", "Un distributeur", "Un cactus doré"], c: 0 }, { q: "Quel est le sport préféré des arbres ?", a: ["Le tronc-volant", "Le basket-feuille", "Le branché-ball"], c: 1 }, { q: "Combien de temps met un escargot pour faire le tour d’un arbre ?", a: ["Le temps qu’il veut", "Jamais, il s’arrête pour dormir", "42 jours"], c: 0 }, { q: "Quel est le prénom du plus riche des arbres ?", a: ["Billet", "Feuille", "Racine"], c: 1 }]; var BOARD_WIDTH = 2048; var BOARD_HEIGHT = 2732; var GROUND_Y = 2300; // y position of the ground var TREE_MIN_X = 200; var TREE_MAX_X = BOARD_WIDTH - 200; var TREE_MIN_Y = 800; var TREE_MAX_Y = GROUND_Y - 200; var TREE_COUNT = 5; // Game state var trees = []; var player = null; var score = 0; var level = 1; var moneyNeeded = 500; var questionIndex = 0; var currentTree = null; var isQuestionActive = false; var questionPanel = null; var answerButtons = []; var collectedMoney = 0; var jumpTarget = null; var canJump = true; // GUI var scoreTxt = new Text2('0 €', { size: 120, fill: 0xFFF700 }); scoreTxt.anchor.set(0.5, 0); LK.gui.top.addChild(scoreTxt); var levelTxt = new Text2('Niveau 1', { size: 80, fill: 0xFFFFFF }); levelTxt.anchor.set(0.5, 0); LK.gui.top.addChild(levelTxt); levelTxt.y = 130; // Helper: random int function randInt(min, max) { return min + Math.floor(Math.random() * (max - min + 1)); } // Helper: pick random question (avoid repeats in a session) function pickRandomQuestions(n) { var used = {}; var arr = []; while (arr.length < n) { var idx = randInt(0, QUESTIONS.length - 1); if (!used[idx]) { arr.push(QUESTIONS[idx]); used[idx] = true; } } return arr; } // Place trees randomly function spawnTrees() { // Remove old trees for (var i = 0; i < trees.length; i++) { trees[i].destroy(); } trees = []; for (var i = 0; i < TREE_COUNT; i++) { var t = new Tree(); // Random position, not too close to edges or each other var tries = 0; var ok = false; while (!ok && tries < 20) { t.x = randInt(TREE_MIN_X, TREE_MAX_X); t.y = randInt(TREE_MIN_Y, TREE_MAX_Y); ok = true; for (var j = 0; j < trees.length; j++) { var dx = t.x - trees[j].x; var dy = t.y - trees[j].y; var dist = Math.sqrt(dx * dx + dy * dy); if (dist < 400) ok = false; } tries++; } trees.push(t); game.addChild(t); } } // Place player at a random tree function placePlayer() { var idx = randInt(0, trees.length - 1); var t = trees[idx]; player.x = t.x; player.y = t.y - 10; } // Find nearest tree to (x, y) not already collected function findNearestTree(x, y) { var minDist = 99999; var nearest = null; for (var i = 0; i < trees.length; i++) { if (trees[i].collected) continue; var dx = trees[i].x - x; var dy = trees[i].y - y; var dist = Math.sqrt(dx * dx + dy * dy); if (dist < minDist) { minDist = dist; nearest = trees[i]; } } return nearest; } // Show question panel function showQuestions(tree, onFinish) { isQuestionActive = true; questionPanel = new Container(); // Panel background var panelBg = LK.getAsset('tree', { width: 1200, height: 900, color: 0x222222, anchorX: 0.5, anchorY: 0.5 }); panelBg.alpha = 0.95; questionPanel.addChild(panelBg); questionPanel.x = BOARD_WIDTH / 2; questionPanel.y = BOARD_HEIGHT / 2; // Pick 3 random questions var qs = pickRandomQuestions(3); // Ensure each question has only one correct answer (c always 0, and a[0] is the correct one) for (var i = 0; i < qs.length; i++) { if (qs[i].c !== 0) { // Swap correct answer to first position var correctIdx = qs[i].c; var tmp = qs[i].a[0]; qs[i].a[0] = qs[i].a[correctIdx]; qs[i].a[correctIdx] = tmp; qs[i].c = 0; } } questionIndex = 0; var correctCount = 0; var moneyWon = 0; // Question text var qTxt = new Text2('', { size: 70, fill: "#fff" }); qTxt.anchor.set(0.5, 0); qTxt.y = -350; questionPanel.addChild(qTxt); // Answer buttons answerButtons = []; for (var i = 0; i < 3; i++) { var btn = new Container(); var btnBg = LK.getAsset('money', { width: 900, height: 120, color: 0x3cb371, anchorX: 0.5, anchorY: 0.5 }); btn.addChild(btnBg); var btnTxt = new Text2('', { size: 55, fill: "#222" }); btnTxt.anchor.set(0.5, 0.5); btn.addChild(btnTxt); btn.y = -100 + i * 180; btn.buttonIndex = i; btn.down = function (x, y, obj) { if (!isQuestionActive) return; var idx = obj.buttonIndex; var q = qs[questionIndex]; if (idx === q.c) { correctCount++; // Give money for correct answer var moneyForThis = randInt(50, 100); score += moneyForThis; LK.setScore(score); scoreTxt.setText(score + " €"); // Animate button green if (obj.children && obj.children[0]) { tween(obj.children[0], { tint: 0x83de44 }, { duration: 200, onFinish: function onFinish() { if (obj.children && obj.children[0]) { tween(obj.children[0], { tint: 0x3cb371 }, { duration: 200 }); } } }); } // Animate money gain var moneyAnim = LK.getAsset('money', { width: 200, height: 100, color: 0xffe066, anchorX: 0.5, anchorY: 0.5 }); moneyAnim.x = 0; moneyAnim.y = 250; questionPanel.addChild(moneyAnim); var moneyText = new Text2("+" + moneyForThis + " €", { size: 70, fill: "#222" }); moneyText.anchor.set(0.5, 0.5); moneyAnim.addChild(moneyText); tween(moneyAnim, { y: 100, alpha: 0 }, { duration: 900, onFinish: function onFinish() { moneyAnim.destroy(); } }); // Check for level up after awarding money checkLevelUp(); } else { // Animate button red if (obj.children && obj.children[0]) { tween(obj.children[0], { tint: 0xd83318 }, { duration: 200, onFinish: function onFinish() { if (obj.children && obj.children[0]) { tween(obj.children[0], { tint: 0x3cb371 }, { duration: 200 }); } } }); } } // Next question or finish LK.setTimeout(function () { questionIndex++; if (questionIndex < 3) { setQuestion(); } else { // Done: reward if at least 1 correct if (correctCount > 0) { moneyWon = randInt(50, 100) * correctCount; collectedMoney = moneyWon; score += moneyWon; LK.setScore(score); scoreTxt.setText(score + " €"); // Animate money var moneyAnim = LK.getAsset('money', { width: 200, height: 100, color: 0xffe066, anchorX: 0.5, anchorY: 0.5 }); moneyAnim.x = 0; moneyAnim.y = 250; questionPanel.addChild(moneyAnim); var moneyText = new Text2("+" + moneyWon + " €", { size: 70, fill: "#222" }); moneyText.anchor.set(0.5, 0.5); moneyAnim.addChild(moneyText); tween(moneyAnim, { y: 100, alpha: 0 }, { duration: 900, onFinish: function onFinish() { moneyAnim.destroy(); finishPanel(); } }); // Check for level up after awarding money checkLevelUp(); } else { finishPanel(); } } }, 400); }; answerButtons.push(btn); questionPanel.addChild(btn); } // Set question/answers function setQuestion() { var q = qs[questionIndex]; qTxt.setText(q.q); if (qTxt && typeof qTxt.setStyle === "function") { qTxt.setStyle({ fill: 0xD83318 }); // rouge vif pour la question } for (var i = 0; i < 3; i++) { answerButtons[i].children[1].setText(q.a[i]); if (answerButtons[i].children[1] && typeof answerButtons[i].children[1].setStyle === "function") { answerButtons[i].children[1].setStyle({ fill: 0xD83318 }); // rouge vif pour les réponses } } } // Remove panel and call onFinish function finishPanel() { isQuestionActive = false; if (questionPanel) { questionPanel.destroy(); questionPanel = null; } answerButtons = []; if (onFinish) onFinish(correctCount > 0, collectedMoney); } setQuestion(); game.addChild(questionPanel); } // Level up logic function checkLevelUp() { if (score >= moneyNeeded) { level++; moneyNeeded *= 2; levelTxt.setText("Niveau " + level); // Flash effect LK.effects.flashScreen(0x83de44, 800); // Respawn trees, reset player spawnTrees(); placePlayer(); } } // Initialize game function startGame() { score = 0; level = 1; moneyNeeded = 500; scoreTxt.setText("0 €"); levelTxt.setText("Niveau 1"); spawnTrees(); if (player) player.destroy(); player = new Player(); game.addChild(player); placePlayer(); canJump = true; isQuestionActive = false; if (questionPanel) { questionPanel.destroy(); questionPanel = null; } } // Handle tap: jump to nearest uncollected tree game.down = function (x, y, obj) { if (isQuestionActive || !canJump) return; // Find nearest uncollected tree not at current position var nearest = null; var minDist = 99999; for (var i = 0; i < trees.length; i++) { if (trees[i].collected) continue; var dx = trees[i].x - player.x; var dy = trees[i].y - player.y; var dist = Math.sqrt(dx * dx + dy * dy); if (dist > 50 && dist < minDist) { minDist = dist; nearest = trees[i]; } } if (!nearest) return; canJump = false; player.isJumping = true; jumpTarget = { x: nearest.x, y: nearest.y - 10 }; // Animate jump var startY = player.y; var midY = startY - 180; tween(player, { y: midY }, { duration: 180, easing: tween.easeOut, onFinish: function onFinish() { tween(player, { y: jumpTarget.y }, { duration: 180, easing: tween.easeIn, onFinish: function onFinish() { player.x = jumpTarget.x; player.y = jumpTarget.y; player.isJumping = false; canJump = true; // Check collision with tree for (var i = 0; i < trees.length; i++) { var t = trees[i]; if (!t.collected && Math.abs(player.x - t.x) < 80 && Math.abs(player.y - (t.y - 10)) < 80) { t.collected = true; // Animate tree tween(t, { alpha: 0.3 }, { duration: 400 }); // Show questions showQuestions(t, function (success, money) { if (success) { // Animate money to score LK.effects.flashObject(scoreTxt, 0xffe066, 600); checkLevelUp(); } // If all trees collected, respawn var allCollected = true; for (var j = 0; j < trees.length; j++) { if (!trees[j].collected) allCollected = false; } if (allCollected) { spawnTrees(); placePlayer(); } }); break; } } } }); } }); }; // Prevent drag game.move = function (x, y, obj) { // No drag, only tap to jump }; // Main update loop game.update = function () { // Nothing needed here for now }; // Start game startGame();
===================================================================
--- original.js
+++ change.js
@@ -214,8 +214,19 @@
questionPanel.x = BOARD_WIDTH / 2;
questionPanel.y = BOARD_HEIGHT / 2;
// Pick 3 random questions
var qs = pickRandomQuestions(3);
+ // Ensure each question has only one correct answer (c always 0, and a[0] is the correct one)
+ for (var i = 0; i < qs.length; i++) {
+ if (qs[i].c !== 0) {
+ // Swap correct answer to first position
+ var correctIdx = qs[i].c;
+ var tmp = qs[i].a[0];
+ qs[i].a[0] = qs[i].a[correctIdx];
+ qs[i].a[correctIdx] = tmp;
+ qs[i].c = 0;
+ }
+ }
questionIndex = 0;
var correctCount = 0;
var moneyWon = 0;
// Question text
@@ -251,8 +262,13 @@
var idx = obj.buttonIndex;
var q = qs[questionIndex];
if (idx === q.c) {
correctCount++;
+ // Give money for correct answer
+ var moneyForThis = randInt(50, 100);
+ score += moneyForThis;
+ LK.setScore(score);
+ scoreTxt.setText(score + " €");
// Animate button green
if (obj.children && obj.children[0]) {
tween(obj.children[0], {
tint: 0x83de44
@@ -268,8 +284,36 @@
}
}
});
}
+ // Animate money gain
+ var moneyAnim = LK.getAsset('money', {
+ width: 200,
+ height: 100,
+ color: 0xffe066,
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ moneyAnim.x = 0;
+ moneyAnim.y = 250;
+ questionPanel.addChild(moneyAnim);
+ var moneyText = new Text2("+" + moneyForThis + " €", {
+ size: 70,
+ fill: "#222"
+ });
+ moneyText.anchor.set(0.5, 0.5);
+ moneyAnim.addChild(moneyText);
+ tween(moneyAnim, {
+ y: 100,
+ alpha: 0
+ }, {
+ duration: 900,
+ onFinish: function onFinish() {
+ moneyAnim.destroy();
+ }
+ });
+ // Check for level up after awarding money
+ checkLevelUp();
} else {
// Animate button red
if (obj.children && obj.children[0]) {
tween(obj.children[0], {