User prompt
oyunu kolaylaştır canavar bizi hemen yakalıyor...
User prompt
oyundaki canavarı yavaşlat
User prompt
kontrolleri daha sade ve kolay hale getir
User prompt
arabayı daha yavaş yap
Code edit (1 edits merged)
Please save this source code
User prompt
Monster Drift Escape
Initial prompt
drift çekme oyunu drift çekerek canavarlardan kaçalım
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); var storage = LK.import("@upit/storage.v1", { highScore: 0 }); /**** * Classes ****/ var Car = Container.expand(function () { var self = Container.call(this); var carGraphics = self.attachAsset('car', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 0; self.maxSpeed = 5; self.acceleration = 0.1; self.deceleration = 0.1; self.turnSpeed = 0.05; self.drifting = false; self.driftPower = 0; self.maxDriftPower = 100; self.driftDirection = 0; self.driftBoost = 0; self.isDead = false; // Particle system for drift effect self.particles = []; self.particleTimer = 0; self.startDrift = function (direction) { if (!self.drifting) { self.drifting = true; self.driftDirection = direction; LK.getSound('drift').play(); } }; self.stopDrift = function () { if (self.drifting) { self.drifting = false; // Apply drift boost based on accumulated drift power self.driftBoost = self.driftPower / 20; // Reset drift power self.driftPower = 0; } }; self.createDriftParticle = function () { var particle = LK.getAsset('driftParticle', { anchorX: 0.5, anchorY: 0.5, alpha: 0.7 }); // Position behind the car var angle = self.rotation - Math.PI; var distance = 30; particle.x = self.x + Math.cos(angle) * distance; particle.y = self.y + Math.sin(angle) * distance; // Store particle data particle.lifetime = 30; // frames particle.initialAlpha = 0.7; return particle; }; self.update = function () { if (self.isDead) { return; } // Update speed if (self.driftBoost > 0) { self.speed = Math.min(self.speed + self.driftBoost, self.maxSpeed * 1.5); self.driftBoost -= 0.1; } else { self.speed = Math.min(self.speed + self.acceleration, self.maxSpeed); } // Apply deceleration when drifting if (self.drifting) { self.speed *= 0.98; // Accumulate drift power self.driftPower = Math.min(self.driftPower + 1, self.maxDriftPower); // Create drift particles self.particleTimer++; if (self.particleTimer >= 3) { // Every 3 frames self.particleTimer = 0; game.addChild(self.createDriftParticle()); } } // Update position based on speed and rotation self.x += Math.cos(self.rotation) * self.speed; self.y += Math.sin(self.rotation) * self.speed; // Apply drift effect to rotation if (self.drifting) { self.rotation += self.turnSpeed * 1.5 * self.driftDirection; } // Keep car within game bounds self.x = Math.max(100, Math.min(self.x, 2048 - 100)); self.y = Math.max(100, Math.min(self.y, 2732 - 100)); }; self.crash = function () { if (!self.isDead) { self.isDead = true; LK.getSound('crash').play(); // Visual effect for crash tween(carGraphics, { alpha: 0.5, rotation: Math.PI * 4 }, { duration: 1000, easing: tween.easeInOut, onFinish: function onFinish() { LK.showGameOver(); } }); } }; return self; }); var Monster = Container.expand(function () { var self = Container.call(this); var monsterGraphics = self.attachAsset('monster', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 5; self.target = null; self.active = true; self.setTarget = function (target) { self.target = target; }; self.update = function () { if (!self.active || !self.target) { return; } // Calculate direction to target var dx = self.target.x - self.x; var dy = self.target.y - self.y; var distance = Math.sqrt(dx * dx + dy * dy); // Move towards target if (distance > 10) { self.x += dx / distance * self.speed; self.y += dy / distance * self.speed; // Rotate towards target self.rotation = Math.atan2(dy, dx); } // Check if caught the target if (distance < 80 && self.target && !self.target.isDead) { self.target.crash(); } }; 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 = 'speed'; // Default type self.active = true; self.setType = function (type) { self.type = type; // Set color based on type if (type === 'speed') { powerupGraphics.tint = 0x00ffff; } else if (type === 'invincibility') { powerupGraphics.tint = 0xff00ff; } else if (type === 'slowMonsters') { powerupGraphics.tint = 0xffff00; } }; // Animate the power-up tween(powerupGraphics, { rotation: Math.PI * 2 }, { duration: 2000, easing: tween.linear }); self.update = function () { if (!self.active) { return; } // Simple bobbing animation powerupGraphics.y = Math.sin(LK.ticks / 10) * 5; }; self.collect = function () { if (self.active) { self.active = false; LK.getSound('powerup').play(); // Visual effect when collected tween(powerupGraphics, { alpha: 0, scaleX: 2, scaleY: 2 }, { duration: 300, easing: tween.easeOut, onFinish: function onFinish() { self.destroy(); } }); return self.type; } return null; }; return self; }); var Track = Container.expand(function () { var self = Container.call(this); // Track background var trackBg = self.attachAsset('trackBorder', { anchorX: 0.5, anchorY: 0.5 }); // Main track var trackMain = self.attachAsset('track', { anchorX: 0.5, anchorY: 0.5 }); self.checkpoints = []; self.powerupSpots = []; self.createCheckpoint = function (x, y, rotation) { var checkpoint = LK.getAsset('trackCheckpoint', { anchorX: 0.5, anchorY: 0.5, alpha: 0.5, x: x, y: y, rotation: rotation }); self.checkpoints.push(checkpoint); self.addChild(checkpoint); return checkpoint; }; self.getRandomPowerupPosition = function () { if (self.powerupSpots.length === 0) { return { x: 0, y: 0 }; } var spot = self.powerupSpots[Math.floor(Math.random() * self.powerupSpots.length)]; return { x: spot.x, y: spot.y }; }; self.setupTrack = function (level) { // Clear existing checkpoints for (var i = 0; i < self.checkpoints.length; i++) { self.checkpoints[i].destroy(); } self.checkpoints = []; self.powerupSpots = []; // Create track layout based on level if (level === 1) { // Simple oval track self.createCheckpoint(0, -500, 0); self.createCheckpoint(500, 0, Math.PI / 2); self.createCheckpoint(0, 500, Math.PI); self.createCheckpoint(-500, 0, -Math.PI / 2); // Add powerup spots self.powerupSpots = [{ x: 0, y: -300 }, { x: 300, y: 0 }, { x: 0, y: 300 }, { x: -300, y: 0 }]; } else if (level === 2) { // Figure-8 track self.createCheckpoint(0, -500, 0); self.createCheckpoint(500, -250, Math.PI / 4); self.createCheckpoint(250, 0, Math.PI / 2); self.createCheckpoint(500, 250, 3 * Math.PI / 4); self.createCheckpoint(0, 500, Math.PI); self.createCheckpoint(-500, 250, -3 * Math.PI / 4); self.createCheckpoint(-250, 0, -Math.PI / 2); self.createCheckpoint(-500, -250, -Math.PI / 4); // Add powerup spots self.powerupSpots = [{ x: 0, y: -300 }, { x: 300, y: -150 }, { x: 150, y: 0 }, { x: 300, y: 150 }, { x: 0, y: 300 }, { x: -300, y: 150 }, { x: -150, y: 0 }, { x: -300, y: -150 }]; } }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x225522 }); /**** * Game Code ****/ // Game state variables var car; var monsters = []; var powerups = []; var track; var gameStarted = false; var score = 0; var level = 1; var gameTime = 0; var powerupTimer = 0; var spawnMonsterTimer = 0; var gameActive = true; var invincibilityTimer = 0; var slowMonstersTimer = 0; // UI elements var scoreTxt = new Text2("SCORE: 0", { size: 60, fill: 0xFFFFFF }); scoreTxt.anchor.set(0.5, 0); LK.gui.top.addChild(scoreTxt); var levelTxt = new Text2("LEVEL: 1", { size: 60, fill: 0xFFFFFF }); levelTxt.anchor.set(0.5, 0); levelTxt.y = 70; LK.gui.top.addChild(levelTxt); var timeTxt = new Text2("TIME: 0", { size: 60, fill: 0xFFFFFF }); timeTxt.anchor.set(0, 0); timeTxt.x = 20; timeTxt.y = 20; LK.gui.topRight.addChild(timeTxt); var statusTxt = new Text2("", { size: 50, fill: 0xFFFF00 }); statusTxt.anchor.set(0.5, 0); statusTxt.y = 140; LK.gui.top.addChild(statusTxt); // Initialize track track = new Track(); track.x = 2048 / 2; track.y = 2732 / 2; game.addChild(track); track.setupTrack(level); // Initialize car car = new Car(); car.x = 2048 / 2; car.y = 2732 / 2 + 400; car.rotation = -Math.PI / 2; game.addChild(car); // Game initialization function startGame() { gameStarted = true; gameActive = true; score = 0; gameTime = 0; level = 1; // Reset car car.speed = 0; car.drifting = false; car.driftPower = 0; car.driftBoost = 0; car.isDead = false; car.x = 2048 / 2; car.y = 2732 / 2 + 400; car.rotation = -Math.PI / 2; // Clear monsters for (var i = 0; i < monsters.length; i++) { monsters[i].destroy(); } monsters = []; // Clear powerups for (var i = 0; i < powerups.length; i++) { powerups[i].destroy(); } powerups = []; // Start timers powerupTimer = 180; // 3 seconds (60fps * 3) spawnMonsterTimer = 300; // 5 seconds // Reset track track.setupTrack(level); // Reset status effects invincibilityTimer = 0; slowMonstersTimer = 0; // Update UI updateScore(0); updateLevel(1); // Play music LK.playMusic('raceMusic'); } // Update score display function updateScore(newScore) { score = newScore; scoreTxt.setText("SCORE: " + score); // Check for level up if (score >= level * 500) { levelUp(); } } // Update level display function updateLevel(newLevel) { level = newLevel; levelTxt.setText("LEVEL: " + level); // Update track for new level track.setupTrack(level % 2 === 0 ? 2 : 1); } // Level up function levelUp() { updateLevel(level + 1); // Visual effect LK.effects.flashScreen(0x00ff00, 500); statusTxt.setText("LEVEL UP!"); // Clear status text after 2 seconds LK.setTimeout(function () { statusTxt.setText(""); }, 2000); } // Spawn a monster function spawnMonster() { var monster = new Monster(); // Position monster away from player var angle = Math.random() * Math.PI * 2; var distance = 800; monster.x = car.x + Math.cos(angle) * distance; monster.y = car.y + Math.sin(angle) * distance; // Keep monster within game bounds monster.x = Math.max(100, Math.min(monster.x, 2048 - 100)); monster.y = Math.max(100, Math.min(monster.y, 2732 - 100)); // Set target and speed based on level monster.setTarget(car); monster.speed = 5 + level * 0.5; game.addChild(monster); monsters.push(monster); } // Spawn a powerup function spawnPowerup() { var powerup = new PowerUp(); // Set random position from track's powerup spots var pos = track.getRandomPowerupPosition(); powerup.x = track.x + pos.x; powerup.y = track.y + pos.y; // Set random type var types = ['speed', 'invincibility', 'slowMonsters']; var type = types[Math.floor(Math.random() * types.length)]; powerup.setType(type); game.addChild(powerup); powerups.push(powerup); } // Apply powerup effect function applyPowerup(type) { if (type === 'speed') { car.speed += 5; car.maxSpeed += 2; // Reset max speed after 5 seconds LK.setTimeout(function () { car.maxSpeed -= 2; }, 5000); statusTxt.setText("SPEED BOOST!"); } else if (type === 'invincibility') { invincibilityTimer = 300; // 5 seconds car.alpha = 0.7; statusTxt.setText("INVINCIBLE!"); } else if (type === 'slowMonsters') { slowMonstersTimer = 300; // 5 seconds statusTxt.setText("MONSTERS SLOWED!"); } // Clear status text after 2 seconds LK.setTimeout(function () { statusTxt.setText(""); }, 2000); } // Handle drift controls var isDrifting = false; var driftDirection = 0; function startDrifting(direction) { if (!isDrifting) { isDrifting = true; driftDirection = direction; car.startDrift(direction); } } function stopDrifting() { if (isDrifting) { isDrifting = false; car.stopDrift(); } } // Handle touch input var touchStartX = 0; var touchStartY = 0; var touchMoved = false; // Handle touch start game.down = function (x, y, obj) { if (!gameStarted) { startGame(); return; } if (!isDrifting) { startDrifting(1); // Start drifting to the right by default } else { stopDrifting(); // Stop drifting if already drifting } }; // Handle touch move game.move = function (x, y, obj) { if (!gameStarted || !gameActive) { return; } // No longer need to detect swipe direction for drifting }; // Handle touch end game.up = function (x, y, obj) { if (!gameStarted || !gameActive) { return; } // No longer need to handle touch end for drifting }; // Game update loop game.update = function () { if (!gameStarted) { return; } // Update game time gameTime++; timeTxt.setText("TIME: " + Math.floor(gameTime / 60)); // Update status effect timers if (invincibilityTimer > 0) { invincibilityTimer--; if (invincibilityTimer === 0) { car.alpha = 1; } } if (slowMonstersTimer > 0) { slowMonstersTimer--; } // Spawn powerups powerupTimer--; if (powerupTimer <= 0) { spawnPowerup(); powerupTimer = 300 + Math.random() * 300; // 5-10 seconds } // Spawn monsters spawnMonsterTimer--; if (spawnMonsterTimer <= 0) { spawnMonster(); spawnMonsterTimer = 300 - level * 20; // Reduces delay as level increases spawnMonsterTimer = Math.max(spawnMonsterTimer, 60); // Minimum 1 second } // Update car car.update(); // Update monsters for (var i = monsters.length - 1; i >= 0; i--) { var monster = monsters[i]; // Apply slow effect if active if (slowMonstersTimer > 0) { monster.speed = (5 + level * 0.5) * 0.5; } else { monster.speed = 5 + level * 0.5; } monster.update(); // Check for collision with car if not invincible if (monster.intersects(car) && invincibilityTimer <= 0 && !car.isDead) { car.crash(); // Update high score if (score > storage.highScore) { storage.highScore = score; } } } // Update powerups for (var i = powerups.length - 1; i >= 0; i--) { var powerup = powerups[i]; powerup.update(); // Check for collection if (powerup.intersects(car) && powerup.active) { var type = powerup.collect(); if (type) { applyPowerup(type); updateScore(score + 50); } powerups.splice(i, 1); } } // Update drift particles - they're created directly in the game container for (var i = game.children.length - 1; i >= 0; i--) { var child = game.children[i]; if (child.lifetime !== undefined) { // It's a particle child.lifetime--; child.alpha = child.lifetime / 30 * child.initialAlpha; if (child.lifetime <= 0) { child.destroy(); } } } // Increase score based on car speed when drifting if (car.drifting) { updateScore(score + Math.floor(car.speed / 5)); } }; // Start by showing a message to the player statusTxt.setText("TAP TO START!"); // Play background music LK.playMusic('raceMusic');
===================================================================
--- original.js
+++ change.js
@@ -524,41 +524,27 @@
if (!gameStarted) {
startGame();
return;
}
- touchStartX = x;
- touchStartY = y;
- touchMoved = false;
+ if (!isDrifting) {
+ startDrifting(1); // Start drifting to the right by default
+ } else {
+ stopDrifting(); // Stop drifting if already drifting
+ }
};
// Handle touch move
game.move = function (x, y, obj) {
if (!gameStarted || !gameActive) {
return;
}
- // Check if touch has moved enough to be considered a swipe
- var dx = x - touchStartX;
- var dy = y - touchStartY;
- var distance = Math.sqrt(dx * dx + dy * dy);
- if (distance > 50) {
- touchMoved = true;
- // Determine swipe direction for drift
- var angle = Math.atan2(dy, dx);
- // Right swipe
- if (Math.abs(angle) < Math.PI / 4) {
- startDrifting(1);
- }
- // Left swipe
- else if (Math.abs(angle) > 3 * Math.PI / 4) {
- startDrifting(-1);
- }
- }
+ // No longer need to detect swipe direction for drifting
};
// Handle touch end
game.up = function (x, y, obj) {
if (!gameStarted || !gameActive) {
return;
}
- stopDrifting();
+ // No longer need to handle touch end for drifting
};
// Game update loop
game.update = function () {
if (!gameStarted) {
car. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
monster. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
particle. Single Game Texture. Blank background. High contrast. No shadows
checkpoint. Single Game Texture. In-Game asset. Blank background. High contrast. No shadows