User prompt
Ajoute la fonctionnalité 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 même occasion, fait en sorte que la progression du joueur et de ses dauphins (Nombre de Dauphicoins, dauphibouffe, cerceaux achetés et possé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
Corrigé les problè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
Corrigé les erreurs et problè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
Corrigé les problemes
User prompt
Ajoute la fonctionnalité 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 même occasion, fait en sorte que la progression du joueur et de ses dauphins (Nombre de Dauphicoins, dauphibouffe, cerceaux achetés et posséder par les dauphins, niveaux des dauphins , noms des Dauphins) Soient sauvegardes de maniè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 , corrigé les problèmes ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
Ajoute la fonctionnalité 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 même occasion, fait en sorte que la progression du joueur et de ses dauphins (Nombre de Dauphicoins, dauphibouffe, cerceaux achetés et posséder par les dauphins, niveaux des dauphins , noms des Dauphins) Soient sauvegardes de maniè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 affiché 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 acheté un cerceau a un de ses dauphins, le cerveau s'affiche en petit de la même façon comme il est dans les assets a côté du dauphin qui le possède Quand le dauphin possède plusieurs cerceaux, les cerceaux sont les uns a côté des autres en petit a côté 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 récrire un autre nom) pour toutes les lettres et chiffres, le boutton pour effacer le nom doit ê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 ré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 récrire un autre nom)
User prompt
Améliore la visibilité des articles dans la boutique, et la visibilité 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
Améliore la visibilité des articles dans la boutique, et la visibilité 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 diffé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 enflammé (prix : 45 Dauphicoins) - cerceau de l'océan (prix : 50 dauphins) - cerceau doré (le cerveau déjà existant dans le jeu) Lorsque le joueur achète un cerceau, et possède plusieurs dauphins, Le jeu lui demande à quel dauphin il veut offrir le cerceau avec un petit écran ou le joueur dois appuyer sur le nom de son dauphin correspondant (D'ailleurs implante aussi une fonctionnalité 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 é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 écran keyboard apparaît avec toutes les lettres de les chiffres requis pour donner un nom s'ouvre, le joueur peut alors écrire le nouveau nom de son dauphin et le valider pour renommer son dauphin
User prompt
Les pièces doivent être des Dauphicoins Et la bouffe doit être de la dauphibouffe
User prompt
Le jeu doit ê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 créer un jeu mobile 2D complet et immersif appelé "Dauphinya", un jeu d'élevage de dauphins mignon, relaxant et apaisant. L'objectif est de fournir une expérience ludique où les joueurs peuvent créer un lien unique avec leurs dauphins personnalisés, les faire progresser et enrichir leur monde sous-marin. 1. Concept Général et Ambiance * Titre du Jeu : Dauphinya * Genre : Simulation d'élevage / Gestion de créatures, jeu mobile relaxant. * Plateforme : Mobile (iOS/Android). * Style Visuel : 2D cartoon, très adorable, avec des couleurs vives et un univers sous-marin féerique et enchanteur. L'interface utilisateur (UI) doit être intuitive et esthétique, en accord avec le thème. * Objectif du Joueur : Acquérir, élever et chérir une collection de dauphins uniques, les faire monter de niveau, personnaliser leur environnement et progresser en tant qu'éleveur de dauphins. 2. Éléments Visuels (Assets 2D) * Scènes : * Aquarium Principal : Fond marin dynamique avec coraux colorés, algues flottantes, rochers doux, et effets de lumière sous-marine (bulles, rayons solaires filtrant). L'arrière-plan peut évoluer visuellement en fonction du niveau du joueur (plus d'éléments décoratifs débloqués, etc.). * Écran de Boutique : Interface claire pour l'achat de dauphins et d'objets. * Écran de Quiz : Interface pour les questions et réponses. * Sprites des Dauphins : * Modèles de base de dauphin mignon en 2D, avec différentes poses : nage lente, nage rapide, repos, saut hors de l'eau. * Expressions / États : Heureux (cœurs flottants, étincelles), Affamé (bulle de pensée avec un poisson), Neutre, Triste (si négligé). * Animations clés : Caresse (réaction au toucher), Manger (animation de consommation de nourriture), Saut (animation ludique). * Variations : Possibilité future de différentes espèces ou couleurs/patterns de dauphins. * Objets d'Interaction et Décoration (Sprites 2D) : * Nourriture : Sprite de "Dauphibouffe" (petits poissons stylisés ou granulés). * Cerceaux : Sprites de cerceaux uniques (ex: "Cute", "Tricolore", "Enflammé", "de l'Océan"). Ces cerceaux s'affichent par-dessus le dauphin. * Éléments d'Interface (UI - Sprites 2D) : * Icônes des Monnaies : "Dauphicoin" (pièce dorée avec un dauphin), "Dauphibouffe" (sachet/poisson). * Affichage des Monnaies : Compteurs numériques clairs en haut de l'é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'écran ou dans un panneau dédié). * Boutons Principaux : "Nourrir", "Caresse", "Boutique", "Quiz". Design agréable au toucher. * Pop-ups et Notifications : Messages pour gains, montées de niveau, rappels, etc. 3. Systè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 coût différent. * Lors de l'achat, le joueur peut nommer son nouveau dauphin (champ de texte). * Bonheur des Dauphins : * Chaque dauphin possède une barre de bonheur (échelle de 0 à 100). * Le bonheur diminue lentement avec le temps (nécessite des soins réguliers). * Actions pour augmenter le bonheur : * Caresse : En cliquant sur le dauphin. Augmente le bonheur de X points (ex: +10). Limite : Peut être effectué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 unité de Dauphibouffe. Augmente le bonheur de Y points (ex: +20). Animation de repas. Nécessite que le dauphin ne soit pas au bonheur maximum. * Cadeaux (Cerceaux) : L'équipement d'un cerceau sur un dauphin augmente son bonheur de manière significative et/ou passivement. * Niveau des Dauphins : * Chaque dauphin possède un niveau (ex: Niveau 1, 2, 3...). * Le dauphin monte de niveau lorsque sa barre de bonheur atteint 100%. La barre se réinitialise. * Chaque montée de niveau : * Augmente les points de bonheur maximum du dauphin (si la barre va au-delà de 100). * Peut débloquer de nouvelles animations ou capacités spécifiques au dauphin (à définir ultérieurement). * Contribue à l'expérience du joueur (voir ci-dessous). * Peut donner une petite récompense de Dauphibouffe (ex: +1). 3.2. Monnaies du Jeu * Dauphicoins (Monnaie Principale) : * Obtention : Principalement via les caresses de dauphins. Potentiellement via des quêtes ou succès. * Utilisation : Achat de nouveaux dauphins, achat de cerceaux, achat de Dauphibouffe (si nécessaire). * Dauphibouffe (Ressource) : * Obtention : En répondant correctement aux Quiz Marins. Potentiellement en récompense de montées de niveau de dauphin ou quêtes. * Utilisation : Nourrir les dauphins. 3.3. Système de Quiz Marins * Accès : Via un bouton dédié sur l'écran principal. * Mécanisme : Le joueur répond à des questions à choix multiples sur le thème de l'océan, des dauphins et de la vie marine. * Récompense : Chaque bonne réponse (ou série de bonnes réponses) rapporte de la Dauphibouffe. * Database : Une base de données de questions/réponses variées. 3.4. Boutique * Contenu : * Nouveaux Dauphins : Liste des dauphins disponibles à l'achat, avec leur coût en Dauphicoins. * Cerceaux : Liste des cerceaux uniques à acheter. Chaque cerceau a un coût en Dauphicoins et une description. * Exemples : "Cerceau Cute", "Cerceau Tricolore", "Cerceau Enflammé" (avec un petit effet visuel de flammes 2D), "Cerceau de l'Océan" (avec un effet d'eau scintillante). * Interaction : Le joueur sélectionne un article, confirme l'achat. Pour les cerceaux, une fois achetés, ils sont disponibles dans l'inventaire du joueur pour être équipés sur un dauphin spécifique. 3.5. Progression du Joueur * Niveau du Joueur : Le joueur a un niveau global qui augmente au fur et à mesure qu'il prend soin de ses dauphins. * Expérience du Joueur : Chaque fois qu'un dauphin monte de niveau, le joueur gagne de l'expérience (XP). * Montée de Niveau du Joueur : Atteindre un certain seuil d'XP débloque un nouveau niveau de joueur. * Récompenses du Niveau Joueur : * Déblocage de nouvelles espèces de dauphins dans la boutique. * Déblocage de nouveaux types de cerceaux ou décorations pour l'aquarium. * Récompenses ponctuelles de Dauphicoins ou Dauphibouffe. 4. Expérience Utilisateur et Qualité de Vie * Interface Intuitive : Tous les éléments UI doivent être clairs, réactifs et faciles à comprendre pour un public mobile. * Musique et Sons : * Musique d'ambiance : Relaxante, féerique et apaisante pour l'aquarium. * Sons SFX : Sons de dauphins (clics, sifflements joyeux), sons de caresse, sons de bulles, sons de pièces (Dauphicoins), sons de notification, sons de succès pour les montées de niveau. * Notifications : Rappels amicaux si un dauphin est affamé ou si une caresse est de nouveau disponible. * Nommage : Le joueur doit pouvoir nommer facilement ses dauphins. 5. Demande Initiale à Upit AI Game Maker En me basant sur cette description, je souhaite que vous commenciez par générer les éléments de base suivants : * Une scène d'aquarium 2D avec un arrière-plan marin générique. * Un sprite de dauphin de base avec une animation de nage simple. * Un système pour instancier ce dauphin dans la scène. * Les élé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 mécanisme pour nommer le dauphin lors de son "apparition". Je prévois ensuite de fournir des requêtes plus spécifiques pour les assets détaillés (types de cerceaux, autres dauphins, élé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('Lv.' + 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('Lv.' + 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.x = x || 0; self.y = y || 0; self.update = function () { // Gentle rotation hoop.rotation += 0.01; }; 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; // UI elements var coinText, foodText, trainerText; var shopModal = null; var quizModal = null; // Quiz questions var quizQuestions = [{ question: "What do dolphins use for echolocation?", answers: ["Sound waves", "Light waves", "Magnetic fields", "Electric fields"], correct: 0 }, { question: "How long can dolphins hold their breath?", answers: ["5 minutes", "15 minutes", "30 minutes", "1 hour"], correct: 1 }, { question: "What is a group of dolphins called?", answers: ["School", "Pod", "Herd", "Pack"], correct: 1 }, { question: "How do dolphins sleep?", answers: ["Fully unconscious", "One brain half at a time", "Never sleep", "Only at night"], correct: 1 }, { question: "What is the largest dolphin species?", answers: ["Bottlenose dolphin", "Orca", "Spinner dolphin", "Dusky dolphin"], correct: 1 }]; function updateUI() { coinText.setText('Coins: ' + dauphicoins); foodText.setText('Food: ' + dauphibouffe); trainerText.setText('Trainer Lv.' + 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('Dolphin Shop', { 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 }); var dolphinBtnText = new Text2('New Dolphin (100 coins)', { size: 36, fill: 0xFFFFFF }); dolphinBtnText.anchor.set(0.5, 0.5); dolphinBtnText.x = 0; dolphinBtnText.y = -150; shopModal.addChild(dolphinBtnText); // New hoop button var newHoopBtn = shopModal.attachAsset('button', { anchorX: 0.5, anchorY: 0.5, x: 0, y: -50 }); var hoopBtnText = new Text2('Decorative Hoop (50 coins)', { size: 36, fill: 0xFFFFFF }); hoopBtnText.anchor.set(0.5, 0.5); hoopBtnText.x = 0; hoopBtnText.y = -50; 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('Close', { 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 = shopModal.toLocal(obj.parent.toGlobal(obj.position)); // 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('Dolphin ' + (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 new hoop button if (localPos.x >= -100 && localPos.x <= 100 && localPos.y >= -80 && localPos.y <= -20) { if (dauphicoins >= 50) { dauphicoins -= 50; var newHoop = new Hoop(200 + hoops.length * 200, 400); hoops.push(newHoop); game.addChild(newHoop); updateUI(); LK.getSound('coin').play(); } } // 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 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('Marine Quiz', { 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 = quizModal.toLocal(obj.parent.toGlobal(obj.position)); // 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('Coins: ' + dauphicoins, { size: 48, fill: 0xFFEB3B }); coinText.anchor.set(0, 0); coinText.x = 120; coinText.y = 50; LK.gui.topLeft.addChild(coinText); foodText = new Text2('Food: ' + dauphibouffe, { size: 48, fill: 0x8BC34A }); foodText.anchor.set(0, 0); foodText.x = 120; foodText.y = 120; LK.gui.topLeft.addChild(foodText); trainerText = new Text2('Trainer Lv.' + 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('Shop', { 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); // Button event handlers LK.gui.bottomLeft.down = function (x, y, obj) { createShopModal(); }; LK.gui.bottomRight.down = function (x, y, obj) { 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
@@ -1,6 +1,524 @@
-/****
+/****
+* 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('Lv.' + 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('Lv.' + 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.x = x || 0;
+ self.y = y || 0;
+ self.update = function () {
+ // Gentle rotation
+ hoop.rotation += 0.01;
+ };
+ return self;
+});
+
+/****
* Initialize Game
-****/
+****/
var game = new LK.Game({
- backgroundColor: 0x000000
-});
\ No newline at end of file
+ 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;
+// UI elements
+var coinText, foodText, trainerText;
+var shopModal = null;
+var quizModal = null;
+// Quiz questions
+var quizQuestions = [{
+ question: "What do dolphins use for echolocation?",
+ answers: ["Sound waves", "Light waves", "Magnetic fields", "Electric fields"],
+ correct: 0
+}, {
+ question: "How long can dolphins hold their breath?",
+ answers: ["5 minutes", "15 minutes", "30 minutes", "1 hour"],
+ correct: 1
+}, {
+ question: "What is a group of dolphins called?",
+ answers: ["School", "Pod", "Herd", "Pack"],
+ correct: 1
+}, {
+ question: "How do dolphins sleep?",
+ answers: ["Fully unconscious", "One brain half at a time", "Never sleep", "Only at night"],
+ correct: 1
+}, {
+ question: "What is the largest dolphin species?",
+ answers: ["Bottlenose dolphin", "Orca", "Spinner dolphin", "Dusky dolphin"],
+ correct: 1
+}];
+function updateUI() {
+ coinText.setText('Coins: ' + dauphicoins);
+ foodText.setText('Food: ' + dauphibouffe);
+ trainerText.setText('Trainer Lv.' + 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('Dolphin Shop', {
+ 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
+ });
+ var dolphinBtnText = new Text2('New Dolphin (100 coins)', {
+ size: 36,
+ fill: 0xFFFFFF
+ });
+ dolphinBtnText.anchor.set(0.5, 0.5);
+ dolphinBtnText.x = 0;
+ dolphinBtnText.y = -150;
+ shopModal.addChild(dolphinBtnText);
+ // New hoop button
+ var newHoopBtn = shopModal.attachAsset('button', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ x: 0,
+ y: -50
+ });
+ var hoopBtnText = new Text2('Decorative Hoop (50 coins)', {
+ size: 36,
+ fill: 0xFFFFFF
+ });
+ hoopBtnText.anchor.set(0.5, 0.5);
+ hoopBtnText.x = 0;
+ hoopBtnText.y = -50;
+ 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('Close', {
+ 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 = shopModal.toLocal(obj.parent.toGlobal(obj.position));
+ // 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('Dolphin ' + (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 new hoop button
+ if (localPos.x >= -100 && localPos.x <= 100 && localPos.y >= -80 && localPos.y <= -20) {
+ if (dauphicoins >= 50) {
+ dauphicoins -= 50;
+ var newHoop = new Hoop(200 + hoops.length * 200, 400);
+ hoops.push(newHoop);
+ game.addChild(newHoop);
+ updateUI();
+ LK.getSound('coin').play();
+ }
+ }
+ // 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 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('Marine Quiz', {
+ 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 = quizModal.toLocal(obj.parent.toGlobal(obj.position));
+ // 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('Coins: ' + dauphicoins, {
+ size: 48,
+ fill: 0xFFEB3B
+});
+coinText.anchor.set(0, 0);
+coinText.x = 120;
+coinText.y = 50;
+LK.gui.topLeft.addChild(coinText);
+foodText = new Text2('Food: ' + dauphibouffe, {
+ size: 48,
+ fill: 0x8BC34A
+});
+foodText.anchor.set(0, 0);
+foodText.x = 120;
+foodText.y = 120;
+LK.gui.topLeft.addChild(foodText);
+trainerText = new Text2('Trainer Lv.' + 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('Shop', {
+ 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);
+// Button event handlers
+LK.gui.bottomLeft.down = function (x, y, obj) {
+ createShopModal();
+};
+LK.gui.bottomRight.down = function (x, y, obj) {
+ 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();
+ }
+};
\ No newline at end of file
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 dorée. In-Game asset. 2d. High contrast. No shadows
Fond d'écran océ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 enflammé. In-Game asset. 2d. High contrast. No shadows
Cerceau tricolore. In-Game asset. 2d. High contrast. No shadows
Cerceau de l'océ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
éclat. In-Game asset. 2d. High contrast. No shadows
Fond d'écran océan mignon. In-Game asset. 2d. High contrast. No shadows