/**** 
* Plugins
****/ 
var tween = LK.import("@upit/tween.v1");
/**** 
* Classes
****/ 
// Bird class
var Bird = Container.expand(function () {
	var self = Container.call(this);
	// Attach bird asset (ellipse, yellow)
	var birdAsset = self.attachAsset('bird', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	// Set up physics
	self.vy = 0; // vertical speed
	self.gravity = 1.5; // gravity per frame
	self.flapStrength = -28; // negative for upward movement
	// Bird update: apply gravity, move, clamp position
	self.update = function () {
		self.vy += self.gravity;
		self.y += self.vy;
		// Clamp to top of screen
		if (self.y < self.height / 2) {
			self.y = self.height / 2;
			self.vy = 0;
		}
	};
	// Flap: set upward velocity
	self.flap = function () {
		self.vy = self.flapStrength;
	};
	return self;
});
// PipePair class (top and bottom pipes)
var PipePair = Container.expand(function () {
	var self = Container.call(this);
	// Pipe config
	self.pipeWidth = 220;
	self.gapHeight = 520;
	self.speed = 12;
	// Randomize gap position
	var minGapY = 350;
	var maxGapY = 2732 - 350 - self.gapHeight;
	var gapY = minGapY + Math.floor(Math.random() * (maxGapY - minGapY + 1));
	// Top pipe
	self.topPipe = self.attachAsset('pipe', {
		anchorX: 0,
		anchorY: 1,
		width: self.pipeWidth,
		height: gapY,
		y: gapY,
		x: 0,
		tint: 0x3bb44a
	});
	// Bottom pipe
	self.bottomPipe = self.attachAsset('pipe', {
		anchorX: 0,
		anchorY: 0,
		width: self.pipeWidth,
		height: 2732 - (gapY + self.gapHeight),
		y: gapY + self.gapHeight,
		x: 0,
		tint: 0x3bb44a
	});
	// Used for scoring
	self.passed = false;
	// Move pipes left
	self.update = function () {
		self.x -= self.speed;
	};
	// Helper: get bounding rectangles for collision
	self.getTopRect = function () {
		return new Rectangle(self.x, 0, self.pipeWidth, gapY);
	};
	self.getBottomRect = function () {
		return new Rectangle(self.x, gapY + self.gapHeight, self.pipeWidth, 2732 - (gapY + self.gapHeight));
	};
	return self;
});
/**** 
* Initialize Game
****/ 
var game = new LK.Game({
	backgroundColor: 0x87ceeb // Sky blue
});
/**** 
* Game Code
****/ 
// --- Game Variables ---
// --- Asset Initialization ---
var bird;
var pipes = [];
var score = 0;
var scoreTxt;
var groundY = 2732 - 120; // ground is at bottom, bird is 120px tall
var pipeInterval = 90; // frames between pipes
var ticksSincePipe = 0;
var gameStarted = false;
var gameOver = false;
// --- Score Display ---
scoreTxt = new Text2('0', {
	size: 180,
	fill: 0xFFFFFF
});
scoreTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreTxt);
// --- Bird ---
bird = new Bird();
game.addChild(bird);
bird.x = 2048 / 3;
bird.y = 2732 / 2;
// --- Game Start Helper ---
function startGame() {
	// Reset
	for (var i = 0; i < pipes.length; i++) {
		pipes[i].destroy();
	}
	pipes = [];
	score = 0;
	scoreTxt.setText(score);
	bird.x = 2048 / 3;
	bird.y = 2732 / 2;
	bird.vy = 0;
	ticksSincePipe = 0;
	gameStarted = true;
	gameOver = false;
}
// --- Input: Tap to Flap ---
game.down = function (x, y, obj) {
	if (!gameStarted) {
		startGame();
	}
	if (!gameOver) {
		bird.flap();
	}
};
// --- Main Update Loop ---
game.update = function () {
	if (!gameStarted || gameOver) {
		return;
	}
	// Bird physics
	bird.update();
	// Add new pipes
	ticksSincePipe++;
	if (ticksSincePipe >= pipeInterval) {
		ticksSincePipe = 0;
		var pipePair = new PipePair();
		pipePair.x = 2048;
		game.addChild(pipePair);
		pipes.push(pipePair);
	}
	// Update pipes, check for offscreen, collisions, scoring
	for (var i = pipes.length - 1; i >= 0; i--) {
		var pipe = pipes[i];
		pipe.update();
		// Remove pipes offscreen
		if (pipe.x + pipe.pipeWidth < 0) {
			pipe.destroy();
			pipes.splice(i, 1);
			continue;
		}
		// Collision detection (bird vs pipes)
		var birdRect = new Rectangle(bird.x - bird.width / 2 + 10, bird.y - bird.height / 2 + 10, bird.width - 20, bird.height - 20);
		var topRect = new Rectangle(pipe.x, 0, pipe.pipeWidth, pipe.topPipe.height);
		var bottomRect = new Rectangle(pipe.x, pipe.bottomPipe.y, pipe.pipeWidth, pipe.bottomPipe.height);
		if (rectsIntersect(birdRect, topRect) || rectsIntersect(birdRect, bottomRect)) {
			triggerGameOver();
			return;
		}
		// Scoring: passed pipe
		if (!pipe.passed && pipe.x + pipe.pipeWidth < bird.x) {
			pipe.passed = true;
			score++;
			scoreTxt.setText(score);
		}
	}
	// Collision with ground or ceiling
	if (bird.y + bird.height / 2 >= 2732) {
		bird.y = 2732 - bird.height / 2;
		triggerGameOver();
		return;
	}
	if (bird.y - bird.height / 2 <= 0) {
		bird.y = bird.height / 2;
		bird.vy = 0;
	}
};
// --- Rectangle Intersection Helper ---
function rectsIntersect(r1, r2) {
	return !(r2.x > r1.x + r1.width || r2.x + r2.width < r1.x || r2.y > r1.y + r1.height || r2.y + r2.height < r1.y);
}
// --- Game Over Handler ---
function triggerGameOver() {
	if (gameOver) return;
	gameOver = true;
	LK.effects.flashScreen(0xff0000, 600);
	LK.showGameOver();
}
// --- Initial State: Show bird, wait for tap ---
gameStarted = false;
gameOver = false;
score = 0;
scoreTxt.setText(score); ===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,209 @@
-/****
+/**** 
+* Plugins
+****/ 
+var tween = LK.import("@upit/tween.v1");
+
+/**** 
+* Classes
+****/ 
+// Bird class
+var Bird = Container.expand(function () {
+	var self = Container.call(this);
+	// Attach bird asset (ellipse, yellow)
+	var birdAsset = self.attachAsset('bird', {
+		anchorX: 0.5,
+		anchorY: 0.5
+	});
+	// Set up physics
+	self.vy = 0; // vertical speed
+	self.gravity = 1.5; // gravity per frame
+	self.flapStrength = -28; // negative for upward movement
+	// Bird update: apply gravity, move, clamp position
+	self.update = function () {
+		self.vy += self.gravity;
+		self.y += self.vy;
+		// Clamp to top of screen
+		if (self.y < self.height / 2) {
+			self.y = self.height / 2;
+			self.vy = 0;
+		}
+	};
+	// Flap: set upward velocity
+	self.flap = function () {
+		self.vy = self.flapStrength;
+	};
+	return self;
+});
+// PipePair class (top and bottom pipes)
+var PipePair = Container.expand(function () {
+	var self = Container.call(this);
+	// Pipe config
+	self.pipeWidth = 220;
+	self.gapHeight = 520;
+	self.speed = 12;
+	// Randomize gap position
+	var minGapY = 350;
+	var maxGapY = 2732 - 350 - self.gapHeight;
+	var gapY = minGapY + Math.floor(Math.random() * (maxGapY - minGapY + 1));
+	// Top pipe
+	self.topPipe = self.attachAsset('pipe', {
+		anchorX: 0,
+		anchorY: 1,
+		width: self.pipeWidth,
+		height: gapY,
+		y: gapY,
+		x: 0,
+		tint: 0x3bb44a
+	});
+	// Bottom pipe
+	self.bottomPipe = self.attachAsset('pipe', {
+		anchorX: 0,
+		anchorY: 0,
+		width: self.pipeWidth,
+		height: 2732 - (gapY + self.gapHeight),
+		y: gapY + self.gapHeight,
+		x: 0,
+		tint: 0x3bb44a
+	});
+	// Used for scoring
+	self.passed = false;
+	// Move pipes left
+	self.update = function () {
+		self.x -= self.speed;
+	};
+	// Helper: get bounding rectangles for collision
+	self.getTopRect = function () {
+		return new Rectangle(self.x, 0, self.pipeWidth, gapY);
+	};
+	self.getBottomRect = function () {
+		return new Rectangle(self.x, gapY + self.gapHeight, self.pipeWidth, 2732 - (gapY + self.gapHeight));
+	};
+	return self;
+});
+
+/**** 
 * Initialize Game
-****/
+****/ 
 var game = new LK.Game({
-	backgroundColor: 0x000000
-});
\ No newline at end of file
+	backgroundColor: 0x87ceeb // Sky blue
+});
+
+/**** 
+* Game Code
+****/ 
+// --- Game Variables ---
+// --- Asset Initialization ---
+var bird;
+var pipes = [];
+var score = 0;
+var scoreTxt;
+var groundY = 2732 - 120; // ground is at bottom, bird is 120px tall
+var pipeInterval = 90; // frames between pipes
+var ticksSincePipe = 0;
+var gameStarted = false;
+var gameOver = false;
+// --- Score Display ---
+scoreTxt = new Text2('0', {
+	size: 180,
+	fill: 0xFFFFFF
+});
+scoreTxt.anchor.set(0.5, 0);
+LK.gui.top.addChild(scoreTxt);
+// --- Bird ---
+bird = new Bird();
+game.addChild(bird);
+bird.x = 2048 / 3;
+bird.y = 2732 / 2;
+// --- Game Start Helper ---
+function startGame() {
+	// Reset
+	for (var i = 0; i < pipes.length; i++) {
+		pipes[i].destroy();
+	}
+	pipes = [];
+	score = 0;
+	scoreTxt.setText(score);
+	bird.x = 2048 / 3;
+	bird.y = 2732 / 2;
+	bird.vy = 0;
+	ticksSincePipe = 0;
+	gameStarted = true;
+	gameOver = false;
+}
+// --- Input: Tap to Flap ---
+game.down = function (x, y, obj) {
+	if (!gameStarted) {
+		startGame();
+	}
+	if (!gameOver) {
+		bird.flap();
+	}
+};
+// --- Main Update Loop ---
+game.update = function () {
+	if (!gameStarted || gameOver) {
+		return;
+	}
+	// Bird physics
+	bird.update();
+	// Add new pipes
+	ticksSincePipe++;
+	if (ticksSincePipe >= pipeInterval) {
+		ticksSincePipe = 0;
+		var pipePair = new PipePair();
+		pipePair.x = 2048;
+		game.addChild(pipePair);
+		pipes.push(pipePair);
+	}
+	// Update pipes, check for offscreen, collisions, scoring
+	for (var i = pipes.length - 1; i >= 0; i--) {
+		var pipe = pipes[i];
+		pipe.update();
+		// Remove pipes offscreen
+		if (pipe.x + pipe.pipeWidth < 0) {
+			pipe.destroy();
+			pipes.splice(i, 1);
+			continue;
+		}
+		// Collision detection (bird vs pipes)
+		var birdRect = new Rectangle(bird.x - bird.width / 2 + 10, bird.y - bird.height / 2 + 10, bird.width - 20, bird.height - 20);
+		var topRect = new Rectangle(pipe.x, 0, pipe.pipeWidth, pipe.topPipe.height);
+		var bottomRect = new Rectangle(pipe.x, pipe.bottomPipe.y, pipe.pipeWidth, pipe.bottomPipe.height);
+		if (rectsIntersect(birdRect, topRect) || rectsIntersect(birdRect, bottomRect)) {
+			triggerGameOver();
+			return;
+		}
+		// Scoring: passed pipe
+		if (!pipe.passed && pipe.x + pipe.pipeWidth < bird.x) {
+			pipe.passed = true;
+			score++;
+			scoreTxt.setText(score);
+		}
+	}
+	// Collision with ground or ceiling
+	if (bird.y + bird.height / 2 >= 2732) {
+		bird.y = 2732 - bird.height / 2;
+		triggerGameOver();
+		return;
+	}
+	if (bird.y - bird.height / 2 <= 0) {
+		bird.y = bird.height / 2;
+		bird.vy = 0;
+	}
+};
+// --- Rectangle Intersection Helper ---
+function rectsIntersect(r1, r2) {
+	return !(r2.x > r1.x + r1.width || r2.x + r2.width < r1.x || r2.y > r1.y + r1.height || r2.y + r2.height < r1.y);
+}
+// --- Game Over Handler ---
+function triggerGameOver() {
+	if (gameOver) return;
+	gameOver = true;
+	LK.effects.flashScreen(0xff0000, 600);
+	LK.showGameOver();
+}
+// --- Initial State: Show bird, wait for tap ---
+gameStarted = false;
+gameOver = false;
+score = 0;
+scoreTxt.setText(score);
\ No newline at end of file