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 ****/ // Liste de légumes et de plaintes absurdes // --- Données du jeu --- // Légumes (formes simples pour MVP) // Peines (icônes simples) // Son (MVP: pas de son pour l’instant) 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' }]; 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' }]; // 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; if (correct) { // Animation de félicitations LK.effects.flashObject(vegNode, 0x83de44, 600); 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 { // Animation d’erreur LK.effects.flashObject(vegNode, 0xff0000, 600); 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 };
/****
* 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
****/
// Liste de légumes et de plaintes absurdes
// --- Données du jeu ---
// Légumes (formes simples pour MVP)
// Peines (icônes simples)
// Son (MVP: pas de son pour l’instant)
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'
}];
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'
}];
// 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;
if (correct) {
// Animation de félicitations
LK.effects.flashObject(vegNode, 0x83de44, 600);
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 {
// Animation d’erreur
LK.effects.flashObject(vegNode, 0xff0000, 600);
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
};
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