User prompt
Lasset de fond du jeu doit prendre tout le fond du jeu
User prompt
Je veux personnalisé le fond de jeu avec mon propre asset
User prompt
Ajoute 50 nouvelles situations de discrimination
User prompt
Fait en sorte que la musique de fond en boucle bgmusic se joue dans le jeu
Code edit (1 edits merged)
Please save this source code
User prompt
Fait en sorte que la musique se joue réellement dans le jeu
User prompt
Ajoute une musique de fond en boucle au jeu
User prompt
Ajoute plus de situations au jeu
User prompt
Un nouveau point d'égalités a collecter doit apparaître sur la plateformes des que le précédent a été collecter
User prompt
Fait en sorte que de nouveaux points d'égalités soient disponibles sur les plateformes quand la femme les a tous collectés
User prompt
Fait en sorte que de nouveaux points d'égalités a collecter s'affichent sur les plateformes lorsqu'il y en a plus et fait ça aussi : Fait en sorte que le joueur puisse bouger la femme n'importe où , ou il appuie, Même quand une fenêtre de situation est affichée, Fait aussi en sorte que le joueur est 20 secondes maximum pour répondre, sinon la fenêtre de situation se retire
User prompt
Fait en sorte que le joueur puisse bouger la femme n'importe où , ou il appuie, Même quand une fenêtre de situation est affichée, Fait aussi en sorte que le joueur est 20 secondes maximum pour répondre, sinon la fenêtre de situation se retire (le temps restants de la fenêtre doit être affiché aussi)
User prompt
Fait en sorte que le joueur puisse bouger la femme n'importe où , ou il appuie, Même quand une fenêtre de situation est affichée, Fait aussi en sorte que le joueur est 20 secondes maximum pour répondre, sinon la fenêtre de situation se retire
User prompt
Regle les problèmes liés à l'affichage des fenêtres de situations : une seule fenêtre de situation par plateforme et par point d'égalité
User prompt
Fait en sorte que la musique de fond en boucle du jeu soit définit avec l'assets bgmusic
User prompt
Ajoute une musique de fond en boucle au jeu
User prompt
Ajoute une musique de fond en boucle au jeu
User prompt
Ajoute plus de situations
User prompt
De nouveaux points d'égalités doivent apparaître sur les plateformes quand les précédents ont tous été collectés, et ils doit y avoir un point d'égalité a collecter sur toutes les plateformes
User prompt
De nouveaux points d'égalités doivent apparaître sur les plateformes quand les précédents ont tous été collectés, et ils doit y avoir un point d'égalité a collecter sur toutes les plateformes
User prompt
Fait en sorte que les points d'égalité ne soit récupérable seulement quand la femme/le joueur a répondue aux questions de situations, et que de nouveaux points d'égalités s'affichent sur les plateformes quand il y en a plus, et ajoute aussi de nouvelles situations
User prompt
fait en sorte que la femme puisse se rendre partout où le joueur appuie,
User prompt
Fait en sorte que la femme puisse se rendre sur toutes les plateformes, que le joueur doit juste appuyer sur la plateforme en question pour s'y rendre
User prompt
Crée "Nous avons le droit", un jeu engagé où l’on incarne une femme de couleur qui, à travers des petites actions concrètes, doit faire face à des discriminations ou inégalités, et réussir à s'affirmer, se faire entendre, et faire changer les choses autour d’elle. Le jeu doit se présenter sous forme de jeu de plateforme, ou une femme de couleur avance sur une route dans une ville, Le joueur fait avancer la femme en appuyant sur son écran la où il veut qu'elle aille, des personnes blanches , des bus, des immeubles d'entreprises, des enfants, et des animaux apparaissent des fois de façon aléatoire sur la plateforme, Quand la femme noire entre en collision avec un de ces éléments la, Un écran de choix textuels s'ouvre, il y a une situation écrite, Et une liste de 6 choix possibles a faire par rapport a la situation (discrimination, refus ou offre d'emplois, lois ridicule a faire changer, moquerie etc), Sous la situation, le joueur peut choisir son choix, qui dictera la suite du jeu (si le choix est raisonnable et réduit l'inégalité, le joueur gagne 1 point d'égalité, mais si il fait un mauvais choix, le jeu lui dira que c'est pas un choix convenable et il devra recommencer le jeu depuis le début), La situation est générer aléatoirement, Et les choix possibles par rapport a la situation, Il doit y avoir un système de niveaux, les niveaux se gagnent en accumulant des points d'égalité, pour passer du niveau 1 au niveau 2, Il faut 6 points d'égalité, puis ça double a chaque nouveau niveau par rapport au niveau précédent Le jeu doit avoir 40 niveaux, Quand le joueur les a accomplit avec succès, le jeu lui dit "Le monde est désormais égal pour tous!", Et le joueur gagne le jeu, Le joueur peut recommencer le jeu depuis le début quand il le veut, Le jeu est reset au niveau 1 et tout début quand le joueur a finis le niveau 40 C'est un jeu engagé !
Code edit (1 edits merged)
Please save this source code
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ // Equality point class var EqualityPoint = Container.expand(function () { var self = Container.call(this); var eqGfx = self.attachAsset('equality', { anchorX: 0.5, anchorY: 0.5 }); self.width = eqGfx.width; self.height = eqGfx.height; return self; }); /**** * Discrimination Situations ****/ // Hero class var Hero = Container.expand(function () { var self = Container.call(this); var heroGfx = self.attachAsset('hero', { anchorX: 0.5, anchorY: 1 }); self.width = heroGfx.width; self.height = heroGfx.height; self.vx = 0; self.vy = 0; self.isOnGround = false; self.jumpPower = -60; self.moveSpeed = 22; self.gravity = 5; self.update = function () { // Apply gravity self.vy += self.gravity; self.x += self.vx; self.y += self.vy; }; return self; }); // Obstacle class var Obstacle = Container.expand(function () { var self = Container.call(this); var obsGfx = self.attachAsset('obstacle', { anchorX: 0.5, anchorY: 1 }); self.width = obsGfx.width; self.height = obsGfx.height; return self; }); // Platform class var Platform = Container.expand(function () { var self = Container.call(this); var platGfx = self.attachAsset('platform', { anchorX: 0.5, anchorY: 0.5 }); self.width = platGfx.width; self.height = platGfx.height; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0xf1f5f9 }); /**** * Game Code ****/ /**** * Discrimination Situations ****/ // Discrimination popup background (box, white) // Equality point (ellipse, green) // Obstacle (ellipse, red) // Platform (box, gray) // Character: Woman of color (box, purple) // Game constants var discriminationSituations = [{ text: "Un collègue fait une remarque raciste au travail.", choices: ["Ignorer la remarque", "Rire avec lui", "Signaler à la RH", "Répondre calmement", "Quitter le travail", "Faire une remarque agressive"], correct: [2, 3] }, { text: "On refuse de vous servir dans un café.", choices: ["Demander poliment pourquoi", "Partir sans rien dire", "Faire un scandale", "Appeler la police", "Filmer la scène", "Accepter la situation"], correct: [0, 3, 4] }, { text: "Un enfant subit des moqueries à l’école à cause de sa couleur de peau.", choices: ["En parler à l’enseignant", "Ignorer la situation", "Encourager l’enfant à répondre", "Rire avec les autres", "Organiser une discussion sur la diversité", "Punir les moqueurs"], correct: [0, 2, 4] }, { text: "Une entreprise refuse votre candidature sans raison.", choices: ["Demander un retour", "Porter plainte pour discrimination", "Chercher un autre emploi", "Publier sur les réseaux sociaux", "Accepter sans rien faire", "Envoyer un message d’insulte"], correct: [0, 1, 3] }, { text: "Un chauffeur de bus ne s’arrête pas pour vous.", choices: ["Attendre le prochain bus", "Signaler à la compagnie", "Crier sur le chauffeur", "Filmer la scène", "Ignorer l’incident", "Demander de l’aide à d’autres passagers"], correct: [1, 3, 5] }, { text: "Un agent de sécurité vous suit dans un magasin sans raison.", choices: ["Lui demander calmement pourquoi", "Ignorer et continuer vos achats", "Faire un scandale", "Quitter le magasin", "Filmer la scène", "Appeler la direction"], correct: [0, 1, 5] }, { text: "Un professeur fait une remarque stéréotypée sur votre culture.", choices: ["Lui expliquer pourquoi c'est blessant", "Ignorer", "Rire avec la classe", "En parler à la direction", "Répondre agressivement", "Demander des excuses"], correct: [0, 3, 5] }, { text: "On vous refuse l'entrée d'une boîte de nuit.", choices: ["Demander la raison", "Accepter sans rien dire", "Filmer la scène", "Appeler la police", "Faire un scandale", "Chercher un autre lieu"], correct: [0, 2, 3] }, { text: "Un inconnu fait une remarque sur vos cheveux dans la rue.", choices: ["Répondre poliment", "Ignorer", "Faire une remarque sur son apparence", "Expliquer pourquoi ce n'est pas approprié", "Rire", "S'énerver"], correct: [0, 3] }, { text: "Un enfant est exclu d'un jeu à cause de sa couleur de peau.", choices: ["Intervenir et inclure l'enfant", "Ignorer", "En parler aux parents", "Rire avec les autres", "Organiser un jeu inclusif", "Punir les enfants"], correct: [0, 2, 4] }]; var GAME_WIDTH = 2048; var GAME_HEIGHT = 2732; var GROUND_Y = GAME_HEIGHT - 200; var PLATFORM_GAP_Y = 320; var PLATFORM_MIN_X = 300; var PLATFORM_MAX_X = GAME_WIDTH - 300; var HERO_START_X = 400; var HERO_START_Y = GROUND_Y - 200; var OBSTACLE_CHANCE = 0.5; var EQUALITY_CHANCE = 0.5; var MAX_LEVEL = 40; // Game state var platforms = []; var obstacles = []; var equalityPoints = []; var currentLevel = 1; var equalityScore = 0; var equalityNeeded = 2; var hero = null; var isPopupActive = false; var popupContainer = null; var dragStartX = null; var dragStartY = null; var dragHeroStartX = null; var dragHeroStartY = null; var lastTouchId = null; // GUI var levelTxt = new Text2('Niveau 1', { size: 90, fill: 0x1E293B }); levelTxt.anchor.set(0.5, 0); LK.gui.top.addChild(levelTxt); var equalityTxt = new Text2('Égalité: 0/2', { size: 90, fill: 0x22C55E }); equalityTxt.anchor.set(0.5, 0); LK.gui.top.addChild(equalityTxt); // Position GUI levelTxt.y = 40; equalityTxt.y = 140; // Helper: Update GUI function updateGUI() { levelTxt.setText('Niveau ' + currentLevel + ' / ' + MAX_LEVEL); equalityTxt.setText('Égalité: ' + equalityScore + ' / ' + equalityNeeded); } // Helper: Reset game state for new level or restart function resetGameState() { // Remove old elements for (var i = 0; i < platforms.length; i++) platforms[i].destroy(); for (var i = 0; i < obstacles.length; i++) obstacles[i].destroy(); for (var i = 0; i < equalityPoints.length; i++) equalityPoints[i].destroy(); platforms = []; obstacles = []; equalityPoints = []; equalityScore = 0; // Niveau 1 = 6, puis double à chaque fois equalityNeeded = 6 * Math.pow(2, currentLevel - 1); updateGUI(); // Reset hero if (hero) hero.destroy(); hero = new Hero(); hero.x = HERO_START_X; hero.y = HERO_START_Y; game.addChild(hero); // Generate platforms, obstacles, equality points var y = GROUND_Y; var plat, obs, eq; for (var lvl = 0; lvl < 10; lvl++) { var px = PLATFORM_MIN_X + Math.floor(Math.random() * (PLATFORM_MAX_X - PLATFORM_MIN_X)); plat = new Platform(); plat.x = px; plat.y = y; platforms.push(plat); game.addChild(plat); // Place obstacle if (Math.random() < OBSTACLE_CHANCE) { obs = new Obstacle(); obs.x = px + 120 + Math.floor(Math.random() * 120); obs.y = y - 60; obstacles.push(obs); game.addChild(obs); } // Place equality point if (Math.random() < EQUALITY_CHANCE) { eq = new EqualityPoint(); eq.x = px - 120 - Math.floor(Math.random() * 120); eq.y = y - 80; equalityPoints.push(eq); game.addChild(eq); } y -= PLATFORM_GAP_Y; } // Add ground platform var groundPlat = new Platform(); groundPlat.x = GAME_WIDTH / 2; groundPlat.y = GROUND_Y + 60; platforms.push(groundPlat); game.addChild(groundPlat); } // Helper: Show discrimination popup function showDiscriminationPopup(situation, onChoice) { isPopupActive = true; popupContainer = new Container(); // Background var bg = LK.getAsset('popupBg', { anchorX: 0.5, anchorY: 0.5, x: GAME_WIDTH / 2, y: GAME_HEIGHT / 2 }); popupContainer.addChild(bg); // Situation text var txt = new Text2(situation.text, { size: 70, fill: 0x1E293B }); txt.anchor.set(0.5, 0); txt.x = GAME_WIDTH / 2; txt.y = GAME_HEIGHT / 2 - 350; popupContainer.addChild(txt); // Choices var btns = []; var btnY = GAME_HEIGHT / 2 - 120; for (var i = 0; i < 6; i++) { var btn = new Container(); var btnBg = LK.getAsset('platform', { anchorX: 0.5, anchorY: 0.5, x: GAME_WIDTH / 2, y: btnY, width: 1200, height: 100, color: 0xf1f5f9 }); btn.addChild(btnBg); var btnTxt = new Text2(situation.choices[i], { size: 54, fill: 0x1E293B }); btnTxt.anchor.set(0.5, 0.5); btnTxt.x = GAME_WIDTH / 2; btnTxt.y = btnY; btn.addChild(btnTxt); // Touch/click event (function (idx) { btn.down = function (x, y, obj) { if (!isPopupActive) return; onChoice(idx); }; })(i); popupContainer.addChild(btn); btns.push(btn); btnY += 130; } game.addChild(popupContainer); } // Helper: Hide popup function hideDiscriminationPopup() { if (popupContainer) { popupContainer.destroy(); popupContainer = null; } isPopupActive = false; } // Helper: Handle collision with obstacle function handleObstacleCollision() { // Pick a random situation var sitIdx = Math.floor(Math.random() * discriminationSituations.length); var situation = discriminationSituations[sitIdx]; showDiscriminationPopup(situation, function (choiceIdx) { // Check if correct if (situation.correct.indexOf(choiceIdx) !== -1) { // Good answer: progress, remove obstacle hideDiscriminationPopup(); // Remove the obstacle hero is colliding with for (var i = 0; i < obstacles.length; i++) { if (hero.intersects(obstacles[i])) { obstacles[i].destroy(); obstacles.splice(i, 1); break; } } } else { // Bad answer: game over hideDiscriminationPopup(); LK.effects.flashScreen(0xff0000, 1000); LK.showGameOver(); // Après un Game Over, recommence au niveau 1 LK.on('gameOver', function () { currentLevel = 1; resetGameState(); }); } }); } // Helper: Handle collision with equality point // Now, equality points are only collectible after answering a situation correctly. // We'll use a flag to allow collection, and respawn new points if none remain. var canCollectEquality = false; var pendingEqualityIdx = null; function handleEqualityCollision(eqIdx) { // If not allowed to collect, trigger a situation popup if (!canCollectEquality) { // Pick a random situation var sitIdx = Math.floor(Math.random() * discriminationSituations.length); var situation = discriminationSituations[sitIdx]; showDiscriminationPopup(situation, function (choiceIdx) { if (situation.correct.indexOf(choiceIdx) !== -1) { // Good answer: allow collection hideDiscriminationPopup(); canCollectEquality = true; pendingEqualityIdx = eqIdx; } else { // Bad answer: game over hideDiscriminationPopup(); LK.effects.flashScreen(0xff0000, 1000); LK.showGameOver(); LK.on('gameOver', function () { currentLevel = 1; resetGameState(); }); } }); return; } // If allowed, collect the point equalityScore += 1; updateGUI(); equalityPoints[eqIdx].destroy(); equalityPoints.splice(eqIdx, 1); canCollectEquality = false; pendingEqualityIdx = null; // Check for level up if (equalityScore >= equalityNeeded) { if (currentLevel >= MAX_LEVEL) { // Affiche le message de victoire final var winPopup = new Container(); var bg = LK.getAsset('popupBg', { anchorX: 0.5, anchorY: 0.5, x: GAME_WIDTH / 2, y: GAME_HEIGHT / 2 }); winPopup.addChild(bg); var winTxt = new Text2("Le monde est désormais égal pour tous!", { size: 80, fill: 0x22C55E }); winTxt.anchor.set(0.5, 0.5); winTxt.x = GAME_WIDTH / 2; winTxt.y = GAME_HEIGHT / 2; winPopup.addChild(winTxt); game.addChild(winPopup); LK.setTimeout(function () { winPopup.destroy(); LK.showYouWin(); // Reset du jeu pour recommencer au niveau 1 currentLevel = 1; resetGameState(); }, 2500); } else { currentLevel += 1; resetGameState(); } } else { // If no more equality points, respawn one on every platform (except ground) if (equalityPoints.length === 0 && platforms.length > 0) { // Exclude the ground platform (last one) for (var pi = 0; pi < platforms.length - 1; pi++) { var plat = platforms[pi]; var eq = new EqualityPoint(); eq.x = plat.x; eq.y = plat.y - 80; equalityPoints.push(eq); game.addChild(eq); } } } } // Helper: Hero-platform collision function checkHeroPlatformCollision() { hero.isOnGround = false; for (var i = 0; i < platforms.length; i++) { var plat = platforms[i]; // Simple AABB collision, only check if hero is falling if (hero.vy >= 0) { var hx = hero.x, hy = hero.y; var px = plat.x, py = plat.y; var hw = hero.width, hh = hero.height; var pw = plat.width, ph = plat.height; // Check if hero's feet are just above platform if (hx + hw / 2 > px - pw / 2 && hx - hw / 2 < px + pw / 2) { if (hy > py - ph / 2 && hy < py + ph / 2 && hy - hero.vy <= py - ph / 2) { // Land on platform hero.y = py - ph / 2; hero.vy = 0; hero.isOnGround = true; } } } } // Prevent falling below ground if (hero.y > GROUND_Y) { hero.y = GROUND_Y; hero.vy = 0; hero.isOnGround = true; } } // Helper: Clamp hero inside screen function clampHero() { if (hero.x < hero.width / 2) hero.x = hero.width / 2; if (hero.x > GAME_WIDTH - hero.width / 2) hero.x = GAME_WIDTH - hero.width / 2; if (hero.y < 0) hero.y = 0; if (hero.y > GROUND_Y) hero.y = GROUND_Y; } // Touch controls: tap anywhere to move hero there game.down = function (x, y, obj) { if (isPopupActive) return; // Move hero to the tapped position, but keep feet on ground/platform hero.x = x; hero.y = y; hero.vx = 0; hero.vy = 0; hero.isOnGround = false; clampHero(); }; // Désactive le drag & jump, car le déplacement se fait par tap sur plateforme game.move = function (x, y, obj) {}; game.up = function (x, y, obj) {}; // Main update loop game.update = function () { if (isPopupActive) return; hero.update(); checkHeroPlatformCollision(); clampHero(); // Check collision with obstacles for (var i = 0; i < obstacles.length; i++) { if (hero.intersects(obstacles[i])) { handleObstacleCollision(); break; } } // Check collision with equality points for (var j = equalityPoints.length - 1; j >= 0; j--) { if (hero.intersects(equalityPoints[j])) { // If a correct answer was just given, allow collection if (canCollectEquality && pendingEqualityIdx === j) { handleEqualityCollision(j); break; } // Otherwise, only trigger popup if not already in process if (!canCollectEquality) { handleEqualityCollision(j); break; } } } }; // Start game resetGameState(); // Permet au joueur de recommencer le jeu après la victoire LK.on('youWin', function () { currentLevel = 1; resetGameState(); });
===================================================================
--- original.js
+++ change.js
@@ -392,17 +392,19 @@
currentLevel += 1;
resetGameState();
}
} else {
- // If no more equality points, respawn a new one on a random platform
+ // If no more equality points, respawn one on every platform (except ground)
if (equalityPoints.length === 0 && platforms.length > 0) {
- var idx = Math.floor(Math.random() * platforms.length);
- var plat = platforms[idx];
- var eq = new EqualityPoint();
- eq.x = plat.x;
- eq.y = plat.y - 80;
- equalityPoints.push(eq);
- game.addChild(eq);
+ // Exclude the ground platform (last one)
+ for (var pi = 0; pi < platforms.length - 1; pi++) {
+ var plat = platforms[pi];
+ var eq = new EqualityPoint();
+ eq.x = plat.x;
+ eq.y = plat.y - 80;
+ equalityPoints.push(eq);
+ game.addChild(eq);
+ }
}
}
}
// Helper: Hero-platform collision
Femme de couleur. In-Game asset. 2d. High contrast. No shadows
Bus. In-Game asset. 2d. High contrast. No shadows
Étoile de l'égalité. In-Game asset. 2d. High contrast. No shadows
FOND ROSE. In-Game asset. 2d. High contrast. No shadows
Fond d'écran ville. In-Game asset. 2d. High contrast. No shadows