User prompt
çizgileri kaldır sadece objenin tehlikeli olduğunu belli et ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
bir tehdit olduğunu belli edicek etrafına kırmızı çizgiler ekle ve dönmesin biraz daha uzunlamasına dursun ve paralar onunla aynı hizada olmasın
User prompt
aralarda rastgele engeller çıksın
User prompt
coin ekle
Remix started
Copy FlipFlap Bird
/****
* Classes
****/
var Bird = Container.expand(function () {
var self = Container.call(this);
var birdGraphics = self.attachAsset('bird', {
anchorX: 0.5,
anchorY: 0.5
});
self.xSpeed = 10.9375;
self.ySpeed = -20;
self.gravity = 1;
self.lift = -15;
self.flap = function () {
self.ySpeed = self.lift * 1.5;
LK.getSound('flap').play();
};
self._update_migrated = function () {
if (game.isMouseDown) {
self.ySpeed += self.gravity / 3;
} else {
self.ySpeed += self.gravity;
}
self.y += self.ySpeed;
self.x += self.xSpeed;
if (self.y <= 0 || self.y >= 2732) {
self.speed = -self.speed;
}
var targetRotation = Math.atan2(self.ySpeed, self.xSpeed * self.scale.x) / 2;
birdGraphics.rotation += (targetRotation - birdGraphics.rotation) / 10;
};
self.flip = function () {
self.scale.x *= -1;
};
});
var Coin = Container.expand(function () {
var self = Container.call(this);
var coinGraphics = self.attachAsset('coin', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 5;
self.collected = false;
self._move_migrated = function (speed) {
self.y += speed;
// Animate coin rotation
coinGraphics.rotation += 0.1;
};
return self;
});
var Obstacle = Container.expand(function () {
var self = Container.call(this);
var obstacleShadow = self.attachAsset('obstacleShadow', {
anchorX: 0.5,
anchorY: 0.5
});
obstacleShadow.rotation = Math.PI / 4;
var obstacleShadow2 = self.attachAsset('obstacleShadow2', {
anchorX: 0.5,
anchorY: 0.5
});
obstacleShadow2.rotation = Math.PI / 4;
obstacleShadow2.y = -7;
var obstacleGraphics = self.attachAsset('obstacle', {
anchorX: 0.5,
anchorY: 0.5
});
obstacleGraphics.rotation = Math.PI / 4;
self.speed = 5;
self._move_migrated = function (speed) {
self.y += speed;
};
return self;
});
var RandomObstacle = Container.expand(function () {
var self = Container.call(this);
var randomObstacleGraphics = self.attachAsset('randomObstacle', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 5;
self._move_migrated = function (speed) {
self.y += speed;
// Animate obstacle rotation
randomObstacleGraphics.rotation += 0.05;
};
return self;
});
var Wall = Container.expand(function () {
var self = Container.call(this);
var wallGraphics = self.attachAsset('wall', {
anchorX: 0.5,
anchorY: 0.5
});
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x000000
});
/****
* Game Code
****/
// Language and Start Screen UI
var languageOptions = [{
code: 'en',
label: 'English'
}, {
code: 'tr',
label: 'Türkçe'
}];
var selectedLanguage = null;
var gameStarted = false;
// UI containers
var startScreenContainer = new Container();
var langTitle = new Text2('Select Language / Dil Seçin', {
size: 120,
fill: '#3a84f7',
font: 'Impact',
align: 'center'
});
langTitle.anchor.set(0.5, 0.5);
langTitle.x = 1024;
langTitle.y = 900;
startScreenContainer.addChild(langTitle);
var langButtons = [];
for (var i = 0; i < languageOptions.length; i++) {
var btn = new Text2(languageOptions[i].label, {
size: 120,
fill: '#ffffff',
font: 'Impact',
align: 'center',
dropShadow: true,
dropShadowColor: '#222a9a',
dropShadowBlur: 5,
dropShadowDistance: 7,
dropShadowAngle: 0
});
btn.anchor.set(0.5, 0.5);
btn.x = 1024 + (i === 0 ? -250 : 250);
btn.y = 1100;
btn.interactive = true;
btn.buttonMode = true;
// Closure for event
(function (idx, btnObj) {
btnObj.down = function (x, y, obj) {
selectedLanguage = languageOptions[idx].code;
// Highlight selected
for (var j = 0; j < langButtons.length; j++) {
langButtons[j].setStyle({
fill: j === idx ? '#3a84f7' : '#ffffff'
});
}
// Show start button if not already
if (!startBtn.visible) startBtn.visible = true;
};
})(i, btn);
langButtons.push(btn);
startScreenContainer.addChild(btn);
}
// Start button
var startBtn = new Text2('Start / Başla', {
size: 140,
fill: '#3a84f7',
font: 'Impact',
align: 'center',
dropShadow: true,
dropShadowColor: '#222a9a',
dropShadowBlur: 5,
dropShadowDistance: 7,
dropShadowAngle: 0
});
startBtn.anchor.set(0.5, 0.5);
startBtn.x = 1024;
startBtn.y = 1400;
startBtn.visible = false;
startBtn.interactive = true;
startBtn.buttonMode = true;
startBtn.down = function (x, y, obj) {
if (selectedLanguage) {
gameStarted = true;
startScreenContainer.visible = false;
// Optionally, set tutorial text based on language
if (selectedLanguage === 'tr') {
tutorialTextWhite.setText('Zıplamak için dokun\nSüzülmek için basılı tut');
tutorialText.setText('Zıplamak için dokun\nSüzülmek için basılı tut');
} else {
tutorialTextWhite.setText('Tap to Flap\nHold to Float');
tutorialText.setText('Tap to Flap\nHold to Float');
}
tutorialText.visible = true;
tutorialTextWhite.visible = true;
}
};
startScreenContainer.addChild(startBtn);
// Add to stage
game.addChild(startScreenContainer);
// Hide tutorial until game starts
var tutorialTextWhite = new Text2('Tap to Flap\nHold to Float', {
size: 150,
fill: '#ffffff',
font: 'Impact',
align: 'center'
});
tutorialTextWhite.anchor.set(.5, 1);
tutorialTextWhite.x = -4;
tutorialTextWhite.y = -62;
tutorialTextWhite.visible = false;
LK.gui.bottom.addChild(tutorialTextWhite);
var tutorialText = new Text2('Tap to Flap\nHold to Float', {
size: 150,
fill: '#3a84f7',
font: 'Impact',
dropShadow: true,
dropShadowColor: '#222a9a',
dropShadowBlur: 5,
dropShadowDistance: 7,
dropShadowAngle: 0,
align: 'center'
});
tutorialText.anchor.set(.5, 1);
tutorialText.y = -50;
tutorialText.visible = false;
LK.gui.bottom.addChild(tutorialText);
// Level definitions
var levels = [{
name: "Easy",
obstacleSpeed: 5,
obstacleSpeedIncrease: 0.005,
obstacleSpawnRandomness: 120,
obstacleSpawnRandomnessDecrease: 0.025 * (2 / 3),
backgroundColor: 0xadd8e6,
scoreToNext: 10
}, {
name: "Medium",
obstacleSpeed: 7,
obstacleSpeedIncrease: 0.008,
obstacleSpawnRandomness: 90,
obstacleSpawnRandomnessDecrease: 0.035,
backgroundColor: 0x87ceeb,
scoreToNext: 20
}, {
name: "Hard",
obstacleSpeed: 10,
obstacleSpeedIncrease: 0.012,
obstacleSpawnRandomness: 60,
obstacleSpawnRandomnessDecrease: 0.05,
backgroundColor: 0x4682b4,
scoreToNext: 9999 // Last level, no next
}];
var currentLevelIndex = 0;
var currentLevel = levels[currentLevelIndex];
function applyLevel(level) {
game.obstacleSpeed = level.obstacleSpeed;
game.obstacleSpeedIncrease = level.obstacleSpeedIncrease;
obstacleSpawnRandomness = level.obstacleSpawnRandomness;
obstacleSpawnRandomnessDecrease = level.obstacleSpawnRandomnessDecrease;
game.setBackgroundColor(level.backgroundColor);
}
game.score = 0;
applyLevel(currentLevel);
game.checkObstacleCollision = function (obstacles) {
for (var i = 0; i < obstacles.length; i++) {
obstacles[i]._move_migrated();
var dist = Math.sqrt(Math.pow(bird.x - obstacles[i].x, 2) + Math.pow(bird.y - obstacles[i].y, 2));
if (dist < 280) {
LK.setScore(game.score);
LK.getSound('gameOverJingle').play();
LK.showGameOver();
}
}
};
game.setBackgroundColor(currentLevel.backgroundColor);
var scoreText = new Text2('0', {
size: 150,
fill: '#3a84f7',
font: 'Impact',
dropShadow: true,
dropShadowColor: '#222a9a',
dropShadowBlur: 5,
dropShadowDistance: 7,
dropShadowAngle: 0
});
scoreText.anchor.set(.5, 0);
LK.gui.top.addChild(scoreText);
var scoreText2 = new Text2('0', {
size: 150,
fill: '#ffffff',
font: 'Impact'
});
scoreText2.anchor.set(.5, 0);
scoreText2.x = -4;
scoreText2.y = -5;
LK.gui.top.addChild(scoreText2);
LK.gui.top.addChild(scoreText);
var bird = game.addChild(new Bird());
var leftWall = game.addChild(new Wall());
leftWall.x = 0;
leftWall.y = 1366;
var rightWall = game.addChild(new Wall());
rightWall.x = 2048;
rightWall.y = 1366;
var leftObstacles = [],
rightObstacles = [];
var coins = [];
var coinSpawnTime = Math.floor(Math.random() * 180) + 120;
var randomObstacles = [];
var randomObstacleSpawnTime = Math.floor(Math.random() * 200) + 150;
var obstacleSpawnRandomness = 120;
var obstacleSpawnRandomnessDecrease = 0.025 * (2 / 3);
var obstacleSpawnY = -500;
var leftObstacleSpawnTime = Math.floor(Math.random() * obstacleSpawnRandomness) + obstacleSpawnRandomness;
var rightObstacleSpawnTime = Math.floor(Math.random() * obstacleSpawnRandomness) + obstacleSpawnRandomness;
bird.x = 1024;
bird.y = 1366;
game.isMouseDown = false;
game.down = function (x, y, obj) {
if (!gameStarted) return;
bird.flap();
game.isMouseDown = true;
};
game.up = function (x, y, obj) {
if (!gameStarted) return;
game.isMouseDown = false;
};
game.update = function () {
if (!gameStarted) {
// Optionally animate start screen, e.g. blink start button if language selected
if (startBtn.visible && LK.ticks % 60 < 30) {
startBtn.setStyle({
fill: '#ffffff'
});
} else if (startBtn.visible) {
startBtn.setStyle({
fill: '#3a84f7'
});
}
return;
}
bird._update_migrated();
if (game.score > 2) {
tutorialText.y += 5;
tutorialTextWhite.y += 5;
}
scoreText.setText(game.score);
scoreText2.setText(game.score);
// Level progression
if (game.score >= currentLevel.scoreToNext && currentLevelIndex < levels.length - 1) {
currentLevelIndex++;
currentLevel = levels[currentLevelIndex];
applyLevel(currentLevel);
// Optional: show a quick level up text
var levelUpText = new Text2('Level ' + (currentLevelIndex + 1) + ': ' + currentLevel.name, {
size: 120,
fill: '#ffffff',
font: 'Impact',
dropShadow: true,
dropShadowColor: '#222a9a',
dropShadowBlur: 5,
dropShadowDistance: 7,
dropShadowAngle: 0,
align: 'center'
});
levelUpText.anchor.set(.5, .5);
levelUpText.x = 1024;
levelUpText.y = 1366;
game.addChild(levelUpText);
LK.setTimeout(function () {
levelUpText.destroy();
}, 1200);
}
game.obstacleSpeed += game.obstacleSpeedIncrease;
obstacleSpawnRandomness -= obstacleSpawnRandomnessDecrease;
if (obstacleSpawnRandomness < 20) {
obstacleSpawnRandomness = 20;
}
if (LK.ticks >= leftObstacleSpawnTime) {
var newObstacle = game.addChildAt(new Obstacle(), 0);
newObstacle.x = 0;
newObstacle.y = obstacleSpawnY;
leftObstacles.push(newObstacle);
leftObstacleSpawnTime += Math.floor(Math.random() * obstacleSpawnRandomness) + obstacleSpawnRandomness;
}
if (LK.ticks >= rightObstacleSpawnTime) {
var newObstacle = game.addChildAt(new Obstacle(), 0);
newObstacle.x = 2048;
newObstacle.y = -newObstacle.height;
rightObstacles.push(newObstacle);
rightObstacleSpawnTime += Math.floor(Math.random() * obstacleSpawnRandomness) + obstacleSpawnRandomness;
}
if (bird.intersects(leftWall) && bird.xSpeed < 0 || bird.intersects(rightWall) && bird.xSpeed > 0) {
bird.xSpeed = -bird.xSpeed;
bird.flip();
game.score++;
LK.setScore(game.score);
LK.getSound('bounce').play();
}
for (var i = leftObstacles.length - 1; i >= 0; i--) {
leftObstacles[i]._move_migrated(game.obstacleSpeed);
if (leftObstacles[i].y > 3232) {
leftObstacles[i].destroy();
leftObstacles.splice(i, 1);
}
}
for (var i = rightObstacles.length - 1; i >= 0; i--) {
rightObstacles[i]._move_migrated(game.obstacleSpeed);
if (rightObstacles[i].y > 3232) {
rightObstacles[i].destroy();
rightObstacles.splice(i, 1);
}
}
// Spawn coins randomly
if (LK.ticks >= coinSpawnTime) {
var newCoin = game.addChildAt(new Coin(), 0);
newCoin.x = Math.random() * 1500 + 274; // Random x between walls
newCoin.y = -100;
coins.push(newCoin);
coinSpawnTime = LK.ticks + Math.floor(Math.random() * 240) + 180;
}
// Spawn random obstacles
if (LK.ticks >= randomObstacleSpawnTime) {
var newRandomObstacle = game.addChildAt(new RandomObstacle(), 0);
newRandomObstacle.x = Math.random() * 1400 + 324; // Random x between walls with margin
newRandomObstacle.y = -150;
randomObstacles.push(newRandomObstacle);
randomObstacleSpawnTime = LK.ticks + Math.floor(Math.random() * 300) + 200;
}
// Update coins and check collection
for (var i = coins.length - 1; i >= 0; i--) {
coins[i]._move_migrated(game.obstacleSpeed * 0.8);
// Check if bird collected coin
if (!coins[i].collected && bird.intersects(coins[i])) {
coins[i].collected = true;
game.score += 2; // Coins give 2 points
LK.setScore(game.score);
LK.getSound('coinCollect').play();
coins[i].destroy();
coins.splice(i, 1);
continue;
}
// Remove coins that went off screen
if (coins[i].y > 3232) {
coins[i].destroy();
coins.splice(i, 1);
}
}
// Update random obstacles and check collision
for (var i = randomObstacles.length - 1; i >= 0; i--) {
randomObstacles[i]._move_migrated(game.obstacleSpeed);
// Check collision with bird
if (bird.intersects(randomObstacles[i])) {
LK.setScore(game.score);
LK.getSound('gameOverJingle').play();
LK.showGameOver();
return;
}
// Remove random obstacles that went off screen
if (randomObstacles[i].y > 3232) {
randomObstacles[i].destroy();
randomObstacles.splice(i, 1);
}
}
game.checkObstacleCollision(leftObstacles);
game.checkObstacleCollision(rightObstacles);
if (bird.y < 0 || bird.y > 2732) {
LK.setScore(game.score);
LK.getSound('gameOverJingle').play();
LK.showGameOver();
}
}; ===================================================================
--- original.js
+++ change.js
@@ -69,9 +69,24 @@
self.speed = 5;
self._move_migrated = function (speed) {
self.y += speed;
};
+ return self;
});
+var RandomObstacle = Container.expand(function () {
+ var self = Container.call(this);
+ var randomObstacleGraphics = self.attachAsset('randomObstacle', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.speed = 5;
+ self._move_migrated = function (speed) {
+ self.y += speed;
+ // Animate obstacle rotation
+ randomObstacleGraphics.rotation += 0.05;
+ };
+ return self;
+});
var Wall = Container.expand(function () {
var self = Container.call(this);
var wallGraphics = self.attachAsset('wall', {
anchorX: 0.5,
@@ -291,8 +306,10 @@
var leftObstacles = [],
rightObstacles = [];
var coins = [];
var coinSpawnTime = Math.floor(Math.random() * 180) + 120;
+var randomObstacles = [];
+var randomObstacleSpawnTime = Math.floor(Math.random() * 200) + 150;
var obstacleSpawnRandomness = 120;
var obstacleSpawnRandomnessDecrease = 0.025 * (2 / 3);
var obstacleSpawnY = -500;
var leftObstacleSpawnTime = Math.floor(Math.random() * obstacleSpawnRandomness) + obstacleSpawnRandomness;
@@ -402,8 +419,16 @@
newCoin.y = -100;
coins.push(newCoin);
coinSpawnTime = LK.ticks + Math.floor(Math.random() * 240) + 180;
}
+ // Spawn random obstacles
+ if (LK.ticks >= randomObstacleSpawnTime) {
+ var newRandomObstacle = game.addChildAt(new RandomObstacle(), 0);
+ newRandomObstacle.x = Math.random() * 1400 + 324; // Random x between walls with margin
+ newRandomObstacle.y = -150;
+ randomObstacles.push(newRandomObstacle);
+ randomObstacleSpawnTime = LK.ticks + Math.floor(Math.random() * 300) + 200;
+ }
// Update coins and check collection
for (var i = coins.length - 1; i >= 0; i--) {
coins[i]._move_migrated(game.obstacleSpeed * 0.8);
// Check if bird collected coin
@@ -421,8 +446,24 @@
coins[i].destroy();
coins.splice(i, 1);
}
}
+ // Update random obstacles and check collision
+ for (var i = randomObstacles.length - 1; i >= 0; i--) {
+ randomObstacles[i]._move_migrated(game.obstacleSpeed);
+ // Check collision with bird
+ if (bird.intersects(randomObstacles[i])) {
+ LK.setScore(game.score);
+ LK.getSound('gameOverJingle').play();
+ LK.showGameOver();
+ return;
+ }
+ // Remove random obstacles that went off screen
+ if (randomObstacles[i].y > 3232) {
+ randomObstacles[i].destroy();
+ randomObstacles.splice(i, 1);
+ }
+ }
game.checkObstacleCollision(leftObstacles);
game.checkObstacleCollision(rightObstacles);
if (bird.y < 0 || bird.y > 2732) {
LK.setScore(game.score);