User prompt
The main name of the game is " Burhan Nadirin peşinde "
User prompt
Don't let a new one come before the flap sound ends
User prompt
Lower the flap sound a bit and when the game starts just the score screen will remain and come back when you die
User prompt
Please fix the bug: 'Cannot read properties of undefined (reading 'to')' in or related to this line: 'tween(titleTxt).to({' Line Number: 204 ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Beautify the menu
User prompt
Do not let the knocking sound come repeatedly
User prompt
Geri çek
User prompt
Vurma sesi sıra sıra olsun
User prompt
Geri çek
User prompt
Sesler üst üste binmesin
User prompt
Geri çek
User prompt
Geri çek
User prompt
Çarpışma algılama köy
User prompt
Üst boruyla alt boruyu dokunulmaz yap
User prompt
Borular duvar gibi olsun içinden geçemesin
User prompt
Kuş boruya değdiği anda ölsün
User prompt
Ses ayarını düzenle sesler üst üste gelmesin
User prompt
Boruları kalınlaştır
User prompt
Geri çek
User prompt
Oyun ekranını biraz yakınlaştır
User prompt
Başlama butonuna tıkladıktan sonra kuşa tıkayana kadar oyun baslamasın
User prompt
Bir menü yap
User prompt
Menü ekranlarını kaldır
User prompt
Tüm kodlama hatalarını kontrol et ve düzelt
User prompt
Hataları düzelt
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); var storage = LK.import("@upit/storage.v1"); /**** * Classes ****/ var Bird = Container.expand(function () { var self = Container.call(this); var birdSprite = self.attachAsset('bird', { anchorX: 0.5, anchorY: 0.5 }); self.velocityY = 0; self.gravity = 0.8; self.flapStrength = -12; self.isDead = false; self.lastY = 0; self.flap = function () { if (!self.isDead) { self.velocityY = self.flapStrength; LK.getSound('flap').play(); } }; self.update = function () { if (!self.isDead) { self.lastY = self.y; self.velocityY += self.gravity; self.y += self.velocityY; // Rotate bird based on velocity birdSprite.rotation = Math.max(-0.5, Math.min(0.5, self.velocityY * 0.1)); // Check ground collision if (self.y > groundY - 40) { self.y = groundY - 40; self.die(); } // Check ceiling collision if (self.y < 40) { self.y = 40; self.velocityY = 0; } } }; self.die = function () { if (!self.isDead) { self.isDead = true; LK.getSound('hit').play(); gameState = 'gameover'; // Update best score var currentScore = LK.getScore(); if (currentScore > bestScore) { bestScore = currentScore; storage.set('bestScore', bestScore); bestScoreTxt.setText('Best: ' + bestScore); } LK.setTimeout(function () { LK.showGameOver(); }, 1000); } }; return self; }); var Pipe = Container.expand(function (pipeX, gapY) { var self = Container.call(this); var topPipe = self.attachAsset('pipe', { anchorX: 0.5, anchorY: 0.0, y: 0, height: gapY - 200 }); var bottomPipe = self.attachAsset('pipe', { anchorX: 0.5, anchorY: 0.0, y: gapY + 200, height: 2732 - (gapY + 200) }); self.x = pipeX; self.speed = -4; self.scored = false; self.lastX = pipeX; self.update = function () { self.lastX = self.x; self.x += self.speed; }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x87CEEB }); /**** * Game Code ****/ // Game variables var bird; var pipes = []; var groundY = 2632; var pipeSpawnTimer = 0; var pipeSpawnInterval = 180; var gameStarted = false; var gameState = 'menu'; // 'menu', 'playing', 'gameover' // Create ground var ground = game.addChild(LK.getAsset('ground', { anchorX: 0.5, anchorY: 0.5, x: 1024, y: groundY + 50 })); // Create bird bird = new Bird(); bird.x = 300; bird.y = 1366; game.addChild(bird); // Create score display var scoreTxt = new Text2('0', { size: 120, fill: 0xFFFFFF }); scoreTxt.anchor.set(0.5, 0); scoreTxt.y = 100; LK.gui.top.addChild(scoreTxt); // Create instructions var instructionTxt = new Text2('Tap to flap!', { size: 60, fill: 0xFFFFFF }); instructionTxt.anchor.set(0.5, 0); instructionTxt.y = 300; LK.gui.top.addChild(instructionTxt); // Hide game elements initially bird.alpha = 0; scoreTxt.alpha = 0; instructionTxt.alpha = 0; // Create start menu elements var titleTxt = new Text2('Flappy Bird', { size: 150, fill: 0xFFD700 }); titleTxt.anchor.set(0.5, 0.5); LK.gui.center.addChild(titleTxt); titleTxt.y = -200; var startButtonTxt = new Text2('TAP TO START', { size: 80, fill: 0xFFFFFF }); startButtonTxt.anchor.set(0.5, 0.5); LK.gui.center.addChild(startButtonTxt); startButtonTxt.y = 100; var bestScoreTxt = new Text2('Best: 0', { size: 60, fill: 0xFFFFFF }); bestScoreTxt.anchor.set(0.5, 0.5); LK.gui.center.addChild(bestScoreTxt); bestScoreTxt.y = 200; // Initialize best score after bestScoreTxt is created var bestScore = storage.get('bestScore') || 0; // Update best score display text bestScoreTxt.setText('Best: ' + bestScore); function spawnPipe() { var gapY = 800 + Math.random() * 1200; var pipe = new Pipe(2200, gapY); pipes.push(pipe); game.addChild(pipe); } function checkCollisions() { if (bird.isDead) return; for (var i = 0; i < pipes.length; i++) { var pipe = pipes[i]; // Check if bird passes through pipe gap for scoring if (!pipe.scored && pipe.lastX > bird.x && pipe.x <= bird.x) { pipe.scored = true; LK.setScore(LK.getScore() + 1); scoreTxt.setText(LK.getScore().toString()); LK.getSound('score').play(); } // Check collision with pipes if (bird.x + 30 > pipe.x - 80 && bird.x - 30 < pipe.x + 80) { // Check top pipe collision (pipe.children[0].y is bottom of top pipe) if (bird.y - 30 < pipe.children[0].y) { bird.die(); return; } // Check bottom pipe collision (pipe.children[1].y is top of bottom pipe) if (bird.y + 30 > pipe.children[1].y) { bird.die(); return; } } } } function cleanupPipes() { for (var i = pipes.length - 1; i >= 0; i--) { if (pipes[i].x < -200) { pipes[i].destroy(); pipes.splice(i, 1); } } } game.down = function (x, y, obj) { if (gameState === 'menu') { gameState = 'playing'; gameStarted = true; // Hide menu elements titleTxt.alpha = 0; startButtonTxt.alpha = 0; bestScoreTxt.alpha = 0; // Show game elements bird.alpha = 1; scoreTxt.alpha = 1; instructionTxt.alpha = 1; // Hide instruction after a brief moment LK.setTimeout(function () { instructionTxt.alpha = 0; }, 1000); } else if (gameState === 'playing') { bird.flap(); } }; game.update = function () { if (gameState !== 'playing') return; // Spawn pipes pipeSpawnTimer++; if (pipeSpawnTimer >= pipeSpawnInterval) { spawnPipe(); pipeSpawnTimer = 0; } // Check collisions and scoring checkCollisions(); // Clean up off-screen pipes cleanupPipes(); };
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1");
/****
* Classes
****/
var Bird = Container.expand(function () {
var self = Container.call(this);
var birdSprite = self.attachAsset('bird', {
anchorX: 0.5,
anchorY: 0.5
});
self.velocityY = 0;
self.gravity = 0.8;
self.flapStrength = -12;
self.isDead = false;
self.lastY = 0;
self.flap = function () {
if (!self.isDead) {
self.velocityY = self.flapStrength;
LK.getSound('flap').play();
}
};
self.update = function () {
if (!self.isDead) {
self.lastY = self.y;
self.velocityY += self.gravity;
self.y += self.velocityY;
// Rotate bird based on velocity
birdSprite.rotation = Math.max(-0.5, Math.min(0.5, self.velocityY * 0.1));
// Check ground collision
if (self.y > groundY - 40) {
self.y = groundY - 40;
self.die();
}
// Check ceiling collision
if (self.y < 40) {
self.y = 40;
self.velocityY = 0;
}
}
};
self.die = function () {
if (!self.isDead) {
self.isDead = true;
LK.getSound('hit').play();
gameState = 'gameover';
// Update best score
var currentScore = LK.getScore();
if (currentScore > bestScore) {
bestScore = currentScore;
storage.set('bestScore', bestScore);
bestScoreTxt.setText('Best: ' + bestScore);
}
LK.setTimeout(function () {
LK.showGameOver();
}, 1000);
}
};
return self;
});
var Pipe = Container.expand(function (pipeX, gapY) {
var self = Container.call(this);
var topPipe = self.attachAsset('pipe', {
anchorX: 0.5,
anchorY: 0.0,
y: 0,
height: gapY - 200
});
var bottomPipe = self.attachAsset('pipe', {
anchorX: 0.5,
anchorY: 0.0,
y: gapY + 200,
height: 2732 - (gapY + 200)
});
self.x = pipeX;
self.speed = -4;
self.scored = false;
self.lastX = pipeX;
self.update = function () {
self.lastX = self.x;
self.x += self.speed;
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x87CEEB
});
/****
* Game Code
****/
// Game variables
var bird;
var pipes = [];
var groundY = 2632;
var pipeSpawnTimer = 0;
var pipeSpawnInterval = 180;
var gameStarted = false;
var gameState = 'menu'; // 'menu', 'playing', 'gameover'
// Create ground
var ground = game.addChild(LK.getAsset('ground', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: groundY + 50
}));
// Create bird
bird = new Bird();
bird.x = 300;
bird.y = 1366;
game.addChild(bird);
// Create score display
var scoreTxt = new Text2('0', {
size: 120,
fill: 0xFFFFFF
});
scoreTxt.anchor.set(0.5, 0);
scoreTxt.y = 100;
LK.gui.top.addChild(scoreTxt);
// Create instructions
var instructionTxt = new Text2('Tap to flap!', {
size: 60,
fill: 0xFFFFFF
});
instructionTxt.anchor.set(0.5, 0);
instructionTxt.y = 300;
LK.gui.top.addChild(instructionTxt);
// Hide game elements initially
bird.alpha = 0;
scoreTxt.alpha = 0;
instructionTxt.alpha = 0;
// Create start menu elements
var titleTxt = new Text2('Flappy Bird', {
size: 150,
fill: 0xFFD700
});
titleTxt.anchor.set(0.5, 0.5);
LK.gui.center.addChild(titleTxt);
titleTxt.y = -200;
var startButtonTxt = new Text2('TAP TO START', {
size: 80,
fill: 0xFFFFFF
});
startButtonTxt.anchor.set(0.5, 0.5);
LK.gui.center.addChild(startButtonTxt);
startButtonTxt.y = 100;
var bestScoreTxt = new Text2('Best: 0', {
size: 60,
fill: 0xFFFFFF
});
bestScoreTxt.anchor.set(0.5, 0.5);
LK.gui.center.addChild(bestScoreTxt);
bestScoreTxt.y = 200;
// Initialize best score after bestScoreTxt is created
var bestScore = storage.get('bestScore') || 0;
// Update best score display text
bestScoreTxt.setText('Best: ' + bestScore);
function spawnPipe() {
var gapY = 800 + Math.random() * 1200;
var pipe = new Pipe(2200, gapY);
pipes.push(pipe);
game.addChild(pipe);
}
function checkCollisions() {
if (bird.isDead) return;
for (var i = 0; i < pipes.length; i++) {
var pipe = pipes[i];
// Check if bird passes through pipe gap for scoring
if (!pipe.scored && pipe.lastX > bird.x && pipe.x <= bird.x) {
pipe.scored = true;
LK.setScore(LK.getScore() + 1);
scoreTxt.setText(LK.getScore().toString());
LK.getSound('score').play();
}
// Check collision with pipes
if (bird.x + 30 > pipe.x - 80 && bird.x - 30 < pipe.x + 80) {
// Check top pipe collision (pipe.children[0].y is bottom of top pipe)
if (bird.y - 30 < pipe.children[0].y) {
bird.die();
return;
}
// Check bottom pipe collision (pipe.children[1].y is top of bottom pipe)
if (bird.y + 30 > pipe.children[1].y) {
bird.die();
return;
}
}
}
}
function cleanupPipes() {
for (var i = pipes.length - 1; i >= 0; i--) {
if (pipes[i].x < -200) {
pipes[i].destroy();
pipes.splice(i, 1);
}
}
}
game.down = function (x, y, obj) {
if (gameState === 'menu') {
gameState = 'playing';
gameStarted = true;
// Hide menu elements
titleTxt.alpha = 0;
startButtonTxt.alpha = 0;
bestScoreTxt.alpha = 0;
// Show game elements
bird.alpha = 1;
scoreTxt.alpha = 1;
instructionTxt.alpha = 1;
// Hide instruction after a brief moment
LK.setTimeout(function () {
instructionTxt.alpha = 0;
}, 1000);
} else if (gameState === 'playing') {
bird.flap();
}
};
game.update = function () {
if (gameState !== 'playing') return;
// Spawn pipes
pipeSpawnTimer++;
if (pipeSpawnTimer >= pipeSpawnInterval) {
spawnPipe();
pipeSpawnTimer = 0;
}
// Check collisions and scoring
checkCollisions();
// Clean up off-screen pipes
cleanupPipes();
};