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 ****/ /**** * Game Code /**** * Questions ****/ // Player asset: blue box // Money asset: yellow box // Tree asset: green ellipse // Game constants // Les bonnes réponses sont définies par l'index 'c' pour chaque question 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 // bonne réponse : "Aucune, c'est absurde !" }, { q: "Quel animal est le plus susceptible de devenir président ?", a: ["Le lama", "Le poisson rouge", "Le pigeon voyageur"], c: 2 // bonne réponse : "Le pigeon voyageur" }, { 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 // bonne réponse : "Oui, mais il chuchote" }, { q: "Quelle est la couleur du cheval vert d’Henri IV ?", a: ["Vert", "Bleu", "Invisible"], c: 0 // bonne réponse : "Vert" }, { q: "Combien de lunes autour de la Terre un mardi ?", a: ["Une", "Trois", "Aucune, elles sont en vacances"], c: 0 // bonne réponse : "Une" }, { q: "Quel est le cri du billet de banque ?", a: ["Chling !", "Miaou", "Bip bip"], c: 0 // bonne réponse : "Chling !" }, { q: "Si tu plantes une pièce de 1€, que poussera-t-il ?", a: ["Un arbre à billets", "Un distributeur", "Un cactus doré"], c: 0 // bonne réponse : "Un arbre à billets" }, { q: "Quel est le sport préféré des arbres ?", a: ["Le tronc-volant", "Le basket-feuille", "Le branché-ball"], c: 1 // bonne réponse : "Le basket-feuille" }, { 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 // bonne réponse : "Le temps qu’il veut" }, { q: "Quel est le prénom du plus riche des arbres ?", a: ["Billet", "Feuille", "Racine"], c: 1 // bonne réponse : "Feuille" }]; 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++; // Donne de l'argent pour chaque bonne réponse var moneyForThis = randInt(50, 100); score += moneyForThis; collectedMoney += moneyForThis; LK.setScore(score); scoreTxt.setText(score + " €"); // Vérifie si le joueur passe au niveau suivant après chaque bonne réponse checkLevelUp(); // 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 { // Bonus à la fin de la série de questions si au moins une bonne réponse if (correctCount > 0) { // Bonus supplémentaire var bonus = randInt(50, 100); score += bonus; LK.setScore(score); scoreTxt.setText(score + " €"); // Animation du bonus 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("+" + bonus + " € (bonus)", { 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(); } }); // Vérifie si le joueur passe au niveau suivant après le bonus 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; } // Play background music in loop at game start LK.playMusic('bgmusic', { loop: true }); } // 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
@@ -53,48 +53,49 @@
// Player asset: blue box
// Money asset: yellow box
// Tree asset: green ellipse
// Game constants
+// Les bonnes réponses sont définies par l'index 'c' pour chaque question
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
+ c: 0 // bonne réponse : "Aucune, c'est absurde !"
}, {
q: "Quel animal est le plus susceptible de devenir président ?",
a: ["Le lama", "Le poisson rouge", "Le pigeon voyageur"],
- c: 2
+ c: 2 // bonne réponse : "Le pigeon voyageur"
}, {
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
+ c: 0 // bonne réponse : "Oui, mais il chuchote"
}, {
q: "Quelle est la couleur du cheval vert d’Henri IV ?",
a: ["Vert", "Bleu", "Invisible"],
- c: 0
+ c: 0 // bonne réponse : "Vert"
}, {
q: "Combien de lunes autour de la Terre un mardi ?",
a: ["Une", "Trois", "Aucune, elles sont en vacances"],
- c: 0
+ c: 0 // bonne réponse : "Une"
}, {
q: "Quel est le cri du billet de banque ?",
a: ["Chling !", "Miaou", "Bip bip"],
- c: 0
+ c: 0 // bonne réponse : "Chling !"
}, {
q: "Si tu plantes une pièce de 1€, que poussera-t-il ?",
a: ["Un arbre à billets", "Un distributeur", "Un cactus doré"],
- c: 0
+ c: 0 // bonne réponse : "Un arbre à billets"
}, {
q: "Quel est le sport préféré des arbres ?",
a: ["Le tronc-volant", "Le basket-feuille", "Le branché-ball"],
- c: 1
+ c: 1 // bonne réponse : "Le basket-feuille"
}, {
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
+ c: 0 // bonne réponse : "Le temps qu’il veut"
}, {
q: "Quel est le prénom du plus riche des arbres ?",
a: ["Billet", "Feuille", "Racine"],
- c: 1
+ c: 1 // bonne réponse : "Feuille"
}];
var BOARD_WIDTH = 2048;
var BOARD_HEIGHT = 2732;
var GROUND_Y = 2300; // y position of the ground
@@ -264,13 +265,16 @@
var idx = obj.buttonIndex;
var q = qs[questionIndex];
if (idx === q.c) {
correctCount++;
- // Give money for correct answer
+ // Donne de l'argent pour chaque bonne réponse
var moneyForThis = randInt(50, 100);
score += moneyForThis;
+ collectedMoney += moneyForThis;
LK.setScore(score);
scoreTxt.setText(score + " €");
+ // Vérifie si le joueur passe au niveau suivant après chaque bonne réponse
+ checkLevelUp();
// Animate button green
if (obj.children && obj.children[0]) {
tween(obj.children[0], {
tint: 0x83de44
@@ -339,16 +343,16 @@
questionIndex++;
if (questionIndex < 3) {
setQuestion();
} else {
- // Done: reward if at least 1 correct
+ // Bonus à la fin de la série de questions si au moins une bonne réponse
if (correctCount > 0) {
- moneyWon = randInt(50, 100) * correctCount;
- collectedMoney = moneyWon;
- score += moneyWon;
+ // Bonus supplémentaire
+ var bonus = randInt(50, 100);
+ score += bonus;
LK.setScore(score);
scoreTxt.setText(score + " €");
- // Animate money
+ // Animation du bonus
var moneyAnim = LK.getAsset('money', {
width: 200,
height: 100,
color: 0xffe066,
@@ -357,9 +361,9 @@
});
moneyAnim.x = 0;
moneyAnim.y = 250;
questionPanel.addChild(moneyAnim);
- var moneyText = new Text2("+" + moneyWon + " €", {
+ var moneyText = new Text2("+" + bonus + " € (bonus)", {
size: 70,
fill: "#222"
});
moneyText.anchor.set(0.5, 0.5);
@@ -373,9 +377,9 @@
moneyAnim.destroy();
finishPanel();
}
});
- // Check for level up after awarding money
+ // Vérifie si le joueur passe au niveau suivant après le bonus
checkLevelUp();
} else {
finishPanel();
}