User prompt
karşıya atlarken biraz çaprazlamasına atlasın, gri alanları kaldır
User prompt
gri kısımı düzeltir misin gidip gidip geliyor bug var gibi, oyunu hızlandır
User prompt
baştan yapar mısın olmadı
User prompt
yandaki duvarlar sürekli aşağıya aksın hiç kesilmesin üstlerinde engeller olsun
User prompt
duvarlar sonsuz loop şeklinde aşağıya aksan bitmesin
User prompt
karakter sabit olsun, sağ sol duvar arasında birbirine atlasın, duvarlara yapışık engeller aşağıya aksın
User prompt
baştan yapar mısın ya olmadı oyun
User prompt
ana karakter aşağıdan yukarıya gidecek, engeller yukarıdan aşağıya akacak, ortadaki objeler rastgele dizilecekler
Code edit (1 edits merged)
Please save this source code
User prompt
Wall Jump Climber
Initial prompt
iki duvar var dikine, yukarı doğru tırmanıyoruz, karşına engeller çıkıyor sen tap yaparak karşıki duvara atlıyorsun oyun git gide hızlanıyor, en uzak mesafeye gitmeye çalışıyoruz skorumuz metre/kilometre cinsinden hesaplanıyor, bir yandan ortada rastgele sarı objeler var onları alınca ek puan kazanıyorsun mesafeye
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ // Bonus class var Bonus = Container.expand(function () { var self = Container.call(this); var bonusGfx = self.attachAsset('bonus', { anchorX: 0.5, anchorY: 0.5 }); // Update: move up (relative to world) self.update = function (speed) { self.y -= speed; }; return self; }); // Climber (player) class var Climber = Container.expand(function () { var self = Container.call(this); var climberGfx = self.attachAsset('climber', { anchorX: 0.5, anchorY: 0.5 }); // State: which wall (0 = left, 1 = right) self.wallSide = 0; // Vertical speed (pixels per tick) self.vy = 10; // Horizontal jump speed (pixels per tick) self.vx = 0; // Is currently jumping self.isJumping = false; // Target wall x self.targetX = 0; // Jump to the other wall self.jump = function () { if (self.isJumping) return; self.wallSide = 1 - self.wallSide; self.isJumping = true; // Set target x self.targetX = self.wallSide === 0 ? wallLeftX + wallWidth / 2 + climberWidth / 2 : wallRightX - wallWidth / 2 - climberWidth / 2; // Animate jump with tween tween(self, { x: self.targetX }, { duration: 180, easing: tween.cubicOut, onFinish: function onFinish() { self.x = self.targetX; self.isJumping = false; } }); }; // Update: move up self.update = function () { self.y -= self.vy; }; return self; }); // Obstacle class var Obstacle = Container.expand(function () { var self = Container.call(this); var obsGfx = self.attachAsset('obstacle', { anchorX: 0.5, anchorY: 0.5 }); // Update: move up (relative to world) self.update = function (speed) { self.y -= speed; }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x222244 }); /**** * Game Code ****/ // --- Constants --- var wallWidth = 180; var climberWidth = 120; var climberHeight = 120; var wallGap = 2048 - wallWidth * 2; var wallLeftX = wallWidth / 2; var wallRightX = 2048 - wallWidth / 2; var playTopMargin = 100; // leave top 100px for menu var playBottomMargin = 0; // --- State --- var climber; var obstacles = []; var bonuses = []; var distance = 0; // in pixels var bonusScore = 0; var scrollSpeed = 10; // initial vertical speed (pixels per tick) var speedIncreaseEvery = 600; // increase speed every N ticks var speedIncreaseAmount = 0.7; var maxScrollSpeed = 32; var lastObstacleY = 0; var lastBonusY = 0; var obstacleSpacing = 420; // min vertical distance between obstacles var bonusSpacing = 900; // min vertical distance between bonuses var scoreTxt; // --- Walls --- var wallLeft = LK.getAsset('wall', { anchorX: 0.5, anchorY: 0 }); var wallRight = LK.getAsset('wall', { anchorX: 0.5, anchorY: 0 }); wallLeft.x = wallLeftX; wallLeft.y = 0; wallRight.x = wallRightX; wallRight.y = 0; game.addChild(wallLeft); game.addChild(wallRight); // --- Climber --- climber = new Climber(); climber.x = wallLeftX + wallWidth / 2 + climberWidth / 2; climber.y = 2732 - 400; game.addChild(climber); // --- Score Display --- scoreTxt = new Text2('0 m', { size: 120, fill: 0xFFF700 }); scoreTxt.anchor.set(0.5, 0); LK.gui.top.addChild(scoreTxt); // --- Helper: format distance --- function formatDistance(px) { var meters = Math.floor(px / 10); if (meters < 1000) return meters + " m"; return (meters / 1000).toFixed(2) + " km"; } // --- Helper: update score text --- function updateScoreText() { var meters = Math.floor(distance / 10); var bonusStr = bonusScore > 0 ? " +" + bonusScore : ""; scoreTxt.setText(meters + " m" + bonusStr); } // --- Helper: spawn obstacle --- function spawnObstacle() { // Randomly pick left or right wall var side = Math.random() < 0.5 ? 0 : 1; var obs = new Obstacle(); obs.x = side === 0 ? wallLeftX + wallWidth / 2 + climberWidth / 2 : wallRightX - wallWidth / 2 - climberWidth / 2; obs.y = lastObstacleY + obstacleSpacing + Math.random() * 220; obstacles.push(obs); game.addChild(obs); lastObstacleY = obs.y; } // --- Helper: spawn bonus --- function spawnBonus() { var bonus = new Bonus(); bonus.x = 2048 / 2; bonus.y = lastBonusY + bonusSpacing + Math.random() * 400; bonuses.push(bonus); game.addChild(bonus); lastBonusY = bonus.y; } // --- Initial obstacles/bonuses --- lastObstacleY = climber.y - 400; lastBonusY = climber.y - 800; for (var i = 0; i < 6; i++) { spawnObstacle(); } for (var i = 0; i < 2; i++) { spawnBonus(); } // --- Input: tap to jump --- game.down = function (x, y, obj) { if (!climber.isJumping) { climber.jump(); } }; // --- Move handler (not used for drag, but required by LK) --- game.move = function (x, y, obj) {}; // --- Main update loop --- game.update = function () { // Increase speed over time if (LK.ticks % speedIncreaseEvery === 0 && scrollSpeed < maxScrollSpeed) { scrollSpeed += speedIncreaseAmount; climber.vy = scrollSpeed; } // Move everything down by scrollSpeed, climber stays at fixed Y var screenClimberY = 900; // fixed Y position for climber on screen (about 1/3 from bottom) var deltaY = climber.y - screenClimberY; // Move all obstacles and bonuses down by deltaY, and update their positions for (var i = 0; i < obstacles.length; i++) { obstacles[i].y -= deltaY; } for (var j = 0; j < bonuses.length; j++) { bonuses[j].y -= deltaY; } wallLeft.y -= deltaY; wallRight.y -= deltaY; // Move climber up in world coordinates climber.y -= scrollSpeed; // Update distance distance += scrollSpeed; updateScoreText(); // Move obstacles and check collision for (var i = obstacles.length - 1; i >= 0; i--) { var obs = obstacles[i]; // Remove if off screen if (obs.y < -100) { obs.destroy(); obstacles.splice(i, 1); continue; } // Collision: only if climber is on same wall if (Math.abs(obs.x - climber.x) < 10 && Math.abs(obs.y - screenClimberY) < climberHeight / 2 + 30) { LK.effects.flashScreen(0xff0000, 800); LK.showGameOver(); return; } } // Move bonuses and check collection for (var j = bonuses.length - 1; j >= 0; j--) { var b = bonuses[j]; // Remove if off screen if (b.y < -100) { b.destroy(); bonuses.splice(j, 1); continue; } // Collect if (Math.abs(b.x - climber.x) < 80 && Math.abs(b.y - screenClimberY) < 80) { bonusScore += 10; updateScoreText(); LK.effects.flashObject(b, 0xffff00, 400); b.destroy(); bonuses.splice(j, 1); continue; } } // Spawn new obstacles/bonuses as needed if (lastObstacleY < climber.y + 1200) { spawnObstacle(); } if (lastBonusY < climber.y + 1800) { spawnBonus(); } }; // --- Reset state on game over --- game.on('gameover', function () { // All state will be reset by LK, so nothing to do here }); // --- You win (not used in endless) --- game.on('youwin', function () { // Not used });
===================================================================
--- original.js
+++ change.js
@@ -84,17 +84,13 @@
/****
* Game Code
****/
-// Bonus: yellow ellipse, 80x80
-// Obstacle: dark box, 120x60
-// Wall: gray box, 180x2732 (full height)
-// Character: red box, 120x120
// --- Constants ---
var wallWidth = 180;
var climberWidth = 120;
var climberHeight = 120;
-var wallGap = 2048 - wallWidth * 2; // horizontal gap between walls
+var wallGap = 2048 - wallWidth * 2;
var wallLeftX = wallWidth / 2;
var wallRightX = 2048 - wallWidth / 2;
var playTopMargin = 100; // leave top 100px for menu
var playBottomMargin = 0;
@@ -111,11 +107,9 @@
var lastObstacleY = 0;
var lastBonusY = 0;
var obstacleSpacing = 420; // min vertical distance between obstacles
var bonusSpacing = 900; // min vertical distance between bonuses
-var gameStarted = false;
var scoreTxt;
-var dragNode = null;
// --- Walls ---
var wallLeft = LK.getAsset('wall', {
anchorX: 0.5,
anchorY: 0
@@ -225,9 +219,8 @@
continue;
}
// Collision: only if climber is on same wall
if (Math.abs(obs.x - climber.x) < 10 && Math.abs(obs.y - screenClimberY) < climberHeight / 2 + 30) {
- // Flash and game over
LK.effects.flashScreen(0xff0000, 800);
LK.showGameOver();
return;
}
@@ -251,9 +244,8 @@
continue;
}
}
// Spawn new obstacles/bonuses as needed
- var highestY = Math.max(climber.y, lastObstacleY, lastBonusY);
if (lastObstacleY < climber.y + 1200) {
spawnObstacle();
}
if (lastBonusY < climber.y + 1800) {
make cyberpunk retro, neon wall. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
Make pixelart neon wall obstacle. In-Game asset. 2d. High contrast. No shadows
toony basic flame. In-Game asset. 2d. High contrast. No shadows
mavileri parlat daha renkli olsun
arkasına parıltı ekle
kalbi retro neon yap