User prompt
Ajoute la fonctionnaliteĢ qui permet au joueur de caresser ses dauphins (3 Dauphicoins par caresse et une caresse par dauphin toutes les minutes seulement) avec un bouton violet a texte blanc "caresser" sous chaque dauphin du joueur Par la meĢme occasion, fait en sorte que la progression du joueur et de ses dauphins (Nombre de Dauphicoins, dauphibouffe, cerceaux acheteĢs et posseĢder par les dauphins, niveaux des dauphins , noms des Dauphins) Soient sauvegardes ! Mais que le joueur puisse reset toute sa progression en appuyant sur le bouton rouge a texte noir "reset" quelque part dans L'ui āŖš” Consider importing and using the following plugins: @upit/storage.v1, @upit/tween.v1
User prompt
CorrigeĢ les probleĢmes de façon durable!!! āŖš” Consider importing and using the following plugins: @upit/storage.v1
User prompt
Please fix the bug: 'storage.get is not a function' in or related to this line: 'var dauphicoins = storage.get('dauphicoins') || 50;' Line Number: 311 āŖš” Consider importing and using the following plugins: @upit/storage.v1
User prompt
CorrigeĢ les erreurs et probleĢmes
User prompt
Please fix the bug: 'storage.get is not a function' in or related to this line: 'var dauphicoins = storage.get('dauphicoins') || 50;' Line Number: 311 āŖš” Consider importing and using the following plugins: @upit/storage.v1
User prompt
CorrigeĢ les problemes
User prompt
Ajoute la fonctionnaliteĢ qui permet au joueur de caresser ses dauphins (3 Dauphicoins par caresse et une caresse par dauphins toutes les 2 minutes) avec un bouton violet a texte blanc "caresser" sous chaque dauphin du joueur Par la meĢme occasion, fait en sorte que la progression du joueur et de ses dauphins (Nombre de Dauphicoins, dauphibouffe, cerceaux acheteĢs et posseĢder par les dauphins, niveaux des dauphins , noms des Dauphins) Soient sauvegardes de manieĢre persistante dans le local! Mais que le joueur puisse reset toute sa progression en appuyant sur le bouton rouge a texte noir "reset" quelque part dans L'ui , corrigeĢ les probleĢmes āŖš” Consider importing and using the following plugins: @upit/storage.v1
User prompt
Ajoute la fonctionnaliteĢ qui permet au joueur de caresser ses dauphins (3 Dauphicoins par caresse et une caresse par dauphins toutes les 2 minutes) avec un bouton violet a texte blanc "caresser" sous chaque dauphin du joueur Par la meĢme occasion, fait en sorte que la progression du joueur et de ses dauphins (Nombre de Dauphicoins, dauphibouffe, cerceaux acheteĢs et posseĢder par les dauphins, niveaux des dauphins , noms des Dauphins) Soient sauvegardes de manieĢre persistante dans le local! Mais que le joueur puisse reset toute sa progression en appuyant sur le bouton rouge a texte noir "reset" quelque part dans L'ui āŖš” Consider importing and using the following plugins: @upit/storage.v1
User prompt
Pour le keyboard qui permet au joueur de changer le nom d'un de ses dauphins, fait en sorte que chaque lettre ou chiffre soit afficheĢ soit forme de texte noir sur sa touche correspondante (fait aussi en sorte que les touche ne se chevauchent pas et qu'on voit le texte du chiffre ou de la lettre correspondante sur la touche)
User prompt
Fait en sorte que lorsque le joueur a acheteĢ un cerceau a un de ses dauphins, le cerveau s'affiche en petit de la meĢme façon comme il est dans les assets a coĢteĢ du dauphin qui le posseĢde Quand le dauphin posseĢde plusieurs cerceaux, les cerceaux sont les uns a coĢteĢ des autres en petit a coĢteĢ du dauphin
User prompt
Please fix the bug: 'Uncaught TypeError: selectedDolphinForNaming.children[0].setText is not a function' in or related to this line: 'selectedDolphinForNaming.children[0].setText(currentInputText);' Line Number: 738
User prompt
Please fix the bug: 'Uncaught TypeError: selectedDolphinForNaming.children[2].setText is not a function' in or related to this line: 'selectedDolphinForNaming.children[2].setText(currentInputText);' Line Number: 738
User prompt
affiche chaque lettre et chiffre du keyboard de façon lisible sur sa touche correspondante (toutes les lettres et chiffres)
User prompt
Affiche chaque lettre ou chiffr du keyboard correspondant a sa touche au centre de sa touche , et ajoute le boutton effacer au keyboard, qui permet au joueur de supprimer des lettres et chiffres (utile pour reĢcrire un autre nom) pour toutes les lettres et chiffres, le boutton pour effacer le nom doit eĢtre disponible dans L'ui du keyboard, et effacer le nom actuel du dauphin quand le joueur appuie dessus pour qu'il puisse en saisir un nom tout neuf
User prompt
Affiche chaque lettre ou chiffr du keyboard correspondant a sa touche au centre de sa touche , et ajoute le boutton effacer au keyboard, qui permet au joueur de supprimer des lettres et chiffres (utile pour reĢcrire un autre nom) pour toutes les lettres et chiffres, et ajoute les cerceaux de la boutique aux assets etc...
User prompt
Affiche chaque lettre ou chiffr du keyboard correspondant a sa touche au centre de sa touche , et ajoute le boutton effacer au keyboard, qui permet au joueur de supprimer des lettres et chiffres (utile pour reĢcrire un autre nom)
User prompt
AmeĢliore la visibiliteĢ des articles dans la boutique, et la visibiliteĢ des lettres sur le keyboard de choix de nom pour les dauphins (ajoute aussi au keyboard un boutton pour supprimer des lettres) , affiche chaque lettre du keyboard sur le bouton correspondant
User prompt
AmeĢliore la visibiliteĢ des articles dans la boutique, et la visibiliteĢ des lettres sur le keyboard de choix de nom pour les dauphins (ajoute aussi au keyboard un boutton pour supprimer des lettres)
User prompt
Ajoute les diffeĢrents types de cerceaux et mets les en vente a la boutique avec leurs prix respectifs : - cerceaux cute (prix : 25 Dauphicoins) - cerceau tricolore (prix : 34 Dauphicoins) - cerceau enflammeĢ (prix : 45 Dauphicoins) - cerceau de l'oceĢan (prix : 50 dauphins) - cerceau doreĢ (le cerveau deĢjaĢ existant dans le jeu) Lorsque le joueur acheĢte un cerceau, et posseĢde plusieurs dauphins, Le jeu lui demande aĢ quel dauphin il veut offrir le cerceau avec un petit eĢcran ou le joueur dois appuyer sur le nom de son dauphin correspondant (D'ailleurs implante aussi une fonctionnaliteĢ qui permet au joueur de personnalisalise et modifier le nom de son dauphin, Le joueur peut renommer un dauphin en appuyant sur un boutton noir a texte blanc "Nommer un dauphin", dans L'ui du jeu, un eĢcran s'affiche avec sa liste de dauphins, et le joueur doit appuyer sur le nom actuel de son dauphin pour le renommer, Puis un eĢcran keyboard apparaiĢt avec toutes les lettres de les chiffres requis pour donner un nom s'ouvre, le joueur peut alors eĢcrire le nouveau nom de son dauphin et le valider pour renommer son dauphin
User prompt
Les pieĢces doivent eĢtre des Dauphicoins Et la bouffe doit eĢtre de la dauphibouffe
User prompt
Le jeu doit eĢtre en français
User prompt
Please fix the bug: 'Uncaught TypeError: Cannot read properties of undefined (reading 'toGlobal')' in or related to this line: 'var localPos = shopModal.toLocal(obj.parent.toGlobal(obj.position));' Line Number: 363
Code edit (1 edits merged)
Please save this source code
User prompt
Dauphinya - Dolphin Care Adventure
Initial prompt
Je souhaite creĢer un jeu mobile 2D complet et immersif appeleĢ "Dauphinya", un jeu d'eĢlevage de dauphins mignon, relaxant et apaisant. L'objectif est de fournir une expeĢrience ludique ouĢ les joueurs peuvent creĢer un lien unique avec leurs dauphins personnaliseĢs, les faire progresser et enrichir leur monde sous-marin. 1. Concept GeĢneĢral et Ambiance * Titre du Jeu : Dauphinya * Genre : Simulation d'eĢlevage / Gestion de creĢatures, jeu mobile relaxant. * Plateforme : Mobile (iOS/Android). * Style Visuel : 2D cartoon, treĢs adorable, avec des couleurs vives et un univers sous-marin feĢerique et enchanteur. L'interface utilisateur (UI) doit eĢtre intuitive et estheĢtique, en accord avec le theĢme. * Objectif du Joueur : AcqueĢrir, eĢlever et cheĢrir une collection de dauphins uniques, les faire monter de niveau, personnaliser leur environnement et progresser en tant qu'eĢleveur de dauphins. 2. EĢleĢments Visuels (Assets 2D) * SceĢnes : * Aquarium Principal : Fond marin dynamique avec coraux coloreĢs, algues flottantes, rochers doux, et effets de lumieĢre sous-marine (bulles, rayons solaires filtrant). L'arrieĢre-plan peut eĢvoluer visuellement en fonction du niveau du joueur (plus d'eĢleĢments deĢcoratifs deĢbloqueĢs, etc.). * EĢcran de Boutique : Interface claire pour l'achat de dauphins et d'objets. * EĢcran de Quiz : Interface pour les questions et reĢponses. * Sprites des Dauphins : * ModeĢles de base de dauphin mignon en 2D, avec diffeĢrentes poses : nage lente, nage rapide, repos, saut hors de l'eau. * Expressions / EĢtats : Heureux (cÅurs flottants, eĢtincelles), AffameĢ (bulle de penseĢe avec un poisson), Neutre, Triste (si neĢgligeĢ). * Animations cleĢs : Caresse (reĢaction au toucher), Manger (animation de consommation de nourriture), Saut (animation ludique). * Variations : PossibiliteĢ future de diffeĢrentes espeĢces ou couleurs/patterns de dauphins. * Objets d'Interaction et DeĢcoration (Sprites 2D) : * Nourriture : Sprite de "Dauphibouffe" (petits poissons styliseĢs ou granuleĢs). * Cerceaux : Sprites de cerceaux uniques (ex: "Cute", "Tricolore", "EnflammeĢ", "de l'OceĢan"). Ces cerceaux s'affichent par-dessus le dauphin. * EĢleĢments d'Interface (UI - Sprites 2D) : * IcoĢnes des Monnaies : "Dauphicoin" (pieĢce doreĢe avec un dauphin), "Dauphibouffe" (sachet/poisson). * Affichage des Monnaies : Compteurs numeĢriques clairs en haut de l'eĢcran. * Barres de Progression : * Barre de Bonheur par dauphin (au-dessus du dauphin). * Barre de Niveau pour chaque dauphin (au-dessus du dauphin, sous la barre de bonheur). * Barre de Niveau du Joueur (en haut de l'eĢcran ou dans un panneau deĢdieĢ). * Boutons Principaux : "Nourrir", "Caresse", "Boutique", "Quiz". Design agreĢable au toucher. * Pop-ups et Notifications : Messages pour gains, monteĢes de niveau, rappels, etc. 3. SysteĢmes et Logiques de Jeu 3.1. Gestion des Dauphins * Acquisition de Dauphins : * Le joueur commence avec un dauphin initial. * La boutique permet d'acheter de nouveaux dauphins en utilisant des Dauphicoins. Chaque dauphin a un couĢt diffeĢrent. * Lors de l'achat, le joueur peut nommer son nouveau dauphin (champ de texte). * Bonheur des Dauphins : * Chaque dauphin posseĢde une barre de bonheur (eĢchelle de 0 aĢ 100). * Le bonheur diminue lentement avec le temps (neĢcessite des soins reĢguliers). * Actions pour augmenter le bonheur : * Caresse : En cliquant sur le dauphin. Augmente le bonheur de X points (ex: +10). Limite : Peut eĢtre effectueĢe une fois toutes les 2 minutes par dauphin. Rapport des Dauphicoins (ex: +5 Dauphicoins). Animation de caresse et affichage de cÅurs. * Nourrir : Utilise 1 uniteĢ de Dauphibouffe. Augmente le bonheur de Y points (ex: +20). Animation de repas. NeĢcessite que le dauphin ne soit pas au bonheur maximum. * Cadeaux (Cerceaux) : L'eĢquipement d'un cerceau sur un dauphin augmente son bonheur de manieĢre significative et/ou passivement. * Niveau des Dauphins : * Chaque dauphin posseĢde un niveau (ex: Niveau 1, 2, 3...). * Le dauphin monte de niveau lorsque sa barre de bonheur atteint 100%. La barre se reĢinitialise. * Chaque monteĢe de niveau : * Augmente les points de bonheur maximum du dauphin (si la barre va au-delaĢ de 100). * Peut deĢbloquer de nouvelles animations ou capaciteĢs speĢcifiques au dauphin (aĢ deĢfinir ulteĢrieurement). * Contribue aĢ l'expeĢrience du joueur (voir ci-dessous). * Peut donner une petite reĢcompense de Dauphibouffe (ex: +1). 3.2. Monnaies du Jeu * Dauphicoins (Monnaie Principale) : * Obtention : Principalement via les caresses de dauphins. Potentiellement via des queĢtes ou succeĢs. * Utilisation : Achat de nouveaux dauphins, achat de cerceaux, achat de Dauphibouffe (si neĢcessaire). * Dauphibouffe (Ressource) : * Obtention : En reĢpondant correctement aux Quiz Marins. Potentiellement en reĢcompense de monteĢes de niveau de dauphin ou queĢtes. * Utilisation : Nourrir les dauphins. 3.3. SysteĢme de Quiz Marins * AcceĢs : Via un bouton deĢdieĢ sur l'eĢcran principal. * MeĢcanisme : Le joueur reĢpond aĢ des questions aĢ choix multiples sur le theĢme de l'oceĢan, des dauphins et de la vie marine. * ReĢcompense : Chaque bonne reĢponse (ou seĢrie de bonnes reĢponses) rapporte de la Dauphibouffe. * Database : Une base de donneĢes de questions/reĢponses varieĢes. 3.4. Boutique * Contenu : * Nouveaux Dauphins : Liste des dauphins disponibles aĢ l'achat, avec leur couĢt en Dauphicoins. * Cerceaux : Liste des cerceaux uniques aĢ acheter. Chaque cerceau a un couĢt en Dauphicoins et une description. * Exemples : "Cerceau Cute", "Cerceau Tricolore", "Cerceau EnflammeĢ" (avec un petit effet visuel de flammes 2D), "Cerceau de l'OceĢan" (avec un effet d'eau scintillante). * Interaction : Le joueur seĢlectionne un article, confirme l'achat. Pour les cerceaux, une fois acheteĢs, ils sont disponibles dans l'inventaire du joueur pour eĢtre eĢquipeĢs sur un dauphin speĢcifique. 3.5. Progression du Joueur * Niveau du Joueur : Le joueur a un niveau global qui augmente au fur et aĢ mesure qu'il prend soin de ses dauphins. * ExpeĢrience du Joueur : Chaque fois qu'un dauphin monte de niveau, le joueur gagne de l'expeĢrience (XP). * MonteĢe de Niveau du Joueur : Atteindre un certain seuil d'XP deĢbloque un nouveau niveau de joueur. * ReĢcompenses du Niveau Joueur : * DeĢblocage de nouvelles espeĢces de dauphins dans la boutique. * DeĢblocage de nouveaux types de cerceaux ou deĢcorations pour l'aquarium. * ReĢcompenses ponctuelles de Dauphicoins ou Dauphibouffe. 4. ExpeĢrience Utilisateur et QualiteĢ de Vie * Interface Intuitive : Tous les eĢleĢments UI doivent eĢtre clairs, reĢactifs et faciles aĢ comprendre pour un public mobile. * Musique et Sons : * Musique d'ambiance : Relaxante, feĢerique et apaisante pour l'aquarium. * Sons SFX : Sons de dauphins (clics, sifflements joyeux), sons de caresse, sons de bulles, sons de pieĢces (Dauphicoins), sons de notification, sons de succeĢs pour les monteĢes de niveau. * Notifications : Rappels amicaux si un dauphin est affameĢ ou si une caresse est de nouveau disponible. * Nommage : Le joueur doit pouvoir nommer facilement ses dauphins. 5. Demande Initiale aĢ Upit AI Game Maker En me basant sur cette description, je souhaite que vous commenciez par geĢneĢrer les eĢleĢments de base suivants : * Une sceĢne d'aquarium 2D avec un arrieĢre-plan marin geĢneĢrique. * Un sprite de dauphin de base avec une animation de nage simple. * Un systeĢme pour instancier ce dauphin dans la sceĢne. * Les eĢleĢments UI de base : affichage des Dauphicoins et de la Dauphibouffe, et une barre de bonheur pour le dauphin. * La logique d'interaction "Caresse" : un clic sur le dauphin augmente sa barre de bonheur et donne des Dauphicoins, avec le timer de 2 minutes. Afficher un message ou un effet visuel pour indiquer que la caresse est "en cooldown". * La logique d'interaction "Nourrir" : un clic sur un bouton "Nourrir" utilise de la Dauphibouffe et augmente le bonheur du dauphin. * Un meĢcanisme pour nommer le dauphin lors de son "apparition". Je preĢvois ensuite de fournir des requeĢtes plus speĢcifiques pour les assets deĢtailleĢs (types de cerceaux, autres dauphins, eĢleĢments de quiz) et pour affiner les logiques de progression, la boutique et les effets visuels.
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); var storage = LK.import("@upit/storage.v1"); /**** * Classes ****/ var Coral = Container.expand(function (type, x, y) { var self = Container.call(this); var coralTypes = ['coral1', 'coral2', 'coral3']; var coralAsset = coralTypes[type % 3]; var coral = self.attachAsset(coralAsset, { anchorX: 0.5, anchorY: 1 }); self.x = x || 0; self.y = y || 0; self.update = function () { // Gentle swaying animation coral.rotation = Math.sin(Date.now() * 0.0008) * 0.1; }; return self; }); var Dolphin = Container.expand(function (name, x, y) { var self = Container.call(this); // Dolphin properties self.dolphinName = name || 'Flipper'; self.happiness = Math.floor(Math.random() * 50) + 25; self.level = 1; self.lastPetTime = 0; self.petCooldown = 120000; // 2 minutes self.maxHappiness = 100; // Graphics var dolphinBody = self.attachAsset('dolphin', { anchorX: 0.5, anchorY: 0.5 }); // Happiness bar background var happinessBarBg = self.attachAsset('happinessBarBg', { anchorX: 0.5, anchorY: 0.5, x: 0, y: -80 }); // Happiness bar var happinessBar = self.attachAsset('happinessBar', { anchorX: 0, anchorY: 0.5, x: -80, y: -80 }); // Cooldown bar background var cooldownBarBg = self.attachAsset('cooldownBarBg', { anchorX: 0.5, anchorY: 0.5, x: 0, y: -55 }); // Cooldown bar var cooldownBar = self.attachAsset('cooldownBar', { anchorX: 0, anchorY: 0.5, x: -80, y: -55 }); // Name text var nameText = new Text2(self.dolphinName, { size: 36, fill: 0xFFFFFF }); nameText.anchor.set(0.5, 0.5); nameText.x = 0; nameText.y = -120; self.addChild(nameText); // Level text var levelText = new Text2('Niv.' + self.level, { size: 28, fill: 0xFFEB3B }); levelText.anchor.set(0.5, 0.5); levelText.x = 0; levelText.y = -100; self.addChild(levelText); self.updateHappinessBar = function () { var percentage = self.happiness / self.maxHappiness; happinessBar.scaleX = percentage; if (self.happiness >= self.maxHappiness) { self.levelUp(); } }; self.updateCooldownBar = function () { var now = Date.now(); var timeSinceLastPet = now - self.lastPetTime; var cooldownRemaining = Math.max(0, self.petCooldown - timeSinceLastPet); var percentage = cooldownRemaining / self.petCooldown; cooldownBar.scaleX = percentage; cooldownBar.visible = percentage > 0; cooldownBarBg.visible = percentage > 0; }; self.canPet = function () { var now = Date.now(); return now - self.lastPetTime >= self.petCooldown; }; self.pet = function () { if (!self.canPet()) return false; self.lastPetTime = Date.now(); self.happiness = Math.min(self.happiness + 10, self.maxHappiness); dauphicoins += 5; // Pet animation tween(dolphinBody, { scaleX: 1.2, scaleY: 1.2 }, { duration: 200, easing: tween.easeOut }); tween(dolphinBody, { scaleX: 1, scaleY: 1 }, { duration: 200, easing: tween.easeIn }); LK.getSound('pet').play(); LK.getSound('coin').play(); self.updateHappinessBar(); updateUI(); return true; }; self.feed = function () { if (dauphibouffe <= 0) return false; dauphibouffe--; self.happiness = Math.min(self.happiness + 20, self.maxHappiness); // Feed animation tween(dolphinBody, { tint: 0x8bc34a }, { duration: 300 }); tween(dolphinBody, { tint: 0x4fa8d8 }, { duration: 300 }); self.updateHappinessBar(); updateUI(); return true; }; self.levelUp = function () { self.level++; self.happiness = 0; self.maxHappiness += 10; trainerXP += 10; // Level up animation LK.effects.flashObject(self, 0xffeb3b, 1000); LK.getSound('levelup').play(); levelText.setText('Niv.' + self.level); self.updateHappinessBar(); updateUI(); // Check trainer level up var newTrainerLevel = Math.floor(trainerXP / 50) + 1; if (newTrainerLevel > trainerLevel) { trainerLevel = newTrainerLevel; updateUI(); } }; self.down = function (x, y, obj) { if (self.canPet()) { self.pet(); } else { // Show feed option if has food if (dauphibouffe > 0) { self.feed(); } } }; self.update = function () { self.updateCooldownBar(); // Gentle floating animation dolphinBody.y = Math.sin(Date.now() * 0.001) * 10; }; // Position dolphin self.x = x || 0; self.y = y || 0; // Initialize bars self.updateHappinessBar(); self.updateCooldownBar(); return self; }); var Hoop = Container.expand(function (x, y) { var self = Container.call(this); var hoop = self.attachAsset('hoop', { anchorX: 0.5, anchorY: 0.5 }); // Make hoop hollow by reducing alpha in center hoop.alpha = 0.3; self.hoopType = 0; // Default to golden hoop self.attachedDolphin = null; self.x = x || 0; self.y = y || 0; self.update = function () { // Gentle rotation hoop.rotation += 0.01; // Apply color based on hoop type if (hoopTypes && hoopTypes[self.hoopType]) { hoop.tint = hoopTypes[self.hoopType].color; } // Follow attached dolphin if any if (self.attachedDolphin) { self.x = self.attachedDolphin.x; self.y = self.attachedDolphin.y - 50; } }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x0066cc }); /**** * Game Code ****/ // Game variables var dolphins = []; var corals = []; var hoops = []; var dauphicoins = storage.dauphicoins || 50; var dauphibouffe = storage.dauphibouffe || 3; var trainerLevel = storage.trainerLevel || 1; var trainerXP = storage.trainerXP || 0; // Hoop types with their properties var hoopTypes = [{ name: 'Cerceau Doré', price: 50, color: 0xFFD700 }, { name: 'Cerceau Cute', price: 25, color: 0xFF69B4 }, { name: 'Cerceau Tricolore', price: 34, color: 0x0000FF }, { name: 'Cerceau Enflammé', price: 45, color: 0xFF4500 }, { name: 'Cerceau de l\'Océan', price: 50, color: 0x00CED1 }]; // UI elements var coinText, foodText, trainerText; var shopModal = null; var quizModal = null; var hoopSelectionModal = null; var dolphinSelectionModal = null; var namingModal = null; var keyboardModal = null; var selectedHoopType = null; var selectedDolphinForNaming = null; var currentInputText = ''; // Quiz questions var quizQuestions = [{ question: "Qu'utilisent les dauphins pour l'écholocation ?", answers: ["Ondes sonores", "Ondes lumineuses", "Champs magnétiques", "Champs électriques"], correct: 0 }, { question: "Combien de temps les dauphins peuvent-ils retenir leur respiration ?", answers: ["5 minutes", "15 minutes", "30 minutes", "1 heure"], correct: 1 }, { question: "Comment appelle-t-on un groupe de dauphins ?", answers: ["Banc", "Pod", "Troupeau", "Meute"], correct: 1 }, { question: "Comment les dauphins dorment-ils ?", answers: ["Complètement inconscients", "Une moitié du cerveau à la fois", "Ne dorment jamais", "Seulement la nuit"], correct: 1 }, { question: "Quelle est la plus grande espèce de dauphin ?", answers: ["Grand dauphin", "Orque", "Dauphin à long bec", "Dauphin sombre"], correct: 1 }]; function updateUI() { coinText.setText('Dauphicoins: ' + dauphicoins); foodText.setText('Dauphibouffe: ' + dauphibouffe); trainerText.setText('Dresseur Niv.' + trainerLevel + ' (' + trainerXP + ' XP)'); // Save to storage storage.dauphicoins = dauphicoins; storage.dauphibouffe = dauphibouffe; storage.trainerLevel = trainerLevel; storage.trainerXP = trainerXP; } function createShopModal() { if (shopModal) return; shopModal = new Container(); var modalBg = shopModal.attachAsset('modalBg', { anchorX: 0.5, anchorY: 0.5, alpha: 0.8 }); var panel = shopModal.attachAsset('panel', { anchorX: 0.5, anchorY: 0.5 }); var titleText = new Text2('Boutique des Dauphins', { size: 60, fill: 0xFFFFFF }); titleText.anchor.set(0.5, 0.5); titleText.x = 0; titleText.y = -300; shopModal.addChild(titleText); // New dolphin button var newDolphinBtn = shopModal.attachAsset('button', { anchorX: 0.5, anchorY: 0.5, x: 0, y: -150, scaleX: 1.2, scaleY: 1.2 }); var dolphinBtnText = new Text2('Nouveau Dauphin (100 Dauphicoins)', { size: 40, fill: 0x000000 }); dolphinBtnText.anchor.set(0.5, 0.5); dolphinBtnText.x = 0; dolphinBtnText.y = -150; shopModal.addChild(dolphinBtnText); // Hoop buttons for each type for (var h = 0; h < hoopTypes.length; h++) { var hoopBtn = shopModal.attachAsset('button', { anchorX: 0.5, anchorY: 0.5, x: (h % 3 - 1) * 250, y: -30 + Math.floor(h / 3) * 120, scaleX: 1.1, scaleY: 1.1 }); var hoopBtnText = new Text2(hoopTypes[h].name + ' (' + hoopTypes[h].price + ' Dauphicoins)', { size: 28, fill: 0x000000 }); hoopBtnText.anchor.set(0.5, 0.5); hoopBtnText.x = (h % 3 - 1) * 250; hoopBtnText.y = -30 + Math.floor(h / 3) * 120; shopModal.addChild(hoopBtnText); } // Close button var closeBtn = shopModal.attachAsset('button', { anchorX: 0.5, anchorY: 0.5, x: 0, y: 200, scaleX: 0.8, scaleY: 0.8 }); var closeBtnText = new Text2('Fermer', { size: 36, fill: 0xFFFFFF }); closeBtnText.anchor.set(0.5, 0.5); closeBtnText.x = 0; closeBtnText.y = 200; shopModal.addChild(closeBtnText); shopModal.x = 1024; shopModal.y = 1366; shopModal.down = function (x, y, obj) { var localPos; if (obj.parent && obj.parent.toGlobal) { localPos = shopModal.toLocal(obj.parent.toGlobal(obj.position)); } else { localPos = { x: x, y: y }; } // Check new dolphin button if (localPos.x >= -100 && localPos.x <= 100 && localPos.y >= -180 && localPos.y <= -120) { if (dauphicoins >= 100) { dauphicoins -= 100; var newDolphin = new Dolphin('Dauphin ' + (dolphins.length + 1), 400 + dolphins.length % 3 * 300, 800 + Math.floor(dolphins.length / 3) * 300); dolphins.push(newDolphin); game.addChild(newDolphin); updateUI(); LK.getSound('coin').play(); } } // Check hoop buttons for (var h = 0; h < hoopTypes.length; h++) { var btnX = (h % 3 - 1) * 250; var btnY = -30 + Math.floor(h / 3) * 120; if (localPos.x >= btnX - 110 && localPos.x <= btnX + 110 && localPos.y >= btnY - 40 && localPos.y <= btnY + 40) { if (dauphicoins >= hoopTypes[h].price) { selectedHoopType = h; game.removeChild(shopModal); shopModal = null; createHoopSelectionModal(); } break; } } // Check close button if (localPos.x >= -80 && localPos.x <= 80 && localPos.y >= 170 && localPos.y <= 230) { game.removeChild(shopModal); shopModal = null; } }; game.addChild(shopModal); } function createHoopSelectionModal() { if (hoopSelectionModal || dolphins.length === 0) return; hoopSelectionModal = new Container(); var modalBg = hoopSelectionModal.attachAsset('modalBg', { anchorX: 0.5, anchorY: 0.5, alpha: 0.8 }); var panel = hoopSelectionModal.attachAsset('panel', { anchorX: 0.5, anchorY: 0.5 }); var titleText = new Text2('Choisir un Dauphin pour le Cerceau', { size: 50, fill: 0xFFFFFF }); titleText.anchor.set(0.5, 0.5); titleText.x = 0; titleText.y = -300; hoopSelectionModal.addChild(titleText); // Dolphin selection buttons for (var d = 0; d < dolphins.length; d++) { var dolphinBtn = hoopSelectionModal.attachAsset('button', { anchorX: 0.5, anchorY: 0.5, x: 0, y: -200 + d * 80 }); var dolphinBtnText = new Text2(dolphins[d].dolphinName, { size: 36, fill: 0xFFFFFF }); dolphinBtnText.anchor.set(0.5, 0.5); dolphinBtnText.x = 0; dolphinBtnText.y = -200 + d * 80; hoopSelectionModal.addChild(dolphinBtnText); } // Cancel button var cancelBtn = hoopSelectionModal.attachAsset('button', { anchorX: 0.5, anchorY: 0.5, x: 0, y: 200, scaleX: 0.8, scaleY: 0.8 }); var cancelBtnText = new Text2('Annuler', { size: 36, fill: 0xFFFFFF }); cancelBtnText.anchor.set(0.5, 0.5); cancelBtnText.x = 0; cancelBtnText.y = 200; hoopSelectionModal.addChild(cancelBtnText); hoopSelectionModal.x = 1024; hoopSelectionModal.y = 1366; hoopSelectionModal.down = function (x, y, obj) { var localPos; if (obj.parent && obj.parent.toGlobal) { localPos = hoopSelectionModal.toLocal(obj.parent.toGlobal(obj.position)); } else { localPos = { x: x, y: y }; } // Check dolphin buttons for (var d = 0; d < dolphins.length; d++) { var buttonY = -200 + d * 80; if (localPos.x >= -100 && localPos.x <= 100 && localPos.y >= buttonY - 30 && localPos.y <= buttonY + 30) { // Purchase hoop for selected dolphin dauphicoins -= hoopTypes[selectedHoopType].price; var newHoop = new Hoop(dolphins[d].x, dolphins[d].y - 50); newHoop.hoopType = selectedHoopType; newHoop.attachedDolphin = dolphins[d]; hoops.push(newHoop); game.addChild(newHoop); updateUI(); LK.getSound('coin').play(); game.removeChild(hoopSelectionModal); hoopSelectionModal = null; break; } } // Check cancel button if (localPos.x >= -80 && localPos.x <= 80 && localPos.y >= 170 && localPos.y <= 230) { game.removeChild(hoopSelectionModal); hoopSelectionModal = null; } }; game.addChild(hoopSelectionModal); } function createDolphinNamingModal() { if (namingModal || dolphins.length === 0) return; namingModal = new Container(); var modalBg = namingModal.attachAsset('modalBg', { anchorX: 0.5, anchorY: 0.5, alpha: 0.8 }); var panel = namingModal.attachAsset('panel', { anchorX: 0.5, anchorY: 0.5 }); var titleText = new Text2('Choisir un Dauphin à Renommer', { size: 50, fill: 0xFFFFFF }); titleText.anchor.set(0.5, 0.5); titleText.x = 0; titleText.y = -300; namingModal.addChild(titleText); // Dolphin selection buttons for (var d = 0; d < dolphins.length; d++) { var dolphinBtn = namingModal.attachAsset('button', { anchorX: 0.5, anchorY: 0.5, x: 0, y: -200 + d * 80 }); var dolphinBtnText = new Text2(dolphins[d].dolphinName, { size: 36, fill: 0xFFFFFF }); dolphinBtnText.anchor.set(0.5, 0.5); dolphinBtnText.x = 0; dolphinBtnText.y = -200 + d * 80; namingModal.addChild(dolphinBtnText); } // Cancel button var cancelBtn = namingModal.attachAsset('button', { anchorX: 0.5, anchorY: 0.5, x: 0, y: 200, scaleX: 0.8, scaleY: 0.8 }); var cancelBtnText = new Text2('Annuler', { size: 36, fill: 0xFFFFFF }); cancelBtnText.anchor.set(0.5, 0.5); cancelBtnText.x = 0; cancelBtnText.y = 200; namingModal.addChild(cancelBtnText); namingModal.x = 1024; namingModal.y = 1366; namingModal.down = function (x, y, obj) { var localPos; if (obj.parent && obj.parent.toGlobal) { localPos = namingModal.toLocal(obj.parent.toGlobal(obj.position)); } else { localPos = { x: x, y: y }; } // Check dolphin buttons for (var d = 0; d < dolphins.length; d++) { var buttonY = -200 + d * 80; if (localPos.x >= -100 && localPos.x <= 100 && localPos.y >= buttonY - 30 && localPos.y <= buttonY + 30) { selectedDolphinForNaming = dolphins[d]; currentInputText = dolphins[d].dolphinName; game.removeChild(namingModal); namingModal = null; createKeyboardModal(); break; } } // Check cancel button if (localPos.x >= -80 && localPos.x <= 80 && localPos.y >= 170 && localPos.y <= 230) { game.removeChild(namingModal); namingModal = null; } }; game.addChild(namingModal); } function createKeyboardModal() { if (keyboardModal) return; keyboardModal = new Container(); var modalBg = keyboardModal.attachAsset('modalBg', { anchorX: 0.5, anchorY: 0.5, alpha: 0.8 }); var panel = keyboardModal.attachAsset('panel', { anchorX: 0.5, anchorY: 0.5 }); var titleText = new Text2('Nouveau Nom', { size: 50, fill: 0xFFFFFF }); titleText.anchor.set(0.5, 0.5); titleText.x = 0; titleText.y = -350; keyboardModal.addChild(titleText); // Input display var inputText = new Text2(currentInputText, { size: 40, fill: 0xFFEB3B }); inputText.anchor.set(0.5, 0.5); inputText.x = 0; inputText.y = -280; keyboardModal.addChild(inputText); // Keyboard layout var keyboard = [['A', 'B', 'C', 'D', 'E', 'F', 'G'], ['H', 'I', 'J', 'K', 'L', 'M', 'N'], ['O', 'P', 'Q', 'R', 'S', 'T', 'U'], ['V', 'W', 'X', 'Y', 'Z', '1', '2'], ['3', '4', '5', '6', '7', '8', '9'], ['0', 'ESPACE', 'EFFACER', 'VALIDER']]; for (var row = 0; row < keyboard.length; row++) { for (var col = 0; col < keyboard[row].length; col++) { var key = keyboard[row][col]; var keyBtn = keyboardModal.attachAsset('button', { anchorX: 0.5, anchorY: 0.5, x: (col - 3) * 90, y: -150 + row * 70, scaleX: key.length > 1 ? 1.4 : 1.0, scaleY: 1.0 }); var keyText = new Text2(key, { size: key.length > 1 ? 24 : 32, fill: 0x000000 }); keyText.anchor.set(0.5, 0.5); keyText.x = (col - 3) * 90; keyText.y = -150 + row * 70; keyboardModal.addChild(keyText); } } keyboardModal.x = 1024; keyboardModal.y = 1366; keyboardModal.down = function (x, y, obj) { var localPos; if (obj.parent && obj.parent.toGlobal) { localPos = keyboardModal.toLocal(obj.parent.toGlobal(obj.position)); } else { localPos = { x: x, y: y }; } // Check keyboard buttons for (var row = 0; row < keyboard.length; row++) { for (var col = 0; col < keyboard[row].length; col++) { var key = keyboard[row][col]; var keyX = (col - 3) * 90; var keyY = -150 + row * 70; var keyWidth = key.length > 1 ? 70 : 45; if (localPos.x >= keyX - keyWidth && localPos.x <= keyX + keyWidth && localPos.y >= keyY - 35 && localPos.y <= keyY + 35) { if (key === 'ESPACE') { currentInputText += ' '; } else if (key === 'EFFACER') { currentInputText = currentInputText.slice(0, -1); } else if (key === 'VALIDER') { if (currentInputText.length > 0 && selectedDolphinForNaming) { selectedDolphinForNaming.dolphinName = currentInputText; // Update dolphin name display selectedDolphinForNaming.children[2].setText(currentInputText); } game.removeChild(keyboardModal); keyboardModal = null; selectedDolphinForNaming = null; currentInputText = ''; return; } else if (currentInputText.length < 15) { currentInputText += key; } inputText.setText(currentInputText); return; } } } }; game.addChild(keyboardModal); } function createQuizModal() { if (quizModal) return; var currentQuestion = quizQuestions[Math.floor(Math.random() * quizQuestions.length)]; quizModal = new Container(); var modalBg = quizModal.attachAsset('modalBg', { anchorX: 0.5, anchorY: 0.5, alpha: 0.8 }); var panel = quizModal.attachAsset('panel', { anchorX: 0.5, anchorY: 0.5 }); var titleText = new Text2('Quiz Marin', { size: 60, fill: 0xFFFFFF }); titleText.anchor.set(0.5, 0.5); titleText.x = 0; titleText.y = -350; quizModal.addChild(titleText); var questionText = new Text2(currentQuestion.question, { size: 44, fill: 0xFFFFFF }); questionText.anchor.set(0.5, 0.5); questionText.x = 0; questionText.y = -250; quizModal.addChild(questionText); // Answer buttons for (var i = 0; i < currentQuestion.answers.length; i++) { var answerBtn = quizModal.attachAsset('button', { anchorX: 0.5, anchorY: 0.5, x: 0, y: -100 + i * 80 }); var answerText = new Text2(currentQuestion.answers[i], { size: 36, fill: 0xFFFFFF }); answerText.anchor.set(0.5, 0.5); answerText.x = 0; answerText.y = -100 + i * 80; quizModal.addChild(answerText); } quizModal.x = 1024; quizModal.y = 1366; quizModal.down = function (x, y, obj) { var localPos; if (obj.parent && obj.parent.toGlobal) { localPos = quizModal.toLocal(obj.parent.toGlobal(obj.position)); } else { localPos = { x: x, y: y }; } // Check answer buttons for (var i = 0; i < currentQuestion.answers.length; i++) { var buttonY = -100 + i * 80; if (localPos.x >= -100 && localPos.x <= 100 && localPos.y >= buttonY - 30 && localPos.y <= buttonY + 30) { if (i === currentQuestion.correct) { dauphibouffe += 2; LK.getSound('correct').play(); LK.effects.flashScreen(0x4caf50, 500); } else { LK.effects.flashScreen(0xf44336, 500); } updateUI(); game.removeChild(quizModal); quizModal = null; break; } } }; game.addChild(quizModal); } // Create background corals for (var i = 0; i < 8; i++) { var coral = new Coral(i, 200 + i * 250, 2700 - Math.random() * 200); corals.push(coral); game.addChild(coral); } // Create starting dolphin var firstDolphin = new Dolphin('Flipper', 1024, 1200); dolphins.push(firstDolphin); game.addChild(firstDolphin); // Create UI coinText = new Text2('Dauphicoins: ' + dauphicoins, { size: 48, fill: 0xFFEB3B }); coinText.anchor.set(0, 0); coinText.x = 120; coinText.y = 50; LK.gui.topLeft.addChild(coinText); foodText = new Text2('Dauphibouffe: ' + dauphibouffe, { size: 48, fill: 0x8BC34A }); foodText.anchor.set(0, 0); foodText.x = 120; foodText.y = 120; LK.gui.topLeft.addChild(foodText); trainerText = new Text2('Dresseur Niv.' + trainerLevel + ' (' + trainerXP + ' XP)', { size: 48, fill: 0xFFFFFF }); trainerText.anchor.set(0.5, 0); trainerText.x = 0; trainerText.y = 50; LK.gui.top.addChild(trainerText); // Shop button var shopBtn = LK.gui.bottomLeft.attachAsset('shopButton', { anchorX: 0, anchorY: 1, x: 50, y: -50 }); var shopBtnText = new Text2('Boutique', { size: 36, fill: 0xFFFFFF }); shopBtnText.anchor.set(0, 1); shopBtnText.x = 50; shopBtnText.y = -50; LK.gui.bottomLeft.addChild(shopBtnText); // Quiz button var quizBtn = LK.gui.bottomRight.attachAsset('quizButton', { anchorX: 1, anchorY: 1, x: -50, y: -50 }); var quizBtnText = new Text2('Quiz', { size: 36, fill: 0xFFFFFF }); quizBtnText.anchor.set(1, 1); quizBtnText.x = -50; quizBtnText.y = -50; LK.gui.bottomRight.addChild(quizBtnText); // Naming button var namingBtn = LK.gui.bottomRight.attachAsset('button', { anchorX: 1, anchorY: 1, x: -50, y: -130, scaleX: 1.2, scaleY: 0.8 }); var namingBtnText = new Text2('Nommer un dauphin', { size: 28, fill: 0xFFFFFF }); namingBtnText.anchor.set(1, 1); namingBtnText.x = -50; namingBtnText.y = -130; LK.gui.bottomRight.addChild(namingBtnText); // Button event handlers LK.gui.bottomLeft.down = function (x, y, obj) { createShopModal(); }; LK.gui.bottomRight.down = function (x, y, obj) { // Check if naming button was clicked if (y >= -160 && y <= -100) { createDolphinNamingModal(); } else if (y >= -80 && y <= -20) { createQuizModal(); } }; // Play background music LK.playMusic('underwater'); // Initialize UI updateUI(); // Game update loop game.update = function () { // Update all dolphins for (var i = 0; i < dolphins.length; i++) { dolphins[i].update(); } // Update corals for (var i = 0; i < corals.length; i++) { corals[i].update(); } // Update hoops for (var i = 0; i < hoops.length; i++) { hoops[i].update(); } };
===================================================================
--- original.js
+++ change.js
@@ -324,13 +324,15 @@
var newDolphinBtn = shopModal.attachAsset('button', {
anchorX: 0.5,
anchorY: 0.5,
x: 0,
- y: -150
+ y: -150,
+ scaleX: 1.2,
+ scaleY: 1.2
});
var dolphinBtnText = new Text2('Nouveau Dauphin (100 Dauphicoins)', {
- size: 36,
- fill: 0xFFFFFF
+ size: 40,
+ fill: 0x000000
});
dolphinBtnText.anchor.set(0.5, 0.5);
dolphinBtnText.x = 0;
dolphinBtnText.y = -150;
@@ -339,20 +341,20 @@
for (var h = 0; h < hoopTypes.length; h++) {
var hoopBtn = shopModal.attachAsset('button', {
anchorX: 0.5,
anchorY: 0.5,
- x: (h % 3 - 1) * 200,
- y: -50 + Math.floor(h / 3) * 80,
- scaleX: 0.8,
- scaleY: 0.8
+ x: (h % 3 - 1) * 250,
+ y: -30 + Math.floor(h / 3) * 120,
+ scaleX: 1.1,
+ scaleY: 1.1
});
var hoopBtnText = new Text2(hoopTypes[h].name + ' (' + hoopTypes[h].price + ' Dauphicoins)', {
- size: 24,
- fill: 0xFFFFFF
+ size: 28,
+ fill: 0x000000
});
hoopBtnText.anchor.set(0.5, 0.5);
- hoopBtnText.x = (h % 3 - 1) * 200;
- hoopBtnText.y = -50 + Math.floor(h / 3) * 80;
+ hoopBtnText.x = (h % 3 - 1) * 250;
+ hoopBtnText.y = -30 + Math.floor(h / 3) * 120;
shopModal.addChild(hoopBtnText);
}
// Close button
var closeBtn = shopModal.attachAsset('button', {
@@ -395,11 +397,11 @@
}
}
// Check hoop buttons
for (var h = 0; h < hoopTypes.length; h++) {
- var btnX = (h % 3 - 1) * 200;
- var btnY = -50 + Math.floor(h / 3) * 80;
- if (localPos.x >= btnX - 80 && localPos.x <= btnX + 80 && localPos.y >= btnY - 30 && localPos.y <= btnY + 30) {
+ var btnX = (h % 3 - 1) * 250;
+ var btnY = -30 + Math.floor(h / 3) * 120;
+ if (localPos.x >= btnX - 110 && localPos.x <= btnX + 110 && localPos.y >= btnY - 40 && localPos.y <= btnY + 40) {
if (dauphicoins >= hoopTypes[h].price) {
selectedHoopType = h;
game.removeChild(shopModal);
shopModal = null;
@@ -630,20 +632,20 @@
var key = keyboard[row][col];
var keyBtn = keyboardModal.attachAsset('button', {
anchorX: 0.5,
anchorY: 0.5,
- x: (col - 3) * 80,
- y: -150 + row * 60,
- scaleX: key.length > 1 ? 1.2 : 0.8,
- scaleY: 0.8
+ x: (col - 3) * 90,
+ y: -150 + row * 70,
+ scaleX: key.length > 1 ? 1.4 : 1.0,
+ scaleY: 1.0
});
var keyText = new Text2(key, {
- size: key.length > 1 ? 20 : 24,
- fill: 0xFFFFFF
+ size: key.length > 1 ? 24 : 32,
+ fill: 0x000000
});
keyText.anchor.set(0.5, 0.5);
- keyText.x = (col - 3) * 80;
- keyText.y = -150 + row * 60;
+ keyText.x = (col - 3) * 90;
+ keyText.y = -150 + row * 70;
keyboardModal.addChild(keyText);
}
}
keyboardModal.x = 1024;
@@ -661,12 +663,12 @@
// Check keyboard buttons
for (var row = 0; row < keyboard.length; row++) {
for (var col = 0; col < keyboard[row].length; col++) {
var key = keyboard[row][col];
- var keyX = (col - 3) * 80;
- var keyY = -150 + row * 60;
- var keyWidth = key.length > 1 ? 60 : 40;
- if (localPos.x >= keyX - keyWidth && localPos.x <= keyX + keyWidth && localPos.y >= keyY - 25 && localPos.y <= keyY + 25) {
+ var keyX = (col - 3) * 90;
+ var keyY = -150 + row * 70;
+ var keyWidth = key.length > 1 ? 70 : 45;
+ if (localPos.x >= keyX - keyWidth && localPos.x <= keyX + keyWidth && localPos.y >= keyY - 35 && localPos.y <= keyY + 35) {
if (key === 'ESPACE') {
currentInputText += ' ';
} else if (key === 'EFFACER') {
currentInputText = currentInputText.slice(0, -1);
Bouton bleu. In-Game asset. 2d. High contrast. No shadows
Coral. In-Game asset. 2d. High contrast. No shadows
Coral bleu. In-Game asset. 2d. High contrast. No shadows
Coral rouge. In-Game asset. 2d. High contrast. No shadows
nourriture pour dauphins. In-Game asset. 2d. High contrast. No shadows
Cerceau doreĢe. In-Game asset. 2d. High contrast. No shadows
Fond d'eĢcran oceĢan mignon. In-Game asset. 2d. High contrast. No shadows
Dauphin. In-Game asset. 2d. High contrast. No shadows
Cerceau de couleur rose mignon. In-Game asset. 2d. High contrast. No shadows
Cerceau enflammeĢ. In-Game asset. 2d. High contrast. No shadows
Cerceau tricolore. In-Game asset. 2d. High contrast. No shadows
Cerceau de l'oceĢan. In-Game asset. 2d. High contrast. No shadows
Poisson. In-Game asset. 2d. High contrast. No shadows
Coeur. In-Game asset. 2d. High contrast. No shadows
eĢclat. In-Game asset. 2d. High contrast. No shadows
Fond d'eĢcran oceĢan mignon. In-Game asset. 2d. High contrast. No shadows