User prompt
boruların arasını büyült
User prompt
madeni paralar yerinde dursun
User prompt
jetonlar boruların arasında olsun
User prompt
boru aralarını büyült
User prompt
koin koy
User prompt
borular yere değsin
User prompt
file:///C:/Users/hesap/Downloads/flappy_bird_backdrop_by_lenaxux_dg34rsu-fullview.jpg arka planı bu yap
User prompt
basınca uçuşunu azalt
User prompt
oyunun başlama yerinide yap
User prompt
birazdaha azalt
User prompt
kuşun yere düşme hızını yavaşlat
Code edit (1 edits merged)
Please save this source code
User prompt
Flappy Bird: Gap Glide
Initial prompt
bana flappy bird yap
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ // Bird class var Bird = Container.expand(function () { var self = Container.call(this); var birdSprite = self.attachAsset('bird', { anchorX: 0.5, anchorY: 0.5 }); self.vy = 0; // vertical velocity // Bird physics constants self.gravity = 0.8; // px per frame^2 (further reduced for even slower fall) self.flapStrength = -24; // px per frame (reduced for less ascent) // Flap method self.flap = function () { self.vy = self.flapStrength; // Animate a quick scale for feedback tween(birdSprite, { scaleY: 0.7 }, { duration: 60, easing: tween.cubicOut, onFinish: function onFinish() { tween(birdSprite, { scaleY: 1 }, { duration: 120, easing: tween.cubicOut }); } }); }; // Update method self.update = function () { self.vy += self.gravity; self.y += self.vy; // Clamp rotation for visual feedback var maxAngle = Math.PI / 4; var minAngle = -Math.PI / 6; var angle = self.vy / 40 * maxAngle; if (angle > maxAngle) angle = maxAngle; if (angle < minAngle) angle = minAngle; birdSprite.rotation = angle; }; return self; }); // PipePair class (top and bottom pipes) var PipePair = Container.expand(function () { var self = Container.call(this); // Pipe gap size and min/max Y for gap center self.gap = 600; // Increased gap size for easier play self.pipeWidth = 200; self.pipeHeight = 900; // Top pipe self.topPipe = self.attachAsset('pipe', { anchorX: 0.5, anchorY: 1, width: self.pipeWidth, height: self.pipeHeight }); // Bottom pipe self.bottomPipe = self.attachAsset('pipe', { anchorX: 0.5, anchorY: 0, width: self.pipeWidth, height: self.pipeHeight }); // Set pipes' positions based on gapY self.setGapY = function (gapY) { // Top pipe: bottom at gapY - gap/2, top at y=0 self.topPipe.y = gapY - self.gap / 2; self.topPipe.height = self.topPipe.y; // height from top to bottom of top pipe // Bottom pipe: top at gapY + gap/2, bottom at ground var groundY = 2732 - 60; // GROUND_Y self.bottomPipe.y = gapY + self.gap / 2; self.bottomPipe.height = groundY - self.bottomPipe.y; // height from top of bottom pipe to ground }; // For scoring self.passed = false; // Update method self.update = function () { self.x -= pipeSpeed; }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x87ceeb // Sky blue }); /**** * Game Code ****/ // Game constants // Bird: yellow ellipse // Pipe: green box // Ground: brown box var BIRD_START_X = 600; var BIRD_START_Y = 1200; var GROUND_Y = 2732 - 60; // ground height is 120, anchorY=0 var PIPE_INTERVAL = 105; // frames between pipes (~1.75s at 60fps) var PIPE_MIN_Y = 500; var PIPE_MAX_Y = 2732 - 500 - 420; // leave space for gap and ground var pipeSpeed = 16; // px per frame, increases with score // Game state var bird; var pipes = []; var ground; var score = 0; var scoreTxt; var lastPipeTick = 0; var gameStarted = false; var gameOver = false; // Add ground ground = LK.getAsset('ground', { anchorX: 0, anchorY: 0, x: 0, y: GROUND_Y }); game.addChild(ground); // Add score text to GUI scoreTxt = new Text2('0', { size: 160, fill: 0xFFFFFF }); scoreTxt.anchor.set(0.5, 0); LK.gui.top.addChild(scoreTxt); // Add bird bird = new Bird(); bird.x = BIRD_START_X; bird.y = BIRD_START_Y; game.addChild(bird); // Start game on first tap function startGame() { if (!gameStarted) { gameStarted = true; score = 0; LK.setScore(0); scoreTxt.setText('0'); // Remove old pipes for (var i = 0; i < pipes.length; i++) { pipes[i].destroy(); } pipes = []; // Reset bird bird.x = BIRD_START_X; bird.y = BIRD_START_Y; bird.vy = 0; pipeSpeed = 16; lastPipeTick = LK.ticks; gameOver = false; } } // Flap on tap game.down = function (x, y, obj) { if (gameOver) return; if (!gameStarted) { startGame(); } bird.flap(); }; // Main update loop game.update = function () { if (!gameStarted || gameOver) return; // Bird physics bird.update(); // Clamp bird to top of screen if (bird.y < 0) bird.y = 0; // Pipes for (var i = pipes.length - 1; i >= 0; i--) { var pipePair = pipes[i]; pipePair.update(); // Remove pipes off screen if (pipePair.x < -pipePair.pipeWidth) { pipePair.destroy(); pipes.splice(i, 1); continue; } // Scoring: passed center of pipes if (!pipePair.passed && bird.x > pipePair.x + pipePair.pipeWidth / 2) { pipePair.passed = true; score += 1; LK.setScore(score); scoreTxt.setText(score + ''); // Increase speed every 10 points if (score % 10 === 0) { pipeSpeed += 2; } } // Collision detection // Top pipe if (bird.intersects(pipePair.topPipe) || bird.intersects(pipePair.bottomPipe)) { endGame(); return; } } // Add new pipes if (LK.ticks - lastPipeTick > PIPE_INTERVAL) { var gapY = PIPE_MIN_Y + Math.floor(Math.random() * (PIPE_MAX_Y - PIPE_MIN_Y)); var pipePair = new PipePair(); pipePair.x = 2048 + 200; // start just off right edge pipePair.setGapY(gapY); pipes.push(pipePair); game.addChild(pipePair); lastPipeTick = LK.ticks; } // Ground collision if (bird.y + bird.height / 2 > GROUND_Y) { bird.y = GROUND_Y - bird.height / 2; endGame(); return; } }; // End game function endGame() { if (gameOver) return; gameOver = true; // Flash red LK.effects.flashScreen(0xff0000, 600); // Show game over popup (handled by LK) LK.showGameOver(); } // Reset on game over (handled by LK engine, but for safety) game.onGameOver = function () { gameStarted = false; gameOver = false; score = 0; LK.setScore(0); scoreTxt.setText('0'); // Remove pipes for (var i = 0; i < pipes.length; i++) { pipes[i].destroy(); } pipes = []; // Reset bird bird.x = BIRD_START_X; bird.y = BIRD_START_Y; bird.vy = 0; pipeSpeed = 16; lastPipeTick = LK.ticks; };
===================================================================
--- original.js
+++ change.js
@@ -49,29 +49,13 @@
birdSprite.rotation = angle;
};
return self;
});
-// Coin class
-var Coin = Container.expand(function () {
- var self = Container.call(this);
- var coinSprite = self.attachAsset('coin', {
- anchorX: 0.5,
- anchorY: 0.5,
- width: 100,
- height: 100
- });
- self.radius = 50; // for collision
- self.collected = false;
- self.update = function () {
- // Coins are stationary; no movement needed
- };
- return self;
-});
// PipePair class (top and bottom pipes)
var PipePair = Container.expand(function () {
var self = Container.call(this);
// Pipe gap size and min/max Y for gap center
- self.gap = 600; // Increased gap for easier play
+ self.gap = 600; // Increased gap size for easier play
self.pipeWidth = 200;
self.pipeHeight = 900;
// Top pipe
self.topPipe = self.attachAsset('pipe', {
@@ -124,14 +108,13 @@
var BIRD_START_Y = 1200;
var GROUND_Y = 2732 - 60; // ground height is 120, anchorY=0
var PIPE_INTERVAL = 105; // frames between pipes (~1.75s at 60fps)
var PIPE_MIN_Y = 500;
-var PIPE_MAX_Y = 2732 - 500 - 600; // leave space for increased gap and ground
+var PIPE_MAX_Y = 2732 - 500 - 420; // leave space for gap and ground
var pipeSpeed = 16; // px per frame, increases with score
// Game state
var bird;
var pipes = [];
-var coins = [];
var ground;
var score = 0;
var scoreTxt;
var lastPipeTick = 0;
@@ -168,13 +151,8 @@
for (var i = 0; i < pipes.length; i++) {
pipes[i].destroy();
}
pipes = [];
- // Remove old coins
- for (var i = 0; i < coins.length; i++) {
- coins[i].destroy();
- }
- coins = [];
// Reset bird
bird.x = BIRD_START_X;
bird.y = BIRD_START_Y;
bird.vy = 0;
@@ -233,18 +211,8 @@
pipePair.x = 2048 + 200; // start just off right edge
pipePair.setGapY(gapY);
pipes.push(pipePair);
game.addChild(pipePair);
- // 50% chance to spawn a coin in the gap
- if (Math.random() < 0.5) {
- var coin = new Coin();
- // Place coin in the center of the gap, horizontally aligned with the pipes
- coin.x = pipePair.x;
- // Vertically, coin is centered in the gap
- coin.y = gapY;
- coins.push(coin);
- game.addChild(coin);
- }
lastPipeTick = LK.ticks;
}
// Ground collision
if (bird.y + bird.height / 2 > GROUND_Y) {