User prompt
Sahnenin rastgele yerlerine rastgele büyüklükte oyunun oynayışını etkilemiycek beyaz noktalar ekle
User prompt
Oyunu eski haline geri getir
User prompt
Varlıkların boşlukları oyunu etkilemesin
User prompt
sahneleri 4 şekilde incelleyelim bunlar 1. dünya sahnesi yani bulutlar üzerinde zıplayalım ve etraf gökyüzü gibi masmavi olsun sayaç 1000 olduğunda 2. sahne geçsin ve 2. sahnede kraterlerin üstünde zıplayalım ve ekran siyah renkte ve beyaz yıldızlardan oluşsun sayaç 2000 olduğunda 3. sahneye geç bu sahnede belirli gezegenleri görelim sayaç 3000 olduğunda 4. sahneye geçelim ve bu sahnede cennet olsun sarı ve beyaz renklerde bulunsun daha sonra oyun sayaç 3500 olduğunda cennet haritasında sona ersin
User prompt
Oyunu basit bir karekterin tepeye doğru parkur yaparak çıkabilecek şekilde yap ve oynanabilir durumda olsun
Code edit (1 edits merged)
Please save this source code
User prompt
Tepeye Tırmanış Parkuru
Initial prompt
tepeye doğru çıkabileceğimiz parkur oyunu yap
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ // Obstacle class: static obstacle (box or ellipse) var Obstacle = Container.expand(function () { var self = Container.call(this); // Attach obstacle asset (ellipse shape) var obstacleGraphics = self.attachAsset('obstacle', { anchorX: 0.5, anchorY: 0.5 }); return self; }); // Platform class: static or moving platform var Platform = Container.expand(function () { var self = Container.call(this); // Attach platform asset (box shape) var platformGraphics = self.attachAsset('platform', { anchorX: 0.5, anchorY: 0.5 }); // Platform movement properties self.isMoving = false; self.moveDir = 1; // 1: right, -1: left self.moveRange = 0; // in px self.moveSpeed = 0; // px per frame self.startX = 0; // Called every tick self.update = function () { if (self.isMoving) { self.x += self.moveDir * self.moveSpeed; if (Math.abs(self.x - self.startX) > self.moveRange) { self.moveDir *= -1; } } }; return self; }); // Player class var Player = Container.expand(function () { var self = Container.call(this); // Attach player asset (box shape) var playerGraphics = self.attachAsset('player', { anchorX: 0.5, anchorY: 0.5 }); // Physics properties self.vx = 0; self.vy = 0; self.isOnGround = false; self.width = playerGraphics.width; self.height = playerGraphics.height; // Jump method self.jump = function () { if (self.isOnGround) { self.vy = -jumpStrength; self.isOnGround = false; } }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x222244 }); /**** * Game Code ****/ // --- Game Constants --- // --- Asset Initialization --- var GRAVITY = 2.2; var MOVE_SPEED = 22; var jumpStrength = 48; var PLATFORM_MIN_WIDTH = 220; var PLATFORM_MAX_WIDTH = 420; var PLATFORM_HEIGHT = 40; var PLATFORM_GAP_MIN = 220; var PLATFORM_GAP_MAX = 420; var PLATFORM_MOVE_CHANCE = 0.25; var PLATFORM_MOVE_RANGE = 320; var PLATFORM_MOVE_SPEED = 4; var OBSTACLE_CHANCE = 0.25; var OBSTACLE_SIZE = 80; var PLAYER_START_X = 2048 / 2; var PLAYER_START_Y = 2732 - 400; var CAMERA_OFFSET = 900; // How far from bottom the player is kept // --- Game State --- var player; var platforms = []; var obstacles = []; var maxHeight = 0; // Highest Y the player has reached (lower y = higher) var dragStartX = null; var dragStartY = null; var dragLastX = null; var dragLastY = null; var isDragging = false; var scoreTxt; var lastPlatformY = 0; var cameraY = 0; var gameOver = false; // --- Scene Management --- var scene = 1; // 1: clouds, 2: krater, 3: planets, 4: cennet var sceneObjects = []; // for stars, planets, cennet visuals // Helper: clear scene visuals function clearSceneObjects() { for (var i = 0; i < sceneObjects.length; i++) { sceneObjects[i].destroy(); } sceneObjects = []; } // Helper: add stars for krater scene function addStars() { clearSceneObjects(); for (var i = 0; i < 60; i++) { var star = LK.getAsset('obstacle', { anchorX: 0.5, anchorY: 0.5 }); star.width = 18 + Math.random() * 18; star.height = star.width; star.x = 80 + Math.random() * (2048 - 160); star.y = cameraY - 2000 + Math.random() * 3000; star.getChildAt(0).tint = 0xffffff; game.addChild(star); sceneObjects.push(star); } } // Helper: add planets for gezegenler scene function addPlanets() { clearSceneObjects(); var planetColors = [0xffe066, 0x6ec6ff, 0xff6f91, 0x9dff6e, 0xd1b3ff]; for (var i = 0; i < 6; i++) { var planet = LK.getAsset('obstacle', { anchorX: 0.5, anchorY: 0.5 }); planet.width = 180 + Math.random() * 120; planet.height = planet.width; planet.x = 200 + Math.random() * (2048 - 400); planet.y = cameraY - 1800 + i * 600 + Math.random() * 200; planet.getChildAt(0).tint = planetColors[i % planetColors.length]; game.addChild(planet); sceneObjects.push(planet); } } // Helper: add cennet visuals function addCennet() { clearSceneObjects(); // Sarı ve beyaz bulutlar for (var i = 0; i < 12; i++) { var cennetCloud = LK.getAsset('platform', { anchorX: 0.5, anchorY: 0.5 }); cennetCloud.width = 320 + Math.random() * 180; cennetCloud.height = 60 + Math.random() * 30; cennetCloud.x = 180 + Math.random() * (2048 - 360); cennetCloud.y = cameraY - 1200 + i * 200 + Math.random() * 120; cennetCloud.getChildAt(0).tint = i % 2 === 0 ? 0xfff799 : 0xffffff; game.addChild(cennetCloud); sceneObjects.push(cennetCloud); } } // --- GUI --- scoreTxt = new Text2('0', { size: 120, fill: "#fff" }); scoreTxt.anchor.set(0.5, 0); LK.gui.top.addChild(scoreTxt); // --- Helper Functions --- // Generate a new platform at (x, y), optionally moving function createPlatform(x, y, width, isMoving) { var plat = new Platform(); plat.x = x; plat.y = y; plat.width = width; plat.height = PLATFORM_HEIGHT; plat.getChildAt(0).width = width; plat.getChildAt(0).height = PLATFORM_HEIGHT; plat.isMoving = isMoving; plat.moveRange = isMoving ? PLATFORM_MOVE_RANGE : 0; plat.moveSpeed = isMoving ? PLATFORM_MOVE_SPEED : 0; plat.startX = x; game.addChild(plat); platforms.push(plat); return plat; } // Generate a new obstacle on a platform function createObstacle(x, y) { var obs = new Obstacle(); obs.x = x; obs.y = y - OBSTACLE_SIZE / 2 - 10; obs.width = OBSTACLE_SIZE; obs.height = OBSTACLE_SIZE; obs.getChildAt(0).width = OBSTACLE_SIZE; obs.getChildAt(0).height = OBSTACLE_SIZE; game.addChild(obs); obstacles.push(obs); return obs; } // Remove platforms/obstacles below camera function cleanupPlatformsObstacles() { for (var i = platforms.length - 1; i >= 0; i--) { if (platforms[i].y - cameraY > 2732 + 200) { platforms[i].destroy(); platforms.splice(i, 1); } } for (var j = obstacles.length - 1; j >= 0; j--) { if (obstacles[j].y - cameraY > 2732 + 200) { obstacles[j].destroy(); obstacles.splice(j, 1); } } } // Generate platforms up to a certain Y function generatePlatformsUpTo(minY) { while (lastPlatformY > minY) { var gap = PLATFORM_GAP_MIN + Math.random() * (PLATFORM_GAP_MAX - PLATFORM_GAP_MIN); var platY = lastPlatformY - gap; var platWidth = PLATFORM_MIN_WIDTH + Math.random() * (PLATFORM_MAX_WIDTH - PLATFORM_MIN_WIDTH); var platX = platWidth / 2 + Math.random() * (2048 - platWidth); var isMoving = Math.random() < PLATFORM_MOVE_CHANCE; var plat = createPlatform(platX, platY, platWidth, isMoving); // Maybe add obstacle if (Math.random() < OBSTACLE_CHANCE && platWidth > 200 + OBSTACLE_SIZE) { var obsX = plat.x + (Math.random() - 0.5) * (platWidth - OBSTACLE_SIZE - 40); createObstacle(obsX, platY); } lastPlatformY = platY; } } // Reset game state function resetGame() { // Remove old objects for (var i = 0; i < platforms.length; i++) platforms[i].destroy(); for (var j = 0; j < obstacles.length; j++) obstacles[j].destroy(); platforms = []; obstacles = []; cameraY = 0; lastPlatformY = PLAYER_START_Y + 120; maxHeight = PLAYER_START_Y; LK.setScore(0); scoreTxt.setText('0'); gameOver = false; // Reset scene scene = 1; clearSceneObjects(); game.setBackgroundColor(0x6ec6ff); // Create player if (player) player.destroy(); player = new Player(); player.x = PLAYER_START_X; player.y = PLAYER_START_Y; player.vx = 0; player.vy = 0; player.isOnGround = false; game.addChild(player); // Create starting platform createPlatform(PLAYER_START_X, PLAYER_START_Y + 80, 420, false); // Generate initial platforms generatePlatformsUpTo(PLAYER_START_Y - 2000); } // --- Input Handling --- // Touch/drag to move player left/right, tap to jump game.down = function (x, y, obj) { if (gameOver) return; dragStartX = x; dragStartY = y; dragLastX = x; dragLastY = y; isDragging = true; }; game.move = function (x, y, obj) { if (gameOver) return; if (!isDragging) return; var dx = x - dragLastX; dragLastX = x; dragLastY = y; // Move player horizontally player.x += dx * 1.2; if (player.x < player.width / 2) player.x = player.width / 2; if (player.x > 2048 - player.width / 2) player.x = 2048 - player.width / 2; }; game.up = function (x, y, obj) { if (gameOver) return; isDragging = false; // If tap (not drag), jump if (Math.abs(x - dragStartX) < 30 && Math.abs(y - dragStartY) < 30) { player.jump(); } }; // --- Main Game Loop --- game.update = function () { if (gameOver) return; // --- Player Physics --- player.vy += GRAVITY; player.y += player.vy; player.x += player.vx; // Clamp player to screen if (player.x < player.width / 2) player.x = player.width / 2; if (player.x > 2048 - player.width / 2) player.x = 2048 - player.width / 2; // --- Platform Collision --- player.isOnGround = false; for (var i = 0; i < platforms.length; i++) { var plat = platforms[i]; // Only check collision if falling // Only check if platform is within visible area (not far above or below) if (plat.y > cameraY - 200 && plat.y < cameraY + 2732 + 200) { if (player.vy >= 0) { var px = player.x; var py = player.y + player.height / 2; var platLeft = plat.x - plat.width / 2; var platRight = plat.x + plat.width / 2; var platTop = plat.y - plat.height / 2; var platBottom = plat.y + plat.height / 2; if (px > platLeft + 10 && px < platRight - 10 && py > platTop && py < platTop + 40 && player.y < plat.y) { // Landed on platform player.y = platTop - player.height / 2 + 1; player.vy = 0; player.isOnGround = true; } } } } // --- Obstacle Collision --- for (var j = 0; j < obstacles.length; j++) { var obs = obstacles[j]; // Only check if obstacle is within visible area (not far above or below) if (obs.y > cameraY - 200 && obs.y < cameraY + 2732 + 200) { // Simple circle-rect collision var dx = Math.abs(player.x - obs.x); var dy = Math.abs(player.y - obs.y); if (dx < player.width / 2 + OBSTACLE_SIZE / 2 - 10 && dy < player.height / 2 + OBSTACLE_SIZE / 2 - 10) { // Hit obstacle LK.effects.flashScreen(0xff0000, 800); gameOver = true; LK.showGameOver(); return; } } } // --- Fall Off Screen --- if (player.y - cameraY > 2732 + 100) { LK.effects.flashScreen(0xff0000, 800); gameOver = true; LK.showGameOver(); return; } // --- Camera Follow --- if (player.y < maxHeight) { maxHeight = player.y; LK.setScore(Math.max(0, Math.floor((PLAYER_START_Y - maxHeight) / 10))); scoreTxt.setText(LK.getScore()); } // --- Scene transitions and visuals --- var score = LK.getScore(); if (score < 1000 && scene !== 1) { scene = 1; clearSceneObjects(); game.setBackgroundColor(0x6ec6ff); // Masmavi gökyüzü } if (score >= 1000 && score < 2000 && scene !== 2) { scene = 2; game.setBackgroundColor(0x000000); // Siyah gece addStars(); } if (score >= 2000 && score < 3000 && scene !== 3) { scene = 3; game.setBackgroundColor(0x1a0033); // Uzay moru addPlanets(); } if (score >= 3000 && score < 3500 && scene !== 4) { scene = 4; game.setBackgroundColor(0xfff799); // Cennet sarısı addCennet(); } if (score >= 3500) { // Cennet haritasında sona er LK.effects.flashScreen(0xffffcc, 1200); gameOver = true; LK.showYouWin(); return; } var targetCameraY = player.y - (2732 - CAMERA_OFFSET); if (targetCameraY < cameraY) { cameraY = targetCameraY; } // Move all objects up by cameraY // Move all objects up by cameraY (endless climb illusion) for (var k = 0; k < platforms.length; k++) { // Move platform up by camera scroll delta platforms[k].y -= cameraY - (platforms[k].baseCameraY || 0); platforms[k].baseCameraY = cameraY; platforms[k].update(); } for (var l = 0; l < obstacles.length; l++) { obstacles[l].y -= cameraY - (obstacles[l].baseCameraY || 0); obstacles[l].baseCameraY = cameraY; } player.y -= cameraY - (player.baseCameraY || 0); player.baseCameraY = cameraY; // --- Generate More Platforms --- generatePlatformsUpTo(cameraY - 1200); // --- Cleanup --- cleanupPlatformsObstacles(); }; // --- Game Over Handler (reset on restart) --- LK.on('gameover', function () { resetGame(); }); // --- Start Game --- resetGame();
===================================================================
--- original.js
+++ change.js
@@ -314,35 +314,41 @@
player.isOnGround = false;
for (var i = 0; i < platforms.length; i++) {
var plat = platforms[i];
// Only check collision if falling
- if (player.vy >= 0) {
- var px = player.x;
- var py = player.y + player.height / 2;
- var platLeft = plat.x - plat.width / 2;
- var platRight = plat.x + plat.width / 2;
- var platTop = plat.y - plat.height / 2;
- var platBottom = plat.y + plat.height / 2;
- if (px > platLeft + 10 && px < platRight - 10 && py > platTop && py < platTop + 40 && player.y < plat.y) {
- // Landed on platform
- player.y = platTop - player.height / 2 + 1;
- player.vy = 0;
- player.isOnGround = true;
+ // Only check if platform is within visible area (not far above or below)
+ if (plat.y > cameraY - 200 && plat.y < cameraY + 2732 + 200) {
+ if (player.vy >= 0) {
+ var px = player.x;
+ var py = player.y + player.height / 2;
+ var platLeft = plat.x - plat.width / 2;
+ var platRight = plat.x + plat.width / 2;
+ var platTop = plat.y - plat.height / 2;
+ var platBottom = plat.y + plat.height / 2;
+ if (px > platLeft + 10 && px < platRight - 10 && py > platTop && py < platTop + 40 && player.y < plat.y) {
+ // Landed on platform
+ player.y = platTop - player.height / 2 + 1;
+ player.vy = 0;
+ player.isOnGround = true;
+ }
}
}
}
// --- Obstacle Collision ---
for (var j = 0; j < obstacles.length; j++) {
var obs = obstacles[j];
- // Simple circle-rect collision
- var dx = Math.abs(player.x - obs.x);
- var dy = Math.abs(player.y - obs.y);
- if (dx < player.width / 2 + OBSTACLE_SIZE / 2 - 10 && dy < player.height / 2 + OBSTACLE_SIZE / 2 - 10) {
- // Hit obstacle
- LK.effects.flashScreen(0xff0000, 800);
- gameOver = true;
- LK.showGameOver();
- return;
+ // Only check if obstacle is within visible area (not far above or below)
+ if (obs.y > cameraY - 200 && obs.y < cameraY + 2732 + 200) {
+ // Simple circle-rect collision
+ var dx = Math.abs(player.x - obs.x);
+ var dy = Math.abs(player.y - obs.y);
+ if (dx < player.width / 2 + OBSTACLE_SIZE / 2 - 10 && dy < player.height / 2 + OBSTACLE_SIZE / 2 - 10) {
+ // Hit obstacle
+ LK.effects.flashScreen(0xff0000, 800);
+ gameOver = true;
+ LK.showGameOver();
+ return;
+ }
}
}
// --- Fall Off Screen ---
if (player.y - cameraY > 2732 + 100) {