/****
* 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'
}, {
type: 'zucchini',
name: 'Courgette'
}, {
type: 'pepper',
name: 'Poivron'
}, {
type: 'radish',
name: 'Radis'
}, {
type: 'cucumber',
name: 'Concombre'
}, {
type: 'leek',
name: 'Poireau'
}, {
type: 'turnip',
name: 'Navet'
}, {
type: 'pumpkin',
name: 'Citrouille'
}];
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'
}, {
vegType: 'zucchini',
text: "La courgette a tenté de se faire passer pour une aubergine.",
correctPunish: 'fridge'
}, {
vegType: 'zucchini',
text: "La courgette a refusĂ© dâentrer dans la ratatouille.",
correctPunish: 'compost'
}, {
vegType: 'pepper',
text: "Le poivron a semé la pagaille dans la salade.",
correctPunish: 'soup'
}, {
vegType: 'pepper',
text: "Le poivron a tenté de se cacher parmi les tomates.",
correctPunish: 'fridge'
}, {
vegType: 'radish',
text: "Le radis a tenté de se faufiler dans la salade sans invitation.",
correctPunish: 'fridge'
}, {
vegType: 'cucumber',
text: "Le concombre a organisé une course de glissade dans le tribunal.",
correctPunish: 'compost'
}, {
vegType: 'leek',
text: "Le poireau a essayé de se faire passer pour une baguette magique.",
correctPunish: 'soup'
}, {
vegType: 'turnip',
text: "Le navet a refusé de jouer son rÎle dans la soupe.",
correctPunish: 'compost'
}, {
vegType: 'pumpkin',
text: "La citrouille a tenté de transformer le tribunal en carrosse.",
correctPunish: 'peel'
}];
// 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;
// Messages drÎles pour bonnes/mauvaises réponses
var funnyGood = ["Bravo ! Ce lĂ©gume va sâen souvenir toute sa vie⊠de lĂ©gume.", "Justice potagĂšre rendue avec brio !", "Le tribunal applaudit votre jugement !", "Ce lĂ©gume nâen revient pas de votre sĂ©vĂ©ritĂ©.", "Vous ĂȘtes le cauchemar des lĂ©gumes dĂ©linquants !", "On va en faire une salade de ce dossier !", "Votre marteau de juge fait trembler les carottes !"];
var funnyBad = ["Oups ! Le lĂ©gume a failli sâen tirerâŠ", "Le public du tribunal est hilare !", "Ce nâĂ©tait pas la bonne peine, mais câĂ©tait drĂŽle !", "Le lĂ©gume jubile, il sâen sort bien !", "Attention, le syndicat des lĂ©gumes va protester !", "Le juge a glissĂ© sur une peau de banane imaginaire.", "MĂȘme la courgette nâa pas compris votre choix !"];
var correct = punishId === currentComplaint.correctPunish;
if (correct) {
// Animation de félicitations
LK.effects.flashObject(vegNode, 0x83de44, 600);
legpot += 1;
// Affiche un message drÎle de réussite
var msg = funnyGood[Math.floor(Math.random() * funnyGood.length)];
complaintText.setText(currentComplaint.text + "\n\nđ„ " + msg);
// 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;
// Affiche un message drĂŽle dâĂ©chec
var msg = funnyBad[Math.floor(Math.random() * funnyBad.length)];
complaintText.setText(currentComplaint.text + "\n\nđ " + msg);
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'
}, {
type: 'zucchini',
name: 'Courgette'
}, {
type: 'pepper',
name: 'Poivron'
}, {
type: 'radish',
name: 'Radis'
}, {
type: 'cucumber',
name: 'Concombre'
}, {
type: 'leek',
name: 'Poireau'
}, {
type: 'turnip',
name: 'Navet'
}, {
type: 'pumpkin',
name: 'Citrouille'
}];
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'
}, {
vegType: 'zucchini',
text: "La courgette a tenté de se faire passer pour une aubergine.",
correctPunish: 'fridge'
}, {
vegType: 'zucchini',
text: "La courgette a refusĂ© dâentrer dans la ratatouille.",
correctPunish: 'compost'
}, {
vegType: 'pepper',
text: "Le poivron a semé la pagaille dans la salade.",
correctPunish: 'soup'
}, {
vegType: 'pepper',
text: "Le poivron a tenté de se cacher parmi les tomates.",
correctPunish: 'fridge'
}, {
vegType: 'radish',
text: "Le radis a tenté de se faufiler dans la salade sans invitation.",
correctPunish: 'fridge'
}, {
vegType: 'cucumber',
text: "Le concombre a organisé une course de glissade dans le tribunal.",
correctPunish: 'compost'
}, {
vegType: 'leek',
text: "Le poireau a essayé de se faire passer pour une baguette magique.",
correctPunish: 'soup'
}, {
vegType: 'turnip',
text: "Le navet a refusé de jouer son rÎle dans la soupe.",
correctPunish: 'compost'
}, {
vegType: 'pumpkin',
text: "La citrouille a tenté de transformer le tribunal en carrosse.",
correctPunish: 'peel'
}];
// 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;
// Messages drÎles pour bonnes/mauvaises réponses
var funnyGood = ["Bravo ! Ce lĂ©gume va sâen souvenir toute sa vie⊠de lĂ©gume.", "Justice potagĂšre rendue avec brio !", "Le tribunal applaudit votre jugement !", "Ce lĂ©gume nâen revient pas de votre sĂ©vĂ©ritĂ©.", "Vous ĂȘtes le cauchemar des lĂ©gumes dĂ©linquants !", "On va en faire une salade de ce dossier !", "Votre marteau de juge fait trembler les carottes !"];
var funnyBad = ["Oups ! Le lĂ©gume a failli sâen tirerâŠ", "Le public du tribunal est hilare !", "Ce nâĂ©tait pas la bonne peine, mais câĂ©tait drĂŽle !", "Le lĂ©gume jubile, il sâen sort bien !", "Attention, le syndicat des lĂ©gumes va protester !", "Le juge a glissĂ© sur une peau de banane imaginaire.", "MĂȘme la courgette nâa pas compris votre choix !"];
var correct = punishId === currentComplaint.correctPunish;
if (correct) {
// Animation de félicitations
LK.effects.flashObject(vegNode, 0x83de44, 600);
legpot += 1;
// Affiche un message drÎle de réussite
var msg = funnyGood[Math.floor(Math.random() * funnyGood.length)];
complaintText.setText(currentComplaint.text + "\n\nđ„ " + msg);
// 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;
// Affiche un message drĂŽle dâĂ©chec
var msg = funnyBad[Math.floor(Math.random() * funnyBad.length)];
complaintText.setText(currentComplaint.text + "\n\nđ " + msg);
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
Radis. In-Game asset. 2d. High contrast. No shadows
Courgettes. In-Game asset. 2d. High contrast. No shadows
Poivre. In-Game asset. 2d. High contrast. No shadows
Comcombre. In-Game asset. 2d. High contrast. No shadows
poireau. In-Game asset. 2d. High contrast. No shadows
Navet. In-Game asset. 2d. High contrast. No shadows
Citrouille. In-Game asset. 2d. High contrast. No shadows