User prompt
Ajoute des sons d'animations lorsque le joueur attribue une peine correcte ou incorrecte !
User prompt
Ajoute des messages drôles à chaque peine attribués!
User prompt
Ajoute les assets etc pour les nouveaux légumes
User prompt
Ajoute de nouveaux légumes a juger et de nouvelles plaintes et peines au jeu
Remix started
Copy Tribunal des légumes
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); var storage = LK.import("@upit/storage.v1", { legpot: 0, level: 1 }); /**** * Classes ****/ // Bouton de peine var PunishmentButton = Container.expand(function () { var self = Container.call(this); self.punishId = null; self.text = null; self.icon = null; self.callback = null; self.init = function (punishId, label, iconId, callback) { self.punishId = punishId; self.removeChildren(); self.icon = self.attachAsset(iconId, { anchorX: 0.5, anchorY: 0.5 }); self.icon.y = 0; self.text = new Text2(label, { size: 60, fill: "#222" }); self.text.anchor.set(0.5, 0); self.text.y = self.icon.height / 2 + 10; self.addChild(self.text); self.callback = callback; }; self.down = function (x, y, obj) { if (self.callback) self.callback(self.punishId); }; return self; }); // Légume à juger var Vegetable = Container.expand(function () { var self = Container.call(this); self.vegType = null; // 'carrot', 'broccoli', etc. self.setType = function (type) { self.vegType = type; self.removeChildren(); var vegAsset = self.attachAsset(type, { anchorX: 0.5, anchorY: 1 }); vegAsset.y = 0; // Ajoute une perruque de juge pour le fun var wig = self.attachAsset('judgeWig', { anchorX: 0.5, anchorY: 1 }); wig.y = -vegAsset.height + 60; }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0xf7f7e0 }); /**** * Game Code ****/ // Nouveaux légumes // Son (MVP: pas de son pour l’instant) // Peines (icônes simples) // Légumes (formes simples pour MVP) // --- Données du jeu --- // Liste de légumes et de plaintes absurdes var vegetables = [{ type: 'carrot', name: 'Carotte' }, { type: 'broccoli', name: 'Brocoli' }, { type: 'eggplant', name: 'Aubergine' }, { type: 'tomato', name: 'Tomate' }, { type: 'potato', name: 'Pomme de terre' }, { type: 'onion', name: 'Oignon' }, { type: 'pepper', name: 'Poivron' }, { type: 'radish', name: 'Radis' }, { type: 'zucchini', name: 'Courgette' }]; var complaints = [ // Format: {vegType, text, correctPunish} { vegType: 'carrot', text: "La carotte a tenté de se cacher dans le gâteau aux carottes.", correctPunish: 'peel' }, { vegType: 'broccoli', text: "Le brocoli a effrayé des enfants à la cantine.", correctPunish: 'fridge' }, { vegType: 'eggplant', text: "L’aubergine a usurpé l’identité d’une courgette.", correctPunish: 'compost' }, { vegType: 'tomato', text: "La tomate s’est prise pour un fruit et a semé la zizanie.", correctPunish: 'soup' }, { vegType: 'potato', text: "La pomme de terre a refusé d’être épluchée.", correctPunish: 'peel' }, { vegType: 'onion', text: "L’oignon a fait pleurer tout le tribunal.", correctPunish: 'fridge' }, { vegType: 'carrot', text: "La carotte a tenté de bronzer au soleil du frigo.", correctPunish: 'fridge' }, { vegType: 'broccoli', text: "Le brocoli a organisé une manifestation contre la cuisson à la vapeur.", correctPunish: 'compost' }, { vegType: 'eggplant', text: "L’aubergine a tenté de repeindre le tribunal en violet.", correctPunish: 'compost' }, { vegType: 'tomato', text: "La tomate a éclaboussé le juge lors de son entrée.", correctPunish: 'soup' }, { vegType: 'potato', text: "La pomme de terre a tenté de rouler hors du tribunal.", correctPunish: 'peel' }, { vegType: 'onion', text: "L’oignon a tenté de se déguiser en ail.", correctPunish: 'compost' }, // Nouveaux légumes et plaintes originales { vegType: 'pepper', text: "Le poivron a tenté de se faire passer pour un piment.", correctPunish: 'fridge' }, { vegType: 'pepper', text: "Le poivron a semé la discorde dans la ratatouille.", correctPunish: 'compost' }, { vegType: 'radish', text: "Le radis a piqué la langue du juge.", correctPunish: 'fridge' }, { vegType: 'radish', text: "Le radis a tenté de se cacher sous une feuille de salade.", correctPunish: 'compost' }, { vegType: 'zucchini', text: "La courgette a tenté de s’inviter dans un dessert au chocolat.", correctPunish: 'soup' }, { vegType: 'zucchini', text: "La courgette a refusé d’être coupée en rondelles.", correctPunish: 'peel' }, // Variantes absurdes pour les anciens légumes { vegType: 'carrot', text: "La carotte a tenté de voler la vedette au poireau.", correctPunish: 'compost' }, { vegType: 'broccoli', text: "Le brocoli a tenté de repeindre le tribunal en vert.", correctPunish: 'compost' }, { vegType: 'eggplant', text: "L’aubergine a tenté de se faire passer pour une tomate.", correctPunish: 'fridge' }, { vegType: 'potato', text: "La pomme de terre a tenté de s’enfuir en purée.", correctPunish: 'soup' }, { vegType: 'onion', text: "L’oignon a tenté de faire rire tout le monde avec ses couches.", correctPunish: 'fridge' }]; // Peines disponibles var punishments = [{ id: 'soup', label: 'Soupe', icon: 'punishSoup' }, { id: 'compost', label: 'Compost', icon: 'punishCompost' }, { id: 'peel', label: 'Épluchage', icon: 'punishPeel' }, { id: 'fridge', label: 'Frigo', icon: 'punishFridge' }]; // Progression var level = storage.level || 1; var legpot = storage.legpot || 0; var requiredLegpot = function requiredLegpot(lvl) { return Math.pow(2, lvl - 1) * 10; }; // 10, 20, 40, 80, ... // Éléments d’UI var vegNode = new Vegetable(); vegNode.x = 2048 / 2; vegNode.y = 1100; game.addChild(vegNode); var complaintText = new Text2('', { size: 80, fill: "#333", wordWrap: true, wordWrapWidth: 1800 }); complaintText.anchor.set(0.5, 0); complaintText.x = 2048 / 2; complaintText.y = 300; game.addChild(complaintText); // Affichage du niveau et Legpot (ligne principale) - déplacé en haut au centre de la zone de jeu var statusTxt = new Text2('', { size: 80, fill: 0x8B4513, fontWeight: "bold" }); statusTxt.anchor.set(0.5, 0); statusTxt.x = 2048 / 2; statusTxt.y = 20; game.addChild(statusTxt); // Affichage du nombre de Legpot restants avant le niveau suivant (juste en dessous) var restantTxt = new Text2('', { size: 60, fill: 0x8B4513, fontWeight: "bold" }); restantTxt.anchor.set(0.5, 0); restantTxt.x = 2048 / 2; restantTxt.y = statusTxt.y + statusTxt.height + 5; game.addChild(restantTxt); // Boutons de peines var punishButtons = []; var punishButtonY = 2000; var punishButtonSpacing = 450; for (var i = 0; i < punishments.length; i++) { var btn = new PunishmentButton(); btn.init(punishments[i].id, punishments[i].label, punishments[i].icon, onPunishSelected); btn.x = 2048 / 2 + (i - 1.5) * punishButtonSpacing; btn.y = punishButtonY; game.addChild(btn); punishButtons.push(btn); } // --- Logique du jeu --- var currentComplaint = null; var canJudge = true; // Sélectionne une plainte aléatoire pour le niveau courant function pickComplaint() { var idx = Math.floor(Math.random() * complaints.length); currentComplaint = complaints[idx]; vegNode.setType(currentComplaint.vegType); complaintText.setText(currentComplaint.text); canJudge = true; } // Met à jour l’affichage du score, du niveau et du nombre de Legpot restants avant le niveau suivant function updateUI() { var legpotRestant = requiredLegpot(level) - legpot; if (legpotRestant < 0) legpotRestant = 0; statusTxt.setText("Niveau : " + level + " / 67 | Legpot : " + legpot); statusTxt.x = 2048 / 2; statusTxt.y = 20; restantTxt.setText("Restant avant niveau suivant : " + legpotRestant); restantTxt.x = 2048 / 2; restantTxt.y = statusTxt.y + statusTxt.height + 5; } // Gère la sélection d’une peine function onPunishSelected(punishId) { if (!canJudge) return; canJudge = false; var correct = punishId === currentComplaint.correctPunish; // Messages drôles pour chaque peine var funnyMessages = { soup: ["Direction la marmite, tu vas mijoter !", "On va te transformer en velouté cinq étoiles.", "Prépare-toi à nager dans le bouillon !"], compost: ["Retour à la terre, tu feras pousser de belles salades !", "Fini la belle vie, place au recyclage !", "Tu vas nourrir les vers, quelle destinée !"], peel: ["On va t’éplucher jusqu’au trognon !", "Adieu la peau, bonjour la fraîcheur !", "Tu vas finir tout nu comme un ver !"], fridge: ["Un petit séjour au frais, ça te fera réfléchir !", "Direction le frigo, prépare-toi à grelotter !", "Tu vas côtoyer les yaourts périmés !"] }; function showFunnyMessage(punishId, isCorrect) { var msgArr = funnyMessages[punishId] || []; var msg = msgArr.length ? msgArr[Math.floor(Math.random() * msgArr.length)] : ""; if (!isCorrect && msg) { msg = "Raté ! " + msg; } if (msg) { complaintText.setText(currentComplaint.text + "\n\n" + msg); } } if (correct) { LK.getSound('goodAnswer').play(); // Animation de félicitations LK.effects.flashObject(vegNode, 0x83de44, 600); showFunnyMessage(punishId, true); legpot += 1; // Passage de niveau si assez de Legpot if (legpot >= requiredLegpot(level)) { level++; legpot = 0; LK.effects.flashScreen(0x83de44, 800); LK.setTimeout(function () { LK.showYouWin(); }, 900); storage.level = level; storage.legpot = legpot; updateUI(); return; } } else { LK.getSound('badAnswer').play(); // Animation d’erreur LK.effects.flashObject(vegNode, 0xff0000, 600); showFunnyMessage(punishId, false); legpot -= 1; if (legpot < 0) { // Recul de niveau si possible if (level > 1) { level--; legpot = requiredLegpot(level) - 1; LK.effects.flashScreen(0xff0000, 800); } else { legpot = 0; } } } storage.level = level; storage.legpot = legpot; updateUI(); // Nouvelle plainte après délai LK.setTimeout(function () { pickComplaint(); }, 900); } // Initialisation updateUI(); pickComplaint(); // Musique de fond en boucle LK.playMusic('musicId'); // --- Game Over/Win automatique par LK --- game.update = function () { // Rien à faire ici pour ce jeu };
===================================================================
--- original.js
+++ change.js
@@ -319,8 +319,9 @@
complaintText.setText(currentComplaint.text + "\n\n" + msg);
}
}
if (correct) {
+ LK.getSound('goodAnswer').play();
// Animation de félicitations
LK.effects.flashObject(vegNode, 0x83de44, 600);
showFunnyMessage(punishId, true);
legpot += 1;
@@ -337,8 +338,9 @@
updateUI();
return;
}
} else {
+ LK.getSound('badAnswer').play();
// Animation d’erreur
LK.effects.flashObject(vegNode, 0xff0000, 600);
showFunnyMessage(punishId, false);
legpot -= 1;
Brocolis. In-Game asset. 2d. High contrast. No shadows
Carrotte. In-Game asset. 2d. High contrast. No shadows
Obergine. In-Game asset. 2d. High contrast. No shadows
Tomate. In-Game asset. 2d. High contrast. No shadows
Patate. In-Game asset. 2d. High contrast. No shadows
Onion. In-Game asset. 2d. High contrast. No shadows
Casquette a l'envers. In-Game asset. 2d. High contrast. No shadows
Soupe. In-Game asset. 2d. High contrast. No shadows
Compote. In-Game asset. 2d. High contrast. No shadows
Pelage de legumes. In-Game asset. 2d. High contrast. No shadows
Frigo. In-Game asset. 2d. High contrast. No shadows
Poivre. In-Game asset. 2d. High contrast. No shadows
Radis. In-Game asset. 2d. High contrast. No shadows
Courgettes. In-Game asset. 2d. High contrast. No shadows