/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ var BackgroundStar = Container.expand(function () { var self = Container.call(this); var starGraphics = self.attachAsset('star_bg', { anchorX: 0.5, anchorY: 0.5 }); self.speed = -0.3; self.twinkleTimer = Math.random() * 100; self.update = function () { self.x += self.speed; self.twinkleTimer += 0.05; starGraphics.alpha = 0.3 + Math.sin(self.twinkleTimer) * 0.7; }; return self; }); var Cloud = Container.expand(function () { var self = Container.call(this); var cloudGraphics = self.attachAsset('cloud', { anchorX: 0.5, anchorY: 0.5 }); self.speed = -0.5; // Very slow parallax self.floatTimer = Math.random() * 100; self.update = function () { self.x += self.speed; self.floatTimer += 0.02; cloudGraphics.y = Math.sin(self.floatTimer) * 20; }; return self; }); var Coin = Container.expand(function () { var self = Container.call(this); var coinGraphics = self.attachAsset('coin', { anchorX: 0.5, anchorY: 0.5 }); self.speed = -8; self.value = 10; self.bobOffset = 0; self.update = function () { self.x += self.speed; // Add bobbing animation self.bobOffset += 0.1; coinGraphics.y = Math.sin(self.bobOffset) * 10; }; return self; }); var Player = Container.expand(function () { var self = Container.call(this); var playerGraphics = self.attachAsset('player', { anchorX: 0.5, anchorY: 1.0, scaleX: 1.5, scaleY: 1.5 }); self.velocityY = 0; self.isJumping = false; self.jumpForce = -50; self.gravity = 1.2; self.groundY = 2532; // Ground level self.update = function () { // Apply gravity self.velocityY += self.gravity; self.y += self.velocityY; // Check ground collision if (self.y >= self.groundY) { self.y = self.groundY; self.velocityY = 0; self.isJumping = false; } }; self.jump = function () { if (!self.isJumping) { self.velocityY = self.jumpForce; self.isJumping = true; LK.getSound('jump').play(); } }; return self; }); var Pyramid = Container.expand(function () { var self = Container.call(this); var pyramidType = Math.floor(Math.random() * 3) + 1; var pyramidGraphics = self.attachAsset('pyramid' + pyramidType, { anchorX: 0.5, anchorY: 1.0 }); self.speed = -2; // Slower parallax speed // Add stone blocks around pyramid for (var i = 0; i < 5; i++) { if (Math.random() > 0.4) { var stoneBlock = self.attachAsset('stone_block', { anchorX: 0.5, anchorY: 0.5 }); stoneBlock.x = (Math.random() - 0.5) * pyramidGraphics.width * 1.2; stoneBlock.y = -Math.random() * 100; } } // Add palm trees around pyramid if (Math.random() > 0.3) { var palmTrunk = self.attachAsset('palm_trunk', { anchorX: 0.5, anchorY: 1.0 }); var palmLeaves = self.attachAsset('palm_leaves', { anchorX: 0.5, anchorY: 0.5 }); palmTrunk.x = (Math.random() - 0.5) * pyramidGraphics.width * 1.5; palmTrunk.y = 0; palmLeaves.x = palmTrunk.x; palmLeaves.y = palmTrunk.y - palmTrunk.height; } self.update = function () { self.x += self.speed; }; return self; }); var Robot = Container.expand(function () { var self = Container.call(this); var robotGraphics = self.attachAsset('robot', { anchorX: 0.5, anchorY: 1.0 }); self.speed = -8; self.groundY = 2532; // Enhanced AI robot lights for Istanbul 2071 for (var i = 0; i < 5; i++) { var light = self.attachAsset('neon_light', { anchorX: 0.5, anchorY: 0.5 }); light.x = (Math.random() - 0.5) * 80; light.y = -Math.random() * 60 - 10; // AI robot eye colors var aiColors = [0x00ffff, 0xff0040, 0x40ff00]; light.tint = aiColors[Math.floor(Math.random() * aiColors.length)]; } // Add AI scanner beam var scanner = self.attachAsset('neon_light', { anchorX: 0, anchorY: 0.5 }); scanner.x = 50; scanner.y = -40; scanner.scaleX = 3; scanner.scaleY = 0.2; scanner.tint = 0xff0000; scanner.alpha = 0.7; self.scanTimer = 0; self.update = function () { self.x += self.speed; // Animate AI scanner self.scanTimer += 0.1; scanner.alpha = 0.3 + Math.sin(self.scanTimer) * 0.4; }; return self; }); var Star = Container.expand(function () { var self = Container.call(this); var starGraphics = self.attachAsset('star', { anchorX: 0.5, anchorY: 0.5 }); self.speed = -8; self.value = 50; self.rotationSpeed = 0.1; self.update = function () { self.x += self.speed; starGraphics.rotation += self.rotationSpeed; }; return self; }); var Tower = Container.expand(function () { var self = Container.call(this); var towerType = Math.floor(Math.random() * 3) + 1; var towerGraphics = self.attachAsset('tower' + towerType, { anchorX: 0.5, anchorY: 1.0 }); self.speed = -2; // Enhanced neon lights for Istanbul 2071 towers for (var i = 0; i < 12; i++) { if (Math.random() > 0.2) { var light = self.attachAsset('neon_light', { anchorX: 0.5, anchorY: 0.5 }); light.x = (Math.random() - 0.5) * towerGraphics.width; light.y = -Math.random() * towerGraphics.height; // Add tinting for variety in Istanbul skyline var colors = [0x00ffff, 0xff0080, 0x8000ff, 0x00ff80]; light.tint = colors[Math.floor(Math.random() * colors.length)]; } } // Add antenna/spire details for Istanbul futuristic skyline if (Math.random() > 0.4) { var antenna = self.attachAsset('neon_light', { anchorX: 0.5, anchorY: 1.0 }); antenna.x = 0; antenna.y = -towerGraphics.height - 20; antenna.scaleX = 0.3; antenna.scaleY = 3; antenna.tint = 0xff0000; // Red antenna light } self.update = function () { self.x += self.speed; }; return self; }); var TurkishFlag = Container.expand(function () { var self = Container.call(this); var flagGraphics = self.attachAsset('turkish_flag', { anchorX: 0.5, anchorY: 0.5 }); var moon = self.attachAsset('flag_moon', { anchorX: 0.5, anchorY: 0.5 }); var star = self.attachAsset('flag_star', { anchorX: 0.5, anchorY: 0.5 }); moon.x = -15; moon.y = 0; star.x = -5; star.y = 0; star.rotation = 0.785; // 45 degrees self.waveTimer = 0; self.update = function () { self.waveTimer += 0.1; flagGraphics.skew.x = Math.sin(self.waveTimer) * 0.05; }; return self; }); var Turtle = Container.expand(function () { var self = Container.call(this); var turtleGraphics = self.attachAsset('turtle', { anchorX: 0.5, anchorY: 1.0 }); self.speed = -8; self.groundY = 2532; self.update = function () { self.x += self.speed; }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x87ceeb }); /**** * Game Code ****/ // Futuristic theme assets // Game variables var gameSpeed = 8; var spawnTimer = 0; var difficultyTimer = 0; var distance = 0; var scoreMultiplier = 1; // Theme selection variables var gameStarted = false; var selectedTheme = null; // 'ancient' or 'futuristic' var themeSelectionUI = null; // Game objects var player; var ground; var sun; var turtles = []; var coins = []; var stars = []; var pyramids = []; var clouds = []; // UI elements var scoreTxt = new Text2('0', { size: 100, fill: 0xFFFFFF }); scoreTxt.anchor.set(0.5, 0); LK.gui.top.addChild(scoreTxt); var distanceTxt = new Text2('0m', { size: 80, fill: 0xFFFFFF }); distanceTxt.anchor.set(1, 0); LK.gui.topRight.addChild(distanceTxt); // Initialize game elements function initializeGame() { // Initialize based on selected theme if (selectedTheme === 'ancient') { initializeAncientTheme(); } else if (selectedTheme === 'futuristic') { initializeFuturisticTheme(); } // Create player player = game.addChild(new Player()); player.x = 300; player.y = 2532; // Start background music LK.playMusic('bgmusic'); } // Spawn enemy (turtle or robot based on theme) function spawnTurtle() { if (selectedTheme === 'ancient') { var turtle = new Turtle(); turtle.x = 2200; turtle.y = 2532; turtle.speed = -(gameSpeed + Math.random() * 4); turtles.push(turtle); game.addChild(turtle); } else if (selectedTheme === 'futuristic') { var robot = new Robot(); robot.x = 2200; robot.y = 2532; robot.speed = -(gameSpeed + Math.random() * 4); turtles.push(robot); // Reuse turtles array for robots game.addChild(robot); } } // Spawn coin function spawnCoin() { var coin = new Coin(); coin.x = 2200; coin.y = 2400 - Math.random() * 300; coin.speed = -gameSpeed; coins.push(coin); game.addChild(coin); } // Spawn star function spawnStar() { var star = new Star(); star.x = 2200; star.y = 2300 - Math.random() * 200; star.speed = -gameSpeed; stars.push(star); game.addChild(star); } // Spawn background structure (pyramid or tower based on theme) function spawnPyramid() { if (selectedTheme === 'ancient') { var pyramid = new Pyramid(); pyramid.x = 2200; pyramid.y = 2732; pyramids.push(pyramid); game.addChild(pyramid); } else if (selectedTheme === 'futuristic') { var tower = new Tower(); tower.x = 2200; tower.y = 2732; pyramids.push(tower); // Reuse pyramids array for towers game.addChild(tower); } } // Touch controls game.down = function (x, y, obj) { if (player && gameStarted) { player.jump(); } }; // Main game loop game.update = function () { // Only run game logic if game has started if (!gameStarted) return; // Update distance distance += gameSpeed / 10; distanceTxt.setText(Math.floor(distance) + 'm'); // Increase difficulty over time difficultyTimer++; if (difficultyTimer % 1800 === 0) { // Every 30 seconds gameSpeed += 0.5; } // Spawn enemies and collectibles spawnTimer++; // Spawn turtles if (spawnTimer % 120 === 0) { spawnTurtle(); } // Spawn coins if (spawnTimer % 180 === 0) { spawnCoin(); } // Spawn stars (less frequent) if (spawnTimer % 480 === 0) { spawnStar(); } // Spawn pyramids for background if (spawnTimer % 350 === 0) { spawnPyramid(); } // Update and check turtles for (var i = turtles.length - 1; i >= 0; i--) { var turtle = turtles[i]; // Remove if off screen if (turtle.x < -100) { turtle.destroy(); turtles.splice(i, 1); continue; } // Check collision with player if (turtle.intersects(player)) { LK.effects.flashScreen(0xff0000, 1000); LK.showGameOver(); return; } } // Update and check coins for (var i = coins.length - 1; i >= 0; i--) { var coin = coins[i]; // Remove if off screen if (coin.x < -100) { coin.destroy(); coins.splice(i, 1); continue; } // Check collection if (coin.intersects(player)) { LK.setScore(LK.getScore() + coin.value * scoreMultiplier); scoreTxt.setText(LK.getScore()); LK.getSound('coin').play(); coin.destroy(); coins.splice(i, 1); } } // Update and check stars for (var i = stars.length - 1; i >= 0; i--) { var star = stars[i]; // Remove if off screen if (star.x < -100) { star.destroy(); stars.splice(i, 1); continue; } // Check collection if (star.intersects(player)) { LK.setScore(LK.getScore() + star.value * scoreMultiplier); scoreTxt.setText(LK.getScore()); scoreMultiplier += 0.1; LK.getSound('star').play(); LK.effects.flashObject(star, 0xFFFFFF, 500); star.destroy(); stars.splice(i, 1); } } // Update and cleanup pyramids for (var i = pyramids.length - 1; i >= 0; i--) { var pyramid = pyramids[i]; if (pyramid.x < -400) { pyramid.destroy(); pyramids.splice(i, 1); } } // Update and cleanup clouds/stars for (var i = clouds.length - 1; i >= 0; i--) { var cloud = clouds[i]; if (cloud.x < -150) { cloud.destroy(); clouds.splice(i, 1); // Spawn new cloud or star based on theme if (selectedTheme === 'ancient') { var newCloud = new Cloud(); newCloud.x = 2100 + Math.random() * 200; newCloud.y = Math.random() * 600 + 200; clouds.push(newCloud); game.addChild(newCloud); } else if (selectedTheme === 'futuristic') { var newStar = new BackgroundStar(); newStar.x = 2100 + Math.random() * 200; newStar.y = Math.random() * 1000 + 200; clouds.push(newStar); game.addChild(newStar); } } } // Add distance to score LK.setScore(LK.getScore() + Math.floor(gameSpeed / 10)); scoreTxt.setText(LK.getScore()); // Check victory condition if (LK.getScore() >= 500) { // Victory celebration with tween animations tween(player, { scaleX: 1.5, scaleY: 1.5 }, { duration: 500, easing: tween.bounceOut }); tween(player, { rotation: Math.PI * 2 }, { duration: 1000, easing: tween.easeInOut }); // Flash screen with victory colors LK.effects.flashScreen(0x00ff00, 1500); // Animate score text celebration tween(scoreTxt, { scaleX: 2, scaleY: 2 }, { duration: 800, easing: tween.elasticOut }); tween(scoreTxt, { rotation: 0.3 }, { duration: 300, easing: tween.easeInOut, onFinish: function onFinish() { tween(scoreTxt, { rotation: -0.3 }, { duration: 300, easing: tween.easeInOut, onFinish: function onFinish() { tween(scoreTxt, { rotation: 0 }, { duration: 300, easing: tween.easeInOut }); } }); } }); // Create confetti effect by animating multiple coins and stars as confetti for (var confettiIndex = 0; confettiIndex < 20; confettiIndex++) { var confettiCoin = new Coin(); confettiCoin.x = 1024 + (Math.random() - 0.5) * 400; confettiCoin.y = 1000; game.addChild(confettiCoin); tween(confettiCoin, { x: confettiCoin.x + (Math.random() - 0.5) * 800, y: confettiCoin.y + Math.random() * 800 + 400, scaleX: 2 + Math.random(), scaleY: 2 + Math.random(), rotation: Math.PI * (4 + Math.random() * 4) }, { duration: 1500 + Math.random() * 1000, easing: tween.bounceOut }); } for (var confettiIndex = 0; confettiIndex < 15; confettiIndex++) { var confettiStar = new Star(); confettiStar.x = 1024 + (Math.random() - 0.5) * 600; confettiStar.y = 800; game.addChild(confettiStar); tween(confettiStar, { x: confettiStar.x + (Math.random() - 0.5) * 1000, y: confettiStar.y + Math.random() * 1000 + 600, scaleX: 3 + Math.random() * 2, scaleY: 3 + Math.random() * 2, rotation: Math.PI * (6 + Math.random() * 6) }, { duration: 2000 + Math.random() * 1000, easing: tween.elasticOut }); } // Animate all remaining coins and stars for (var i = 0; i < coins.length; i++) { var coin = coins[i]; tween(coin, { scaleX: 2, scaleY: 2, rotation: Math.PI * 4 }, { duration: 1000, easing: tween.bounceOut }); } for (var i = 0; i < stars.length; i++) { var star = stars[i]; tween(star, { scaleX: 3, scaleY: 3, rotation: Math.PI * 6 }, { duration: 1200, easing: tween.elasticOut }); } // Show victory after animations LK.setTimeout(function () { LK.showYouWin(); }, 2000); return; // Stop game loop } }; // Create theme selection screen function createThemeSelection() { // Create selection container themeSelectionUI = game.addChild(new Container()); // Title var titleTxt = new Text2('TEMA SEÇ / CHOOSE THEME', { size: 120, fill: 0x000000 }); titleTxt.anchor.set(0.5, 0.5); titleTxt.x = 1024; titleTxt.y = 800; themeSelectionUI.addChild(titleTxt); // Ancient theme button var ancientBtn = themeSelectionUI.addChild(new Container()); var ancientBg = ancientBtn.attachAsset('pyramid1', { anchorX: 0.5, anchorY: 0.5 }); var ancientTxt = new Text2('M.Ö 3000', { size: 80, fill: 0x000000 }); ancientTxt.anchor.set(0.5, 0.5); ancientBtn.addChild(ancientTxt); ancientBtn.x = 600; ancientBtn.y = 1400; // Futuristic theme button var futuristicBtn = themeSelectionUI.addChild(new Container()); var futuristicBg = futuristicBtn.attachAsset('tower1', { anchorX: 0.5, anchorY: 0.5 }); var futuristicTxt = new Text2('2071', { size: 70, fill: 0x00ffff }); futuristicTxt.anchor.set(0.5, 0.5); futuristicBtn.addChild(futuristicTxt); futuristicBtn.x = 1448; futuristicBtn.y = 1400; // Event handlers ancientBtn.down = function () { selectedTheme = 'ancient'; startGameWithTheme(); }; futuristicBtn.down = function () { selectedTheme = 'futuristic'; startGameWithTheme(); }; } // Start game with selected theme function startGameWithTheme() { if (themeSelectionUI) { themeSelectionUI.destroy(); themeSelectionUI = null; } gameStarted = true; initializeGame(); } // Modified initialization for themes function initializeAncientTheme() { // Set daytime background game.setBackgroundColor(0x87ceeb); // Create sun sun = game.addChild(LK.getAsset('sun', { anchorX: 0.5, anchorY: 0.5 })); sun.x = 1700; sun.y = 400; // Create background clouds for (var i = 0; i < 15; i++) { var cloud = new Cloud(); cloud.x = Math.random() * 2500; cloud.y = Math.random() * 600 + 200; clouds.push(cloud); game.addChild(cloud); } // Create initial pyramids for (var i = 0; i < 8; i++) { var pyramid = new Pyramid(); pyramid.x = i * 300 + Math.random() * 100; pyramid.y = 2732; pyramids.push(pyramid); game.addChild(pyramid); } // Create ground ground = game.addChild(LK.getAsset('ground', { anchorX: 0, anchorY: 1 })); ground.x = 0; ground.y = 2732; } function initializeFuturisticTheme() { // Set Istanbul night background - dark night sky game.setBackgroundColor(0x0a0a1a); // Create large Turkish moon and star symbol in the sky - prominent position var moonSymbol = game.addChild(LK.getAsset('flag_moon', { anchorX: 0.5, anchorY: 0.5 })); moonSymbol.x = 1600; moonSymbol.y = 400; moonSymbol.scaleX = 20; // Make moon large and prominent moonSymbol.scaleY = 20; moonSymbol.tint = 0xffffff; // Bright white moon var starSymbol = game.addChild(LK.getAsset('flag_star', { anchorX: 0.5, anchorY: 0.5 })); starSymbol.x = 1750; starSymbol.y = 400; starSymbol.scaleX = 15; // Large star starSymbol.scaleY = 15; starSymbol.rotation = 0.785; // 45 degrees starSymbol.tint = 0xffffff; // Bright white star // Create background stars for night Istanbul skyline for (var i = 0; i < 120; i++) { var star = new BackgroundStar(); star.x = Math.random() * 2500; star.y = Math.random() * 800 + 100; clouds.push(star); // Reuse clouds array for stars game.addChild(star); } // Create initial futuristic Istanbul towers with more variety for (var i = 0; i < 15; i++) { var tower = new Tower(); tower.x = i * 150 + Math.random() * 80; tower.y = 2732; // Make some towers taller for Istanbul skyline effect if (Math.random() > 0.3) { tower.scaleY = 1.3 + Math.random() * 1.2; } pyramids.push(tower); // Reuse pyramids array for towers game.addChild(tower); } // Create futuristic Istanbul ground with neon effects ground = game.addChild(LK.getAsset('ground', { anchorX: 0, anchorY: 1 })); ground.x = 0; ground.y = 2732; ground.tint = 0x1a1a2e; // Dark futuristic Istanbul ground with blue tint } // Create theme selection screen instead of initializing game createThemeSelection();
===================================================================
--- original.js
+++ change.js
@@ -268,10 +268,10 @@
/****
* Game Code
****/
-// Game variables
// Futuristic theme assets
+// Game variables
var gameSpeed = 8;
var spawnTimer = 0;
var difficultyTimer = 0;
var distance = 0;
@@ -493,9 +493,9 @@
// Add distance to score
LK.setScore(LK.getScore() + Math.floor(gameSpeed / 10));
scoreTxt.setText(LK.getScore());
// Check victory condition
- if (LK.getScore() >= 100) {
+ if (LK.getScore() >= 500) {
// Victory celebration with tween animations
tween(player, {
scaleX: 1.5,
scaleY: 1.5
@@ -540,8 +540,41 @@
}
});
}
});
+ // Create confetti effect by animating multiple coins and stars as confetti
+ for (var confettiIndex = 0; confettiIndex < 20; confettiIndex++) {
+ var confettiCoin = new Coin();
+ confettiCoin.x = 1024 + (Math.random() - 0.5) * 400;
+ confettiCoin.y = 1000;
+ game.addChild(confettiCoin);
+ tween(confettiCoin, {
+ x: confettiCoin.x + (Math.random() - 0.5) * 800,
+ y: confettiCoin.y + Math.random() * 800 + 400,
+ scaleX: 2 + Math.random(),
+ scaleY: 2 + Math.random(),
+ rotation: Math.PI * (4 + Math.random() * 4)
+ }, {
+ duration: 1500 + Math.random() * 1000,
+ easing: tween.bounceOut
+ });
+ }
+ for (var confettiIndex = 0; confettiIndex < 15; confettiIndex++) {
+ var confettiStar = new Star();
+ confettiStar.x = 1024 + (Math.random() - 0.5) * 600;
+ confettiStar.y = 800;
+ game.addChild(confettiStar);
+ tween(confettiStar, {
+ x: confettiStar.x + (Math.random() - 0.5) * 1000,
+ y: confettiStar.y + Math.random() * 1000 + 600,
+ scaleX: 3 + Math.random() * 2,
+ scaleY: 3 + Math.random() * 2,
+ rotation: Math.PI * (6 + Math.random() * 6)
+ }, {
+ duration: 2000 + Math.random() * 1000,
+ easing: tween.elasticOut
+ });
+ }
// Animate all remaining coins and stars
for (var i = 0; i < coins.length; i++) {
var coin = coins[i];
tween(coin, {
@@ -589,9 +622,9 @@
var ancientBg = ancientBtn.attachAsset('pyramid1', {
anchorX: 0.5,
anchorY: 0.5
});
- var ancientTxt = new Text2('M.Ö. 3000\nANTİK MISIR', {
+ var ancientTxt = new Text2('M.Ö 3000', {
size: 80,
fill: 0x000000
});
ancientTxt.anchor.set(0.5, 0.5);
@@ -603,9 +636,9 @@
var futuristicBg = futuristicBtn.attachAsset('tower1', {
anchorX: 0.5,
anchorY: 0.5
});
- var futuristicTxt = new Text2('2071\nİSTANBUL\nGELECEK ŞEHRİ', {
+ var futuristicTxt = new Text2('2071', {
size: 70,
fill: 0x00ffff
});
futuristicTxt.anchor.set(0.5, 0.5);