User prompt
MARİO İSE SPAGETTİ ARASIN
User prompt
OYUNA Bİ CANAVAR OLARAK LUİGİYİ EKLE
User prompt
Please fix the bug: 'TypeError: tween.to is not a function' in or related to this line: 'tween.to(self, 0.5, {' Line Number: 75 ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Please fix the bug: 'storage.getItem is not a function' in or related to this line: 'if (storage.getItem('achievement_' + achievement.id)) {' Line Number: 297 ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
oyunda başarım olsun
User prompt
ejderha daha yavaş olsun
User prompt
ADD 1 MINUTE 20 SECONDS TO THE GAME
User prompt
ADD 1 MINUTE 20 SECONDS TO THE GAME
User prompt
ADD A 250 POINT HEALTH BAR
Code edit (1 edits merged)
Please save this source code
User prompt
Dragon's Treasure Escape
Initial prompt
MAKE ME A GAME ABOUT ESCAPE FROM THE DRAGON AND LET IT BE IN MARAD AND WE WILL BE A TREASURE HUNTER
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); var storage = LK.import("@upit/storage.v1"); /**** * Classes ****/ var Achievement = Container.expand(function (id, title, description, icon) { var self = Container.call(this); self.id = id; self.title = title; self.description = description; self.icon = icon; self.unlocked = false; self.displayTime = 0; // Create achievement notification display var bg = LK.getAsset('achievement_bg', { width: 600, height: 120, color: 0x2C3E50, shape: 'box', anchorX: 0.5, anchorY: 0.5 }); self.addChild(bg); var titleText = new Text2(title, { size: 40, fill: 0xFFD700 }); titleText.anchor.set(0.5, 0); titleText.x = 0; titleText.y = -30; self.addChild(titleText); var descText = new Text2(description, { size: 30, fill: 0xFFFFFF }); descText.anchor.set(0.5, 1); descText.x = 0; descText.y = 30; self.addChild(descText); self.unlock = function () { if (!self.unlocked) { self.unlocked = true; self.show(); // Save to storage storage['achievement_' + self.id] = true; } }; self.show = function () { self.x = 1024; self.y = 200; self.alpha = 0; self.scaleX = 0.5; self.scaleY = 0.5; self.displayTime = 180; // 3 seconds // Animate in tween(self, { alpha: 1, scaleX: 1, scaleY: 1 }, { duration: 500 }); }; self.update = function () { if (self.displayTime > 0) { self.displayTime--; if (self.displayTime <= 0) { // Animate out tween(self, { alpha: 0, scaleX: 0.5, scaleY: 0.5 }, { duration: 500 }); } } }; return self; }); var Dragon = Container.expand(function () { var self = Container.call(this); var dragonGraphics = self.attachAsset('dragon', { anchorX: 0.5, anchorY: 0.5 }); self.baseSpeed = 1.5; self.currentSpeed = self.baseSpeed; self.fireTimer = 0; self.fireInterval = 120; // 2 seconds initially self.update = function () { // Follow player var dx = player.x - self.x; var dy = player.y - self.y; var distance = Math.sqrt(dx * dx + dy * dy); if (distance > 5) { self.x += dx / distance * self.currentSpeed; self.y += dy / distance * self.currentSpeed; } // Fire breathing timer self.fireTimer++; if (self.fireTimer >= self.fireInterval) { self.breatheFire(); self.fireTimer = 0; } // Adjust difficulty based on score var difficulty = Math.floor(score / 10); self.currentSpeed = self.baseSpeed + difficulty * 0.5; self.fireInterval = Math.max(60, 120 - difficulty * 10); }; self.breatheFire = function () { var fireball = new Fireball(); fireball.x = self.x; fireball.y = self.y; // Aim towards player var dx = player.x - self.x; var dy = player.y - self.y; var distance = Math.sqrt(dx * dx + dy * dy); fireball.directionX = dx / distance; fireball.directionY = dy / distance; fireballs.push(fireball); game.addChild(fireball); LK.getSound('fire').play(); }; return self; }); var Fireball = Container.expand(function () { var self = Container.call(this); var fireballGraphics = self.attachAsset('fireball', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 6; self.directionX = 0; self.directionY = 0; self.lifetime = 300; // 5 seconds self.update = function () { self.x += self.directionX * self.speed; self.y += self.directionY * self.speed; fireballGraphics.rotation += 0.2; fireballGraphics.alpha = Math.sin(LK.ticks * 0.5) * 0.3 + 0.7; self.lifetime--; if (self.lifetime <= 0) { self.shouldDestroy = true; } // Check bounds if (self.x < -100 || self.x > 2148 || self.y < -100 || self.y > 2832) { self.shouldDestroy = true; } }; return self; }); var Gem = Container.expand(function () { var self = Container.call(this); var gemGraphics = self.attachAsset('gem', { anchorX: 0.5, anchorY: 0.5 }); self.points = 25; self.floatOffset = Math.random() * Math.PI * 2; self.update = function () { gemGraphics.y = Math.sin(LK.ticks * 0.15 + self.floatOffset) * 3; gemGraphics.rotation += 0.05; gemGraphics.scaleX = Math.sin(LK.ticks * 0.1 + self.floatOffset) * 0.2 + 1; gemGraphics.scaleY = Math.sin(LK.ticks * 0.1 + self.floatOffset) * 0.2 + 1; }; return self; }); var Luigi = Container.expand(function () { var self = Container.call(this); var luigiGraphics = self.attachAsset('luigi', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 2; self.jumpTimer = 0; self.jumpInterval = 120; // 2 seconds self.isJumping = false; self.jumpHeight = 0; self.maxJumpHeight = 100; self.jumpSpeed = 8; self.direction = 1; // 1 for right, -1 for left self.update = function () { // Move horizontally self.x += self.speed * self.direction; // Bounce off screen edges if (self.x <= 100 || self.x >= 1948) { self.direction *= -1; luigiGraphics.scaleX = self.direction; } // Jump behavior self.jumpTimer++; if (self.jumpTimer >= self.jumpInterval && !self.isJumping) { self.isJumping = true; self.jumpHeight = 0; self.jumpTimer = 0; } if (self.isJumping) { self.jumpHeight += self.jumpSpeed; if (self.jumpHeight >= self.maxJumpHeight) { self.jumpSpeed = -8; } if (self.jumpHeight <= 0 && self.jumpSpeed < 0) { self.jumpHeight = 0; self.jumpSpeed = 8; self.isJumping = false; } luigiGraphics.y = -self.jumpHeight; } // Animate Luigi luigiGraphics.rotation = Math.sin(LK.ticks * 0.1) * 0.1; }; return self; }); var Mario = Container.expand(function () { var self = Container.call(this); var marioGraphics = self.attachAsset('mario', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 3; self.targetSpaghetti = null; self.searchTimer = 0; self.searchInterval = 60; // 1 second self.update = function () { // Search for nearest spaghetti self.searchTimer++; if (self.searchTimer >= self.searchInterval) { self.findNearestSpaghetti(); self.searchTimer = 0; } // Move towards target spaghetti if (self.targetSpaghetti && spaghettis.indexOf(self.targetSpaghetti) !== -1) { var dx = self.targetSpaghetti.x - self.x; var dy = self.targetSpaghetti.y - self.y; var distance = Math.sqrt(dx * dx + dy * dy); if (distance > 5) { self.x += dx / distance * self.speed; self.y += dy / distance * self.speed; // Face the direction of movement marioGraphics.scaleX = dx > 0 ? 1 : -1; } } else { // Random movement when no spaghetti found self.x += (Math.random() - 0.5) * 2; self.y += (Math.random() - 0.5) * 2; } // Keep Mario in bounds self.x = Math.max(100, Math.min(1948, self.x)); self.y = Math.max(100, Math.min(2632, self.y)); // Animate Mario marioGraphics.rotation = Math.sin(LK.ticks * 0.1) * 0.05; }; self.findNearestSpaghetti = function () { var nearestDistance = Infinity; var nearestSpaghetti = null; for (var i = 0; i < spaghettis.length; i++) { var spaghetti = spaghettis[i]; var dx = spaghetti.x - self.x; var dy = spaghetti.y - self.y; var distance = Math.sqrt(dx * dx + dy * dy); if (distance < nearestDistance) { nearestDistance = distance; nearestSpaghetti = spaghetti; } } self.targetSpaghetti = nearestSpaghetti; }; return self; }); var Player = Container.expand(function () { var self = Container.call(this); var playerGraphics = self.attachAsset('player', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 8; self.invulnerable = false; self.invulnerabilityTime = 0; self.speedBoost = false; self.speedBoostTime = 0; self.update = function () { if (self.invulnerabilityTime > 0) { self.invulnerabilityTime--; playerGraphics.alpha = Math.sin(LK.ticks * 0.3) * 0.5 + 0.5; if (self.invulnerabilityTime <= 0) { self.invulnerable = false; playerGraphics.alpha = 1; } } if (self.speedBoostTime > 0) { self.speedBoostTime--; if (self.speedBoostTime <= 0) { self.speedBoost = false; playerGraphics.tint = 0xFFFFFF; } } }; self.activateInvulnerability = function () { self.invulnerable = true; self.invulnerabilityTime = 120; // 2 seconds at 60fps }; self.activateSpeedBoost = function () { self.speedBoost = true; self.speedBoostTime = 300; // 5 seconds at 60fps playerGraphics.tint = 0x00FFFF; }; return self; }); var PowerUp = Container.expand(function () { var self = Container.call(this); var powerupGraphics = self.attachAsset('powerup', { anchorX: 0.5, anchorY: 0.5 }); self.type = Math.random() < 0.5 ? 'speed' : 'invulnerable'; self.floatOffset = Math.random() * Math.PI * 2; if (self.type === 'invulnerable') { powerupGraphics.tint = 0xFFD700; } self.update = function () { powerupGraphics.y = Math.sin(LK.ticks * 0.2 + self.floatOffset) * 8; powerupGraphics.rotation += 0.1; powerupGraphics.alpha = Math.sin(LK.ticks * 0.3) * 0.3 + 0.7; }; return self; }); var Spaghetti = Container.expand(function () { var self = Container.call(this); var spaghettiGraphics = self.attachAsset('spaghetti', { anchorX: 0.5, anchorY: 0.5 }); self.points = 15; self.floatOffset = Math.random() * Math.PI * 2; self.update = function () { spaghettiGraphics.y = Math.sin(LK.ticks * 0.12 + self.floatOffset) * 4; spaghettiGraphics.rotation += 0.03; spaghettiGraphics.scaleX = Math.sin(LK.ticks * 0.08 + self.floatOffset) * 0.1 + 1; spaghettiGraphics.scaleY = Math.sin(LK.ticks * 0.08 + self.floatOffset) * 0.1 + 1; }; return self; }); var Treasure = Container.expand(function () { var self = Container.call(this); var treasureGraphics = self.attachAsset('treasure', { anchorX: 0.5, anchorY: 0.5 }); self.points = 10; self.floatOffset = Math.random() * Math.PI * 2; self.update = function () { treasureGraphics.y = Math.sin(LK.ticks * 0.1 + self.floatOffset) * 5; treasureGraphics.rotation += 0.02; }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x8B4513 }); /**** * Game Code ****/ game.setBackgroundColor(0xDEB887); // Game variables var score = 0; var health = 250; var maxHealth = 250; var gameTimer = 80 * 60; // 1 minute 20 seconds (80 seconds) at 60fps var treasures = []; var gems = []; var powerups = []; var fireballs = []; var luigis = []; var marios = []; var spaghettis = []; var treasureSpawnTimer = 0; var gemSpawnTimer = 0; var powerupSpawnTimer = 0; var luigiSpawnTimer = 0; var spaghettiSpawnTimer = 0; // Achievement system var achievements = []; var activeAchievements = []; var achievementStats = { treasuresCollected: 0, gemsCollected: 0, powerupsCollected: 0, dragonHits: 0, fireballsAvoided: 0, survivalTime: 0, maxScore: 0 }; // Initialize achievements function initializeAchievements() { achievements = [new Achievement('first_treasure', 'First Treasure!', 'Collect your first treasure', '💰'), new Achievement('treasure_hunter', 'Treasure Hunter', 'Collect 10 treasures', '🏆'), new Achievement('gem_collector', 'Gem Collector', 'Collect 5 gems', '💎'), new Achievement('survivor', 'Survivor', 'Survive for 30 seconds', '⏰'), new Achievement('speed_demon', 'Speed Demon', 'Use 3 speed power-ups', '⚡'), new Achievement('invincible', 'Invincible', 'Use 3 invulnerability power-ups', '🛡️'), new Achievement('score_master', 'Score Master', 'Reach 200 points', '🎯'), new Achievement('dragon_dancer', 'Dragon Dancer', 'Get hit by dragon 5 times and survive', '🐉'), new Achievement('high_scorer', 'High Scorer', 'Reach 300 points', '🌟'), new Achievement('ultimate_survivor', 'Ultimate Survivor', 'Survive for 60 seconds', '👑')]; // Load unlocked achievements from storage for (var i = 0; i < achievements.length; i++) { var achievement = achievements[i]; if (storage['achievement_' + achievement.id]) { achievement.unlocked = true; } } } function checkAchievements() { for (var i = 0; i < achievements.length; i++) { var achievement = achievements[i]; if (!achievement.unlocked) { var shouldUnlock = false; switch (achievement.id) { case 'first_treasure': shouldUnlock = achievementStats.treasuresCollected >= 1; break; case 'treasure_hunter': shouldUnlock = achievementStats.treasuresCollected >= 10; break; case 'gem_collector': shouldUnlock = achievementStats.gemsCollected >= 5; break; case 'survivor': shouldUnlock = achievementStats.survivalTime >= 30 * 60; break; case 'speed_demon': shouldUnlock = achievementStats.powerupsCollected >= 3; break; case 'invincible': shouldUnlock = achievementStats.powerupsCollected >= 3; break; case 'score_master': shouldUnlock = score >= 200; break; case 'dragon_dancer': shouldUnlock = achievementStats.dragonHits >= 5; break; case 'high_scorer': shouldUnlock = score >= 300; break; case 'ultimate_survivor': shouldUnlock = achievementStats.survivalTime >= 60 * 60; break; } if (shouldUnlock) { achievement.unlock(); activeAchievements.push(achievement); game.addChild(achievement); } } } } // Initialize achievements initializeAchievements(); // Create player var player = game.addChild(new Player()); player.x = 1024; player.y = 1366; // Create dragon var dragon = game.addChild(new Dragon()); dragon.x = 200; dragon.y = 200; // Create Luigi monster var luigi = game.addChild(new Luigi()); luigi.x = 1500; luigi.y = 1000; luigis.push(luigi); // Create Mario character var mario = game.addChild(new Mario()); mario.x = 300; mario.y = 800; marios.push(mario); // UI Elements var scoreTxt = new Text2('Score: 0', { size: 80, fill: 0xFFFFFF }); scoreTxt.anchor.set(0.5, 0); LK.gui.top.addChild(scoreTxt); var healthTxt = new Text2('Health: 250/250', { size: 60, fill: 0x00FF00 }); healthTxt.anchor.set(0, 0); healthTxt.x = 120; healthTxt.y = 20; LK.gui.addChild(healthTxt); var timerTxt = new Text2('Time: 1:20', { size: 70, fill: 0xFFFFFF }); timerTxt.anchor.set(1, 0); timerTxt.x = 2048 - 20; timerTxt.y = 20; LK.gui.addChild(timerTxt); var instructionTxt = new Text2('Tap to move! Collect treasures, avoid the dragon!', { size: 50, fill: 0xFFFFFF }); instructionTxt.anchor.set(0.5, 1); LK.gui.bottom.addChild(instructionTxt); // Game logic functions function spawnTreasure() { var treasure = new Treasure(); treasure.x = Math.random() * 1800 + 124; treasure.y = Math.random() * 2400 + 166; treasures.push(treasure); game.addChild(treasure); } function spawnGem() { var gem = new Gem(); gem.x = Math.random() * 1800 + 124; gem.y = Math.random() * 2400 + 166; gems.push(gem); game.addChild(gem); } function spawnPowerUp() { var powerup = new PowerUp(); powerup.x = Math.random() * 1800 + 124; powerup.y = Math.random() * 2400 + 166; powerups.push(powerup); game.addChild(powerup); } function spawnSpaghetti() { var spaghetti = new Spaghetti(); spaghetti.x = Math.random() * 1800 + 124; spaghetti.y = Math.random() * 2400 + 166; spaghettis.push(spaghetti); game.addChild(spaghetti); } function updateScore(points) { score += points; scoreTxt.setText('Score: ' + score); LK.setScore(score); } function updateHealth(damage) { health = Math.max(0, health - damage); healthTxt.setText('Health: ' + health + '/' + maxHealth); // Change color based on health percentage var healthPercent = health / maxHealth; if (healthPercent > 0.6) { healthTxt.fill = 0x00FF00; // Green } else if (healthPercent > 0.3) { healthTxt.fill = 0xFFFF00; // Yellow } else { healthTxt.fill = 0xFF0000; // Red } if (health <= 0) { LK.effects.flashScreen(0xFF0000, 1000); LK.showGameOver(); } } function updateTimer() { gameTimer = Math.max(0, gameTimer - 1); var totalSeconds = Math.floor(gameTimer / 60); var minutes = Math.floor(totalSeconds / 60); var seconds = totalSeconds % 60; var timeText = minutes + ':' + (seconds < 10 ? '0' : '') + seconds; timerTxt.setText('Time: ' + timeText); // Change color based on remaining time if (gameTimer <= 10 * 60) { // Last 10 seconds timerTxt.fill = 0xFF0000; // Red } else if (gameTimer <= 30 * 60) { // Last 30 seconds timerTxt.fill = 0xFFFF00; // Yellow } else { timerTxt.fill = 0xFFFFFF; // White } if (gameTimer <= 0) { LK.effects.flashScreen(0xFF0000, 1000); LK.showGameOver(); } } // Touch controls var targetX = player.x; var targetY = player.y; game.down = function (x, y, obj) { targetX = x; targetY = y; }; game.move = function (x, y, obj) { targetX = x; targetY = y; }; // Game update loop game.update = function () { // Update timer updateTimer(); // Move player towards target var dx = targetX - player.x; var dy = targetY - player.y; var distance = Math.sqrt(dx * dx + dy * dy); if (distance > 5) { var speed = player.speedBoost ? player.speed * 1.5 : player.speed; player.x += dx / distance * speed; player.y += dy / distance * speed; } // Keep player in bounds player.x = Math.max(40, Math.min(2008, player.x)); player.y = Math.max(40, Math.min(2692, player.y)); // Spawn treasures treasureSpawnTimer++; if (treasureSpawnTimer >= 90) { // Every 1.5 seconds spawnTreasure(); treasureSpawnTimer = 0; } // Spawn gems gemSpawnTimer++; if (gemSpawnTimer >= 180) { // Every 3 seconds spawnGem(); gemSpawnTimer = 0; } // Spawn power-ups powerupSpawnTimer++; if (powerupSpawnTimer >= 600) { // Every 10 seconds spawnPowerUp(); powerupSpawnTimer = 0; } // Spawn spaghetti spaghettiSpawnTimer++; if (spaghettiSpawnTimer >= 120) { // Every 2 seconds spawnSpaghetti(); spaghettiSpawnTimer = 0; } // Check treasure collection for (var i = treasures.length - 1; i >= 0; i--) { var treasure = treasures[i]; if (player.intersects(treasure)) { updateScore(treasure.points); achievementStats.treasuresCollected++; LK.effects.flashObject(treasure, 0xFFFFFF, 300); treasure.destroy(); treasures.splice(i, 1); LK.getSound('collect').play(); } } // Check gem collection for (var i = gems.length - 1; i >= 0; i--) { var gem = gems[i]; if (player.intersects(gem)) { updateScore(gem.points); achievementStats.gemsCollected++; LK.effects.flashObject(gem, 0xFFFFFF, 300); gem.destroy(); gems.splice(i, 1); LK.getSound('collect').play(); } } // Check power-up collection for (var i = powerups.length - 1; i >= 0; i--) { var powerup = powerups[i]; if (player.intersects(powerup)) { if (powerup.type === 'speed') { player.activateSpeedBoost(); } else if (powerup.type === 'invulnerable') { player.activateInvulnerability(); } achievementStats.powerupsCollected++; LK.effects.flashObject(powerup, 0xFFFFFF, 300); powerup.destroy(); powerups.splice(i, 1); LK.getSound('powerup').play(); } } // Check Mario spaghetti collection for (var i = marios.length - 1; i >= 0; i--) { var mario = marios[i]; for (var j = spaghettis.length - 1; j >= 0; j--) { var spaghetti = spaghettis[j]; if (mario.intersects(spaghetti)) { updateScore(spaghetti.points); LK.effects.flashObject(spaghetti, 0xFFD700, 300); spaghetti.destroy(); spaghettis.splice(j, 1); LK.getSound('collect').play(); break; } } } // Check player spaghetti collection for (var i = spaghettis.length - 1; i >= 0; i--) { var spaghetti = spaghettis[i]; if (player.intersects(spaghetti)) { updateScore(spaghetti.points); LK.effects.flashObject(spaghetti, 0xFFD700, 300); spaghetti.destroy(); spaghettis.splice(i, 1); LK.getSound('collect').play(); } } // Check dragon collision if (!player.invulnerable && player.intersects(dragon)) { if (!player.lastDragonHit) { updateHealth(50); achievementStats.dragonHits++; player.activateInvulnerability(); LK.effects.flashScreen(0xFF0000, 500); player.lastDragonHit = true; } } else { player.lastDragonHit = false; } // Check fireball collisions for (var i = fireballs.length - 1; i >= 0; i--) { var fireball = fireballs[i]; if (fireball.shouldDestroy) { fireball.destroy(); fireballs.splice(i, 1); continue; } if (!player.invulnerable && player.intersects(fireball)) { if (!fireball.hasHit) { updateHealth(25); player.activateInvulnerability(); LK.effects.flashScreen(0xFF0000, 300); fireball.hasHit = true; fireball.shouldDestroy = true; } } } // Check Luigi collisions for (var i = luigis.length - 1; i >= 0; i--) { var luigi = luigis[i]; if (!player.invulnerable && player.intersects(luigi)) { if (!luigi.lastHit) { updateHealth(30); player.activateInvulnerability(); LK.effects.flashScreen(0x00FF00, 400); luigi.lastHit = true; } } else { luigi.lastHit = false; } } // Spawn additional Luigis based on score luigiSpawnTimer++; if (luigiSpawnTimer >= 1800 && score >= 100) { // Every 30 seconds after score 100 var newLuigi = new Luigi(); newLuigi.x = Math.random() * 1800 + 124; newLuigi.y = Math.random() * 2000 + 500; luigis.push(newLuigi); game.addChild(newLuigi); luigiSpawnTimer = 0; } // Update achievement stats achievementStats.survivalTime++; if (score > achievementStats.maxScore) { achievementStats.maxScore = score; } // Check for new achievements checkAchievements(); // Update active achievement displays for (var i = activeAchievements.length - 1; i >= 0; i--) { var achievement = activeAchievements[i]; if (achievement.displayTime <= 0 && achievement.alpha <= 0) { achievement.destroy(); activeAchievements.splice(i, 1); } } // Win condition if (score >= 500) { LK.showYouWin(); } }; // Start background music LK.playMusic('desert'); // Initial treasures for (var i = 0; i < 3; i++) { spawnTreasure(); } // Initial spaghetti for (var i = 0; i < 2; i++) { spawnSpaghetti(); } ;
===================================================================
--- original.js
+++ change.js
@@ -215,8 +215,64 @@
luigiGraphics.rotation = Math.sin(LK.ticks * 0.1) * 0.1;
};
return self;
});
+var Mario = Container.expand(function () {
+ var self = Container.call(this);
+ var marioGraphics = self.attachAsset('mario', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.speed = 3;
+ self.targetSpaghetti = null;
+ self.searchTimer = 0;
+ self.searchInterval = 60; // 1 second
+ self.update = function () {
+ // Search for nearest spaghetti
+ self.searchTimer++;
+ if (self.searchTimer >= self.searchInterval) {
+ self.findNearestSpaghetti();
+ self.searchTimer = 0;
+ }
+ // Move towards target spaghetti
+ if (self.targetSpaghetti && spaghettis.indexOf(self.targetSpaghetti) !== -1) {
+ var dx = self.targetSpaghetti.x - self.x;
+ var dy = self.targetSpaghetti.y - self.y;
+ var distance = Math.sqrt(dx * dx + dy * dy);
+ if (distance > 5) {
+ self.x += dx / distance * self.speed;
+ self.y += dy / distance * self.speed;
+ // Face the direction of movement
+ marioGraphics.scaleX = dx > 0 ? 1 : -1;
+ }
+ } else {
+ // Random movement when no spaghetti found
+ self.x += (Math.random() - 0.5) * 2;
+ self.y += (Math.random() - 0.5) * 2;
+ }
+ // Keep Mario in bounds
+ self.x = Math.max(100, Math.min(1948, self.x));
+ self.y = Math.max(100, Math.min(2632, self.y));
+ // Animate Mario
+ marioGraphics.rotation = Math.sin(LK.ticks * 0.1) * 0.05;
+ };
+ self.findNearestSpaghetti = function () {
+ var nearestDistance = Infinity;
+ var nearestSpaghetti = null;
+ for (var i = 0; i < spaghettis.length; i++) {
+ var spaghetti = spaghettis[i];
+ var dx = spaghetti.x - self.x;
+ var dy = spaghetti.y - self.y;
+ var distance = Math.sqrt(dx * dx + dy * dy);
+ if (distance < nearestDistance) {
+ nearestDistance = distance;
+ nearestSpaghetti = spaghetti;
+ }
+ }
+ self.targetSpaghetti = nearestSpaghetti;
+ };
+ return self;
+});
var Player = Container.expand(function () {
var self = Container.call(this);
var playerGraphics = self.attachAsset('player', {
anchorX: 0.5,
@@ -272,8 +328,24 @@
powerupGraphics.alpha = Math.sin(LK.ticks * 0.3) * 0.3 + 0.7;
};
return self;
});
+var Spaghetti = Container.expand(function () {
+ var self = Container.call(this);
+ var spaghettiGraphics = self.attachAsset('spaghetti', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.points = 15;
+ self.floatOffset = Math.random() * Math.PI * 2;
+ self.update = function () {
+ spaghettiGraphics.y = Math.sin(LK.ticks * 0.12 + self.floatOffset) * 4;
+ spaghettiGraphics.rotation += 0.03;
+ spaghettiGraphics.scaleX = Math.sin(LK.ticks * 0.08 + self.floatOffset) * 0.1 + 1;
+ spaghettiGraphics.scaleY = Math.sin(LK.ticks * 0.08 + self.floatOffset) * 0.1 + 1;
+ };
+ return self;
+});
var Treasure = Container.expand(function () {
var self = Container.call(this);
var treasureGraphics = self.attachAsset('treasure', {
anchorX: 0.5,
@@ -308,12 +380,15 @@
var gems = [];
var powerups = [];
var fireballs = [];
var luigis = [];
+var marios = [];
+var spaghettis = [];
var treasureSpawnTimer = 0;
var gemSpawnTimer = 0;
var powerupSpawnTimer = 0;
var luigiSpawnTimer = 0;
+var spaghettiSpawnTimer = 0;
// Achievement system
var achievements = [];
var activeAchievements = [];
var achievementStats = {
@@ -395,8 +470,13 @@
var luigi = game.addChild(new Luigi());
luigi.x = 1500;
luigi.y = 1000;
luigis.push(luigi);
+// Create Mario character
+var mario = game.addChild(new Mario());
+mario.x = 300;
+mario.y = 800;
+marios.push(mario);
// UI Elements
var scoreTxt = new Text2('Score: 0', {
size: 80,
fill: 0xFFFFFF
@@ -446,8 +526,15 @@
powerup.y = Math.random() * 2400 + 166;
powerups.push(powerup);
game.addChild(powerup);
}
+function spawnSpaghetti() {
+ var spaghetti = new Spaghetti();
+ spaghetti.x = Math.random() * 1800 + 124;
+ spaghetti.y = Math.random() * 2400 + 166;
+ spaghettis.push(spaghetti);
+ game.addChild(spaghetti);
+}
function updateScore(points) {
score += points;
scoreTxt.setText('Score: ' + score);
LK.setScore(score);
@@ -538,8 +625,15 @@
// Every 10 seconds
spawnPowerUp();
powerupSpawnTimer = 0;
}
+ // Spawn spaghetti
+ spaghettiSpawnTimer++;
+ if (spaghettiSpawnTimer >= 120) {
+ // Every 2 seconds
+ spawnSpaghetti();
+ spaghettiSpawnTimer = 0;
+ }
// Check treasure collection
for (var i = treasures.length - 1; i >= 0; i--) {
var treasure = treasures[i];
if (player.intersects(treasure)) {
@@ -578,8 +672,34 @@
powerups.splice(i, 1);
LK.getSound('powerup').play();
}
}
+ // Check Mario spaghetti collection
+ for (var i = marios.length - 1; i >= 0; i--) {
+ var mario = marios[i];
+ for (var j = spaghettis.length - 1; j >= 0; j--) {
+ var spaghetti = spaghettis[j];
+ if (mario.intersects(spaghetti)) {
+ updateScore(spaghetti.points);
+ LK.effects.flashObject(spaghetti, 0xFFD700, 300);
+ spaghetti.destroy();
+ spaghettis.splice(j, 1);
+ LK.getSound('collect').play();
+ break;
+ }
+ }
+ }
+ // Check player spaghetti collection
+ for (var i = spaghettis.length - 1; i >= 0; i--) {
+ var spaghetti = spaghettis[i];
+ if (player.intersects(spaghetti)) {
+ updateScore(spaghetti.points);
+ LK.effects.flashObject(spaghetti, 0xFFD700, 300);
+ spaghetti.destroy();
+ spaghettis.splice(i, 1);
+ LK.getSound('collect').play();
+ }
+ }
// Check dragon collision
if (!player.invulnerable && player.intersects(dragon)) {
if (!player.lastDragonHit) {
updateHealth(50);
@@ -658,5 +778,10 @@
LK.playMusic('desert');
// Initial treasures
for (var i = 0; i < 3; i++) {
spawnTreasure();
-}
\ No newline at end of file
+}
+// Initial spaghetti
+for (var i = 0; i < 2; i++) {
+ spawnSpaghetti();
+}
+;
\ No newline at end of file
CREATE THIS IMAGE. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
MAKE THIS PICTURE LIKE A FIREBALL. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
DESIGN THIS PICTURE AS AN ENERGY DRINK. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
LUİGİ KARAKTERİNİ OLUŞTUR. In-Game asset. 2d. High contrast. No shadows
KORKAK BİR ADAM. In-Game asset. 2d. High contrast. No shadows
BÜYÜK BİR EJDER. In-Game asset. 2d. High contrast. No shadows
MARİO. In-Game asset. 2d. High contrast. No shadows
SPAGHETTİ. In-Game asset. 2d. High contrast. No shadows
sonic. In-Game asset. 2d. High contrast. No shadows
silah. In-Game asset. 2d. High contrast. No shadows
sonic altını. In-Game asset. 2d. High contrast. No shadows