User prompt
yukarıdan aşağıya düşen poleler ilk başta 5 saniye sonra 4 sonra 3 sonra 2 ve en son 1 saniye aralıklarla düşsünler ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
yukarıdan aşağı düşen poleler 2 saniye aralıklarla düşsünler ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
yukarıdan aşağı doğru düşen poleler 1 er saniye aralıklarla her defasında aralarında karakterin sığacağı kadar boşlukla düşsünler ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
20 puan verenler 1000 puan versin
User prompt
polelerin sayısını bir arttır
User prompt
Oyunun açılmasını hızlandır
User prompt
yukarda canlar yazısı yerine kedi simgesi olsun
User prompt
5 puan veren ağaçlar ile 20 puan veren ağaçlar farklı ve sabit renk olsunlar
User prompt
20 puan veren her ağaç beyaz olsun ve renk değiştirmesin
User prompt
20 puan verenler beyaz renki olsunlar
User prompt
20 puan verenlerin boyutunu yüzde 25 daha küçük yap ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
puan veren objelerin renklerini sürekli değiştir rengarenk olsun ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
1 puan verenler 5 puan 1000 puan veren ise 20 puan versin
User prompt
her zaman ilk bölümde 2600 skor yaptıktan sonra ikinci bölüme geçilsin
User prompt
Oyun başlangıcı daima 0 skorla olsun
User prompt
oyunu her zaman 1. bölümden başlat
User prompt
yukarda alınan puan ne kadar çok ise sol alttaki barda yazan 2600 den o kadar çok sayı düşsün 0 a kadar
User prompt
10 puan veren balon 1000 puan versin
User prompt
oyunu birinci bölümden başlat 2600 puana ulaşırsak ikinci bölüme geçsin
User prompt
oyunun balonları topladığımız bölümün ismi birinci bölüm polelerden kaçtığımız bölümün ismi ise ikinci bölüm olsun
User prompt
eski haline geri dönsün son yazdığım prompt iptal
User prompt
Oyun başlangıcında 1 skor almak özel bölüme geçsin
User prompt
1 skor sonraki bölüme taşısın ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
sol aşağıda 2600 yazsın ve puan aldıkça azalsın
User prompt
0 puandan başlasın oyun
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ // Bullet class for weapon projectiles var Bullet = Container.expand(function () { var self = Container.call(this); // Create bullet visual (small circle) var bulletAsset = self.attachAsset('manCircle', { anchorX: 0.5, anchorY: 0.5 }); bulletAsset.width = 20; bulletAsset.height = 20; bulletAsset.tint = 0xFFFF00; // Yellow color for bullet self.speed = 12; self.targetX = 0; self.targetY = 0; // Update method for bullet movement towards target self.update = function () { // Move towards target var dx = self.targetX - self.x; var dy = self.targetY - self.y; var distance = Math.sqrt(dx * dx + dy * dy); if (distance > 0) { self.x += dx / distance * self.speed; self.y += dy / distance * self.speed; } // Remove bullet if it reaches target or goes off screen if (distance < 30 || self.x < -100 || self.x > 2148 || self.y < -100 || self.y > 2832) { if (self.parent) { self.parent.removeChild(self); } var index = bullets.indexOf(self); if (index !== -1) { bullets.splice(index, 1); } } }; return self; }); // Car class var Car = Container.expand(function () { var self = Container.call(this); // Attach car asset (red box, 200x120) var carAsset = self.attachAsset('car', { anchorX: 0.5, anchorY: 0.5 }); // Set size for car asset carAsset.width = 200; carAsset.height = 120; // For touch feedback self.flash = function () { tween(self, { alpha: 0.5 }, { duration: 80, onFinish: function onFinish() { tween(self, { alpha: 1 }, { duration: 120 }); } }); }; return self; }); // DeadlyPole class for special scene var DeadlyPole = Container.expand(function () { var self = Container.call(this); // Attach pole asset (red tinted) var poleAsset = self.attachAsset('pole', { anchorX: 0.5, anchorY: 0.5 }); poleAsset.tint = 0xFF0000; // Red tint for deadly poles self.speed = 24; // Falling speed (3x faster) self.isFollowing = false; self.followSpeed = 4; // Speed when following player (reduced for easier gameplay) // Start following the player self.startFollowing = function () { self.isFollowing = true; }; // Stop following and disappear with tween self.stopFollowing = function () { self.isFollowing = false; tween(self, { alpha: 0, scaleX: 0.1, scaleY: 0.1 }, { duration: 1000, easing: tween.easeOut, onFinish: function onFinish() { if (self.parent) { self.parent.removeChild(self); } } }); }; // Update method for falling motion or following self.update = function () { if (self.isFollowing && car) { // Move towards car position var dx = car.x - self.x; var dy = car.y - self.y; var distance = Math.sqrt(dx * dx + dy * dy); if (distance > 0) { self.x += dx / distance * self.followSpeed; self.y += dy / distance * self.followSpeed; } } else { self.y += self.speed; } }; return self; }); // GoldenTree class var GoldenTree = Container.expand(function () { var self = Container.call(this); // Attach tree asset (golden, 140x140 - slightly bigger) var treeAsset = self.attachAsset('tree', { anchorX: 0.5, anchorY: 0.5 }); treeAsset.width = 140; treeAsset.height = 140; treeAsset.tint = 0xFFD700; // Golden tint color self.pointValue = 10; // Golden tree gives 10 points // Add golden glow effect self.glowEffect = function () { tween(self, { alpha: 0.7 }, { duration: 500, easing: tween.easeInOut, onFinish: function onFinish() { tween(self, { alpha: 1 }, { duration: 500, easing: tween.easeInOut, onFinish: function onFinish() { self.glowEffect(); // Loop the glow effect } }); } }); }; // Start glow effect immediately self.glowEffect(); // Special golden hit animation self.hitAnim = function () { tween(self, { scaleX: 1.5, scaleY: 1.5 }, { duration: 150, easing: tween.easeOut, onFinish: function onFinish() { tween(self, { scaleX: 1, scaleY: 1 }, { duration: 150, easing: tween.easeIn }); } }); }; return self; }); // Pole class var Pole = Container.expand(function () { var self = Container.call(this); // Attach pole asset (thin metal pole, 30x300) var poleAsset = self.attachAsset('pole', { anchorX: 0.5, anchorY: 0.5 }); self.pointValue = -10; // Pole reduces 10 points self.isRepositioning = false; // Flag to track if pole is being repositioned // Animate on hit (shake effect) self.hitAnim = function () { tween(self, { rotation: 0.2 }, { duration: 80, easing: tween.easeOut, onFinish: function onFinish() { tween(self, { rotation: -0.2 }, { duration: 80, easing: tween.easeInOut, onFinish: function onFinish() { tween(self, { rotation: 0 }, { duration: 80, easing: tween.easeIn }); } }); } }); }; return self; }); // PurpleTree class var PurpleTree = Container.expand(function () { var self = Container.call(this); // Attach tree asset (purple, 140x140 - slightly bigger) var treeAsset = self.attachAsset('tree', { anchorX: 0.5, anchorY: 0.5 }); treeAsset.width = 140; treeAsset.height = 140; treeAsset.tint = 0x8A2BE2; // Purple tint color self.pointValue = 30; // Purple tree gives 30 points // Add purple glow effect self.glowEffect = function () { tween(self, { alpha: 0.6 }, { duration: 600, easing: tween.easeInOut, onFinish: function onFinish() { tween(self, { alpha: 1 }, { duration: 600, easing: tween.easeInOut, onFinish: function onFinish() { self.glowEffect(); // Loop the glow effect } }); } }); }; // Start glow effect immediately self.glowEffect(); // Special purple hit animation self.hitAnim = function () { tween(self, { scaleX: 1.6, scaleY: 1.6 }, { duration: 180, easing: tween.easeOut, onFinish: function onFinish() { tween(self, { scaleX: 1, scaleY: 1 }, { duration: 180, easing: tween.easeIn }); } }); }; return self; }); // ThrowingMan class for special scene var ThrowingMan = Container.expand(function () { var self = Container.call(this); // Create circular shape for the man var manAsset = self.attachAsset('manCircle', { anchorX: 0.5, anchorY: 0.5 }); return self; }); // Tree class var Tree = Container.expand(function () { var self = Container.call(this); // Attach tree asset (green ellipse, 120x120) var treeAsset = self.attachAsset('tree', { anchorX: 0.5, anchorY: 0.5 }); treeAsset.width = 120; treeAsset.height = 120; treeAsset.tint = 0x228B22; self.pointValue = 1; // Normal tree gives 1 point // Animate on hit self.hitAnim = function () { tween(self, { scaleX: 1.3, scaleY: 1.3 }, { duration: 120, easing: tween.easeOut, onFinish: function onFinish() { tween(self, { scaleX: 1, scaleY: 1 }, { duration: 120, easing: tween.easeIn }); } }); }; return self; }); // Weapon class for special scene var Weapon = Container.expand(function () { var self = Container.call(this); // Create weapon visual using weapon image asset var weaponAsset = self.attachAsset('weapon', { anchorX: 0.5, anchorY: 0.5 }); weaponAsset.rotation = Math.PI / 4; // 45 degree rotation return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x87ceeb // Sky blue }); /**** * Game Code ****/ // --- Game constants --- var CAR_START_X = 2048 / 2; var CAR_START_Y = 2732 - 350; var TREE_MIN_Y = 350; var TREE_MAX_Y = 2732 - 350; var TREE_MIN_X = 150; var TREE_MAX_X = 2048 - 150; var WIN_SCORE = 100000000; // --- Game state --- var car = null; var trees = []; var poles = []; var score = 0; var scoreTxt = null; var dragNode = null; var lastIntersecting = []; var lastIntersectingPoles = []; var goldenTreeSpawned = false; var treesHitThisRound = 0; var purpleTreeCounter = 0; var polesSpawnedThisRound = 0; var countdownTimer = 10; var countdownTxt = null; var lastCarX = 0; var lastCarY = 0; var lastScore = 0; var specialScene = false; var specialSceneInitialized = false; var deadlyPoles = []; var lastIntersectingDeadly = []; var throwTimer = 0; var followingStartTime = null; var followingDuration = 10000; // 10 seconds in milliseconds var allFollowingTreesGone = false; // Flag to track if all following trees have disappeared var bottomLeftCounter = 260; var bottomLeftCounterTxt = null; var fourthScene = false; var fourthSceneInitialized = false; var fourthSceneTrees = []; var lastIntersectingFourthTrees = []; // --- Create and add car --- car = new Car(); car.x = CAR_START_X; car.y = CAR_START_Y; game.addChild(car); // --- Create and add trees --- for (var i = 0; i < 5; i++) { var tree = new Tree(); tree.x = getRandomTreeX(); tree.y = getRandomTreeY(); trees.push(tree); lastIntersecting.push(false); game.addChild(tree); } // --- Create and add poles --- for (var i = 0; i < 5; i++) { var pole = new Pole(); var tries = 0; var validPosition = false; do { pole.x = getRandomTreeX(); pole.y = getRandomTreeY(); tries++; validPosition = true; // Check distance from car if (distance(car.x, car.y, pole.x, pole.y) < 300) { validPosition = false; } // Check distance from all existing trees for (var t = 0; t < trees.length; t++) { if (distance(pole.x, pole.y, trees[t].x, trees[t].y) < 200) { validPosition = false; break; } } // Check distance from all existing poles for (var p = 0; p < poles.length; p++) { if (distance(pole.x, pole.y, poles[p].x, poles[p].y) < 200) { validPosition = false; break; } } } while (!validPosition && tries < 20); poles.push(pole); lastIntersectingPoles.push(false); game.addChild(pole); } // --- Score text --- scoreTxt = new Text2('0', { size: 120, fill: 0xFFFFFF }); scoreTxt.anchor.set(0.5, 0); LK.gui.top.addChild(scoreTxt); // --- Countdown timer text --- countdownTxt = new Text2('10', { size: 100, fill: 0xFF0000 }); countdownTxt.anchor.set(1, 1); LK.gui.bottomRight.addChild(countdownTxt); // --- Bottom-left counter text --- bottomLeftCounterTxt = new Text2('2600', { size: 100, fill: 0x8B4513 }); bottomLeftCounterTxt.anchor.set(0, 1); LK.gui.bottomLeft.addChild(bottomLeftCounterTxt); // --- Winner asset display --- var winnerAsset = LK.getAsset('Winner', { anchorX: 0.5, anchorY: 0.5 }); winnerAsset.x = 150; // Position on left side winnerAsset.y = 400; // Position in middle-left area winnerAsset.lastIntersecting = false; // Flag to track intersection state winnerAsset.lastLifeGainTime = 0; // Track last time life was gained game.addChild(winnerAsset); // --- Lives text --- livesTxt = new Text2('Canlar: 3', { size: 100, fill: 0xFF0000 }); livesTxt.anchor.set(0, 0); livesTxt.x = 150; // Positioned away from the top-left menu icon livesTxt.y = 50; LK.gui.addChild(livesTxt); // --- Helper functions --- function getRandomTreeX() { return TREE_MIN_X + Math.floor(Math.random() * (TREE_MAX_X - TREE_MIN_X)); } function getRandomTreeY() { return TREE_MIN_Y + Math.floor(Math.random() * (TREE_MAX_Y - TREE_MIN_Y)); } function updateScoreText() { scoreTxt.setText(score); } function updateCountdownText() { countdownTxt.setText(countdownTimer); } function updateBottomLeftCounterText() { bottomLeftCounterTxt.setText(bottomLeftCounter); } function updateLivesText() { livesTxt.setText('Canlar: ' + lives); } function spawnNewTree() { var newTree; // Spawn purple tree every 40 normal trees (1 in 40 chance) purpleTreeCounter++; if (purpleTreeCounter >= 40) { newTree = new PurpleTree(); purpleTreeCounter = 0; // Reset counter } else if (treesHitThisRound % 5 === 0 && !goldenTreeSpawned) { // Spawn golden tree once every 5 hits if not already spawned this round newTree = new GoldenTree(); goldenTreeSpawned = true; } else { newTree = new Tree(); // Reset golden tree availability after 10 hits if (treesHitThisRound >= 10) { goldenTreeSpawned = false; treesHitThisRound = 0; } } // Position new tree randomly (avoid placing too close to car and existing poles) var tries = 0; var validPosition = false; do { newTree.x = getRandomTreeX(); newTree.y = getRandomTreeY(); tries++; validPosition = true; // Check distance from car if (distance(car.x, car.y, newTree.x, newTree.y) < 300) { validPosition = false; } // Check distance from all existing poles for (var p = 0; p < poles.length; p++) { if (distance(newTree.x, newTree.y, poles[p].x, poles[p].y) < 200) { validPosition = false; break; } } // Check distance from all existing trees for (var t = 0; t < trees.length; t++) { if (distance(newTree.x, newTree.y, trees[t].x, trees[t].y) < 200) { validPosition = false; break; } } } while (!validPosition && tries < 20); trees.push(newTree); lastIntersecting.push(false); game.addChild(newTree); // Calculate current round based on score (every 50 points is a new round) var currentRound = Math.floor(score / 50); var polesPerRound = Math.max(1, 5 - currentRound); // Start with 5, decrease by 1 each round, minimum 1 // Spawn poles (decreasing each round) if (polesSpawnedThisRound < polesPerRound) { var newPole = new Pole(); var tries = 0; var validPolePosition = false; do { newPole.x = getRandomTreeX(); newPole.y = getRandomTreeY(); tries++; validPolePosition = true; // Check distance from car if (distance(car.x, car.y, newPole.x, newPole.y) < 300) { validPolePosition = false; } // Check distance from all existing trees for (var t = 0; t < trees.length; t++) { if (distance(newPole.x, newPole.y, trees[t].x, trees[t].y) < 200) { validPolePosition = false; break; } } // Check distance from all existing poles for (var p = 0; p < poles.length; p++) { if (distance(newPole.x, newPole.y, poles[p].x, poles[p].y) < 200) { validPolePosition = false; break; } } } while (!validPolePosition && tries < 20); poles.push(newPole); lastIntersectingPoles.push(false); game.addChild(newPole); polesSpawnedThisRound++; } // Reset pole counter when round is complete if (polesSpawnedThisRound >= polesPerRound && treesHitThisRound >= 10) { polesSpawnedThisRound = 0; } } // --- Move handler for dragging car --- function handleMove(x, y, obj) { if (dragNode) { var newX = x; var newY = Math.max(200, Math.min(2732 - 100, y)); // Screen wrapping for X axis if (newX > 2048) { newX = 0; // Car exits right, appears on left } else if (newX < 0) { newX = 2048; // Car exits left, appears on right } dragNode.x = newX; dragNode.y = newY; } // Check collision with Winner asset for 1 extra life per touch (with 5-second cooldown) if (winnerAsset) { var currentIntersectingWinner = car.intersects(winnerAsset); if (!winnerAsset.lastIntersecting && currentIntersectingWinner) { // Check if 5 seconds have passed since last life gain var currentTime = Date.now(); if (currentTime - winnerAsset.lastLifeGainTime >= 5000) { // Give 1 extra life per touch (maximum 9 lives) if (lives < 9) { lives += 1; updateLivesText(); } winnerAsset.lastLifeGainTime = currentTime; // Update last gain time // Flash winner asset to show it was activated and add scaling animation tween(winnerAsset, { alpha: 0.3, scaleX: 1.5, scaleY: 1.5 }, { duration: 200, onFinish: function onFinish() { tween(winnerAsset, { alpha: 1, scaleX: 1, scaleY: 1 }, { duration: 200 }); } }); } } winnerAsset.lastIntersecting = currentIntersectingWinner; } // Collision detection for all trees for (var i = 0; i < trees.length; i++) { var tree = trees[i]; var currentIntersecting = car.intersects(tree); if (!lastIntersecting[i] && currentIntersecting) { // Car just hit tree score += tree.pointValue; treesHitThisRound++; updateScoreText(); // Update bottom-left counter bottomLeftCounter -= tree.pointValue; if (bottomLeftCounter <= 0) { bottomLeftCounter = 0; bottomLeftCounterTxt.visible = false; } updateBottomLeftCounterText(); // Animate car and tree car.flash(); tree.hitAnim(); // Remove the hit tree game.removeChild(tree); trees.splice(i, 1); lastIntersecting.splice(i, 1); i--; // Adjust index since we removed an element // Spawn new tree (normal or golden based on conditions) spawnNewTree(); // Win condition if (score >= WIN_SCORE) { LK.showYouWin(); } } if (i >= 0 && i < lastIntersecting.length) { lastIntersecting[i] = currentIntersecting; } } // Collision detection for all poles (reduce 1 life when touched) for (var j = 0; j < poles.length; j++) { var pole = poles[j]; var currentIntersectingPole = car.intersects(pole); if (!lastIntersectingPoles[j] && currentIntersectingPole) { // Check if 2 seconds have passed since last pole hit var currentTime = Date.now(); if (currentTime - lastPoleHitTime >= 2000) { // Reduce 1 life when touching pole lives--; updateLivesText(); lastPoleHitTime = currentTime; // Update last hit time // Flash car to show damage taken car.flash(); // Animate pole on hit pole.hitAnim(); // Check if player is out of lives if (lives <= 0) { LK.showGameOver(); return; } } } if (j >= 0 && j < lastIntersectingPoles.length) { lastIntersectingPoles[j] = currentIntersectingPole; } } } // --- Utility: distance between two points --- function distance(x1, y1, x2, y2) { var dx = x1 - x2; var dy = y1 - y2; return Math.sqrt(dx * dx + dy * dy); } // --- Touch/drag events --- game.down = function (x, y, obj) { // Only start drag if touch is on car (within 120px radius) var dx = x - car.x; var dy = y - car.y; if (dx * dx + dy * dy < 120 * 120) { dragNode = car; handleMove(x, y, obj); } }; game.move = handleMove; game.up = function (x, y, obj) { dragNode = null; }; // --- Game update loop (not needed for movement, but for future extensibility) --- game.update = function () { // Check for special scene transition (260+ score) if (score >= 260 && !specialScene) { specialScene = true; // Clear existing game elements for (var i = trees.length - 1; i >= 0; i--) { game.removeChild(trees[i]); } trees = []; lastIntersecting = []; for (var j = poles.length - 1; j >= 0; j--) { game.removeChild(poles[j]); } poles = []; lastIntersectingPoles = []; // Hide winner asset in special scene if (winnerAsset) { winnerAsset.visible = false; } // Change background to darker for special scene game.setBackgroundColor(0x2F4F4F); // Dark gray } // Handle special scene logic if (specialScene && !specialSceneInitialized) { // Initialize special scene without skeleton specialSceneInitialized = true; } if (specialScene) { // Initialize following start time when first entering special scene if (followingStartTime === null) { followingStartTime = Date.now(); } // Spawn deadly poles that follow player for 10 seconds, then disappear if (LK.ticks % 120 === 0 && deadlyPoles.length < 10 && !allFollowingTreesGone) { var newDeadlyPole = new DeadlyPole(); newDeadlyPole.x = Math.random() * 2048; newDeadlyPole.y = -100; // Start above screen newDeadlyPole.spawnTime = Date.now(); newDeadlyPole.startFollowing(); deadlyPoles.push(newDeadlyPole); lastIntersectingDeadly.push(false); game.addChild(newDeadlyPole); // Set timer to make pole disappear after 10 seconds LK.setTimeout(function () { if (newDeadlyPole.parent) { newDeadlyPole.stopFollowing(); var index = deadlyPoles.indexOf(newDeadlyPole); if (index !== -1) { deadlyPoles.splice(index, 1); lastIntersectingDeadly.splice(index, 1); } // Check if all deadly poles are gone if (deadlyPoles.length === 0 && !allFollowingTreesGone) { allFollowingTreesGone = true; // Show message near the throwing man var messageText = new Text2('O zaman bunu al', { size: 80, fill: 0xFFFFFF }); messageText.anchor.set(0.5, 0.5); messageText.x = throwingMan.x; messageText.y = throwingMan.y - 100; game.addChild(messageText); // Spawn weapon at random location if (!weaponSpawned) { weapon = new Weapon(); weapon.x = Math.random() * (2048 - 200) + 100; // Random X within game bounds weapon.y = Math.random() * (2732 - 400) + 200; // Random Y within game bounds game.addChild(weapon); weaponSpawned = true; } } } }, 10000); } // Check collision with deadly poles for (var k = deadlyPoles.length - 1; k >= 0; k--) { var deadlyPole = deadlyPoles[k]; var currentIntersectingDeadly = car.intersects(deadlyPole); // Check if pole has been alive for 10 seconds if (deadlyPole.spawnTime && Date.now() - deadlyPole.spawnTime >= 10000) { deadlyPole.stopFollowing(); deadlyPoles.splice(k, 1); lastIntersectingDeadly.splice(k, 1); // Check if all deadly poles are gone if (deadlyPoles.length === 0 && !allFollowingTreesGone) { allFollowingTreesGone = true; // Show message near the throwing man var messageText = new Text2('O zaman bunu al', { size: 80, fill: 0xFFFFFF }); messageText.anchor.set(0.5, 0.5); messageText.x = throwingMan.x; messageText.y = throwingMan.y - 100; // Position above the throwing man game.addChild(messageText); // Spawn weapon at random location if (!weaponSpawned) { weapon = new Weapon(); weapon.x = Math.random() * (2048 - 200) + 100; // Random X within game bounds weapon.y = Math.random() * (2732 - 400) + 200; // Random Y within game bounds game.addChild(weapon); weaponSpawned = true; } } continue; } // Check if pole went off screen (only for non-following poles) if (!deadlyPole.isFollowing && deadlyPole.y > 2732 + 100) { game.removeChild(deadlyPole); deadlyPoles.splice(k, 1); lastIntersectingDeadly.splice(k, 1); continue; } // Check collision - reduce lives with cooldown if (!lastIntersectingDeadly[k] && currentIntersectingDeadly) { // Check if 2 seconds have passed since last deadly pole hit var currentTime = Date.now(); if (currentTime - lastDeadlyPoleHitTime >= 2000) { // Reduce 1 life when touching deadly pole lives--; updateLivesText(); lastDeadlyPoleHitTime = currentTime; // Update last hit time // Flash car to show damage taken car.flash(); // Check if player is out of lives if (lives <= 0) { // Show death message var deathText = new Text2('Nasip değilmiş', { size: 300, fill: 0xFF0000 }); deathText.anchor.set(0.5, 0.5); deathText.x = 2048 / 2; deathText.y = 2732 / 2; game.addChild(deathText); // Show message for 2 seconds before game over LK.setTimeout(function () { LK.showGameOver(); }, 2000); return; } } } if (k < lastIntersectingDeadly.length) { lastIntersectingDeadly[k] = currentIntersectingDeadly; } } } // Only run countdown timer logic if not in special scene if (!specialScene) { // Check if player hit something (score changed) var scoreChanged = score !== lastScore; if (scoreChanged) { // Player hit something, reset countdown countdownTimer = 10; updateCountdownText(); } else { // Player didn't hit anything, countdown every second (60 ticks = 1 second) if (LK.ticks % 60 === 0) { countdownTimer--; updateCountdownText(); if (countdownTimer <= 0) { if (score < 10) { // Show F- grade for low score var gradeText = new Text2('F-', { size: 300, fill: 0xFF0000 }); gradeText.anchor.set(0.5, 0.5); gradeText.x = 2048 / 2; gradeText.y = 2732 / 2; game.addChild(gradeText); // Show grade for 2 seconds before game over LK.setTimeout(function () { LK.showGameOver(); }, 2000); } else if (score >= 10 && score <= 30) { // Show F+ grade for score between 10 and 30 var gradeText = new Text2('F+', { size: 300, fill: 0xFFA500 }); gradeText.anchor.set(0.5, 0.5); gradeText.x = 2048 / 2; gradeText.y = 2732 / 2; game.addChild(gradeText); // Show grade for 2 seconds before game over LK.setTimeout(function () { LK.showGameOver(); }, 2000); } else if (score >= 30 && score <= 50) { // Show D- grade for score between 30 and 50 var gradeText = new Text2('D-', { size: 300, fill: 0x800080 }); gradeText.anchor.set(0.5, 0.5); gradeText.x = 2048 / 2; gradeText.y = 2732 / 2; game.addChild(gradeText); // Show grade for 2 seconds before game over LK.setTimeout(function () { LK.showGameOver(); }, 2000); } else { LK.showGameOver(); } } } } } if (fourthScene && !fourthSceneInitialized) { // Initialize 10 monsters for fourth scene for (var m = 0; m < 10; m++) { var monster = new ThrowingMan(); monster.x = Math.random() * (2048 - 200) + 100; monster.y = Math.random() * (2732 - 400) + 200; monster.health = 10; // Each monster needs 10 shots monster.maxHealth = 10; fourthSceneTrees.push(monster); lastIntersectingFourthTrees.push(false); game.addChild(monster); } fourthSceneInitialized = true; } if (fourthScene && fourthSceneTrees.length > 0) { // Check bullet collisions with monsters for (var b = bullets.length - 1; b >= 0; b--) { var bullet = bullets[b]; for (var m = 0; m < fourthSceneTrees.length; m++) { var monster = fourthSceneTrees[m]; if (bullet.intersects && bullet.intersects(monster)) { // Remove bullet game.removeChild(bullet); bullets.splice(b, 1); // Reduce monster health monster.health--; // Flash monster red when hit tween(monster, { tint: 0xFF0000 }, { duration: 200, onFinish: function onFinish() { tween(monster, { tint: 0xFFFFFF }, { duration: 200 }); } }); // Check if monster is defeated if (monster.health <= 0) { game.removeChild(monster); fourthSceneTrees.splice(m, 1); lastIntersectingFourthTrees.splice(m, 1); // Check if all monsters are defeated if (fourthSceneTrees.length === 0) { // Clear all remaining bullets for (var clearB = bullets.length - 1; clearB >= 0; clearB--) { game.removeChild(bullets[clearB]); } bullets = []; // Show HAPPY BIRTHDAY message var birthdayText = new Text2('HAPPY BIRTHDAY', { size: 200, fill: 0xFFD700 // Golden color }); birthdayText.anchor.set(0.5, 0.5); birthdayText.x = 2048 / 2; birthdayText.y = 2732 / 2; game.addChild(birthdayText); // Show message for 3 seconds before showing you win LK.setTimeout(function () { LK.showYouWin(); }, 3000); return; } } break; // Exit monster loop since bullet hit one } } } // Check collisions with car (reduce lives instead of instant death) for (var ft = fourthSceneTrees.length - 1; ft >= 0; ft--) { var monster = fourthSceneTrees[ft]; var currentIntersectingFourth = car.intersects(monster); if (!lastIntersectingFourthTrees[ft] && currentIntersectingFourth) { // Reduce car lives lives--; updateLivesText(); car.flash(); // Check if car is out of lives if (lives <= 0) { LK.showGameOver(); return; } } if (ft < lastIntersectingFourthTrees.length) { lastIntersectingFourthTrees[ft] = currentIntersectingFourth; } } } // Handle candle repositioning every 4 seconds (only in normal game, not special scenes) if (!specialScene && !fourthScene) { candleRepositionTimer++; if (candleRepositionTimer >= repositionInterval) { // Reposition all trees (candles) using tween animation for (var t = 0; t < trees.length; t++) { var tree = trees[t]; var newX = getRandomTreeX(); var newY = getRandomTreeY(); // Use tween to smoothly move trees to new positions tween(tree, { x: newX, y: newY }, { duration: 1000, easing: tween.easeInOut }); } candleRepositionTimer = 0; // Reset timer } // Handle pole repositioning every 5 seconds (only in normal game, not special scenes) poleRepositionTimer++; if (poleRepositionTimer >= poleRepositionInterval) { // Reposition all poles using tween animation for (var p = 0; p < poles.length; p++) { var pole = poles[p]; var newX = getRandomTreeX(); var newY = getRandomTreeY(); // Set repositioning flag before starting movement pole.isRepositioning = true; // Use tween to smoothly move poles to new positions tween(pole, { x: newX, y: newY }, { duration: 1000, easing: tween.easeInOut, onFinish: function onFinish() { // Clear repositioning flag when movement completes pole.isRepositioning = false; } }); } poleRepositionTimer = 0; // Reset timer } } // Handle winner asset repositioning every 7 seconds (only in normal game, not special scenes) if (!specialScene && !fourthScene) { winnerRepositionTimer++; if (winnerRepositionTimer >= winnerRepositionInterval) { // Reposition winner asset using tween animation var newX = Math.random() * (2048 - 150) + 75; // Random X within game bounds var newY = Math.random() * (2732 - 300) + 150; // Random Y within game bounds // Use tween to smoothly move winner asset to new position tween(winnerAsset, { x: newX, y: newY }, { duration: 1000, easing: tween.easeInOut }); winnerRepositionTimer = 0; // Reset timer } } // Update tracking variables lastCarX = car.x; lastCarY = car.y; lastScore = score; }; // --- Initialize score --- score = 0; // Start from 0 points updateScoreText(); // --- Initialize bottom-left counter --- bottomLeftCounter = 2600; updateBottomLeftCounterText(); // --- Initialize lives display --- lives = 3; updateLivesText(); // --- Initialize tracking variables --- lastCarX = car.x; lastCarY = car.y; lastScore = score; // --- Initialize special scene variables for testing --- specialScene = false; // Start from normal gameplay specialSceneInitialized = false; // Don't initialize special scene immediately followingStartTime = null; // Reset start time for special scene allFollowingTreesGone = false; // Reset flag for special scene // --- Candle repositioning timer --- var candleRepositionTimer = 0; var repositionInterval = 240; // 4 seconds at 60 FPS (4 * 60 = 240 ticks) // --- Pole repositioning timer --- var poleRepositionTimer = 0; var poleRepositionInterval = 600; // 10 seconds at 60 FPS (10 * 60 = 600 ticks) var poleCollisionCount = 0; // Track pole collisions for game over var lives = 3; // Character has 3 lives var lastPoleHitTime = 0; // Track last time player was hit by pole for 2-second cooldown var lastDeadlyPoleHitTime = 0; // Track last time player was hit by deadly pole for 2-second cooldown // --- Winner asset repositioning timer --- var winnerRepositionTimer = 0; var winnerRepositionInterval = 420; // 7 seconds at 60 FPS (7 * 60 = 420 ticks);;;
===================================================================
--- original.js
+++ change.js
@@ -434,9 +434,9 @@
});
countdownTxt.anchor.set(1, 1);
LK.gui.bottomRight.addChild(countdownTxt);
// --- Bottom-left counter text ---
-bottomLeftCounterTxt = new Text2('260', {
+bottomLeftCounterTxt = new Text2('2600', {
size: 100,
fill: 0x8B4513
});
bottomLeftCounterTxt.anchor.set(0, 1);
@@ -1077,9 +1077,9 @@
// --- Initialize score ---
score = 0; // Start from 0 points
updateScoreText();
// --- Initialize bottom-left counter ---
-bottomLeftCounter = 0;
+bottomLeftCounter = 2600;
updateBottomLeftCounterText();
// --- Initialize lives display ---
lives = 3;
updateLivesText();