/****
* Classes
****/
var Background = Container.expand(function () {
var self = Container.call(this);
// Create two background sprites for seamless looping
var bg1 = self.attachAsset('background', {
anchorX: 0,
anchorY: 0
});
var bg2 = self.attachAsset('background', {
anchorX: 0,
anchorY: 0
});
// Position second background above the first
bg2.y = -2732;
self.speed = 2;
self._update_migrated = function () {
// Move both backgrounds down
bg1.y += self.speed;
bg2.y += self.speed;
// Reset position when background moves off screen
if (bg1.y >= 2732) {
bg1.y = bg2.y - 2732;
}
if (bg2.y >= 2732) {
bg2.y = bg1.y - 2732;
}
};
return self;
});
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 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;
};
});
var PowerUp = Container.expand(function (type) {
var self = Container.call(this);
self.type = type;
self.multiplier = 1;
self.isLife = false;
var assetId = 'multiplier2x';
if (type === '2x') {
assetId = 'multiplier2x';
self.multiplier = 2;
} else if (type === '10x') {
assetId = 'multiplier10x';
self.multiplier = 10;
} else if (type === '100x') {
assetId = 'multiplier100x';
self.multiplier = 100;
} else if (type === 'life') {
assetId = 'lifeBonus';
self.isLife = true;
}
var graphics = self.attachAsset(assetId, {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 3;
self.lastY = undefined;
self._update_migrated = function () {
if (self.lastY === undefined) {
self.lastY = self.y;
}
self.y += self.speed;
};
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
****/
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;
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;
LK.gui.bottom.addChild(tutorialText);
game.score = 0;
game.obstacleSpeed = 5;
game.obstacleSpeedIncrease = 0.005;
game.checkObstacleCollision = function (obstacles) {
for (var i = 0; i < obstacles.length; i++) {
obstacles[i]._move_migrated(game.obstacleSpeed);
if (bird.intersects(obstacles[i])) {
LK.setScore(game.score);
LK.getSound('gameOverJingle').play();
LK.showGameOver();
return; // çarpışma sonrası devam etmesin
}
}
};
game.setBackgroundColor(0xadd8e6);
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 livesText = new Text2('Lives: 0', {
size: 80,
fill: '#00ff00',
font: 'Impact'
});
livesText.anchor.set(0.5, 0);
livesText.x = 0;
livesText.y = 200;
LK.gui.top.addChild(livesText);
var websiteText = new Text2('vayabi.net', {
size: 60,
fill: '#ffffff',
font: 'Impact'
});
websiteText.anchor.set(0.5, 0);
websiteText.x = 0;
websiteText.y = 290;
LK.gui.top.addChild(websiteText);
var logoGraphics = LK.getAsset('logo', {
anchorX: 1,
anchorY: 0,
scaleX: 0.5,
scaleY: 0.5
});
logoGraphics.x = -10;
logoGraphics.y = 10;
LK.gui.topRight.addChild(logoGraphics);
var background = game.addChildAt(new Background(), 0);
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 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;
var powerUps = [];
var powerUpSpawnTime = 0;
var powerUpSpawnDelay = 180; // 3 seconds at 60fps
game.lives = 0;
game.down = function (x, y, obj) {
bird.flap();
game.isMouseDown = true;
};
game.up = function (x, y, obj) {
game.isMouseDown = false;
};
game.update = function () {
background._update_migrated();
bird._update_migrated();
if (game.score > 2) {
tutorialText.y += 5;
tutorialTextWhite.y += 5;
}
scoreText.setText(game.score);
scoreText2.setText(game.score);
livesText.setText('Lives: ' + game.lives);
game.obstacleSpeed += game.obstacleSpeedIncrease;
obstacleSpawnRandomness -= obstacleSpawnRandomnessDecrease;
if (obstacleSpawnRandomness < 20) {
obstacleSpawnRandomness = 20;
}
if (LK.ticks >= leftObstacleSpawnTime) {
var newObstacle = game.addChild(new Obstacle());
newObstacle.x = 0;
newObstacle.y = obstacleSpawnY;
leftObstacles.push(newObstacle);
leftObstacleSpawnTime += Math.floor(Math.random() * obstacleSpawnRandomness) + obstacleSpawnRandomness;
}
if (LK.ticks >= rightObstacleSpawnTime) {
var newObstacle = game.addChild(new Obstacle());
newObstacle.x = 2048;
newObstacle.y = obstacleSpawnY;
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--) {
if (leftObstacles[i].y > 3232) {
leftObstacles[i].destroy();
leftObstacles.splice(i, 1);
}
}
for (var i = rightObstacles.length - 1; i >= 0; i--) {
if (rightObstacles[i].y > 3232) {
rightObstacles[i].destroy();
rightObstacles.splice(i, 1);
}
}
game.checkObstacleCollision(leftObstacles);
game.checkObstacleCollision(rightObstacles);
// Power-up spawning
if (LK.ticks >= powerUpSpawnTime) {
var rand = Math.random();
var powerUpType = '';
var spawnChance = 0;
if (rand < 0.0001) {
powerUpType = 'life';
spawnChance = 0.0001;
} else if (rand < 0.001) {
powerUpType = '100x';
spawnChance = 0.001;
} else if (rand < 0.1) {
powerUpType = '10x';
spawnChance = 0.1;
} else if (rand < 0.5) {
powerUpType = '2x';
spawnChance = 0.5;
}
if (powerUpType !== '') {
var newPowerUp = new PowerUp(powerUpType);
newPowerUp.x = Math.random() * (2048 - 240) + 120;
newPowerUp.y = -100;
game.addChild(newPowerUp);
powerUps.push(newPowerUp);
}
powerUpSpawnTime = LK.ticks + powerUpSpawnDelay;
}
// Update power-ups
for (var i = powerUps.length - 1; i >= 0; i--) {
var powerUp = powerUps[i];
powerUp._update_migrated();
// Check collection
if (bird.intersects(powerUp)) {
if (powerUp.isLife) {
game.lives++;
} else {
game.score = Math.floor(game.score * powerUp.multiplier);
LK.setScore(game.score);
}
powerUp.destroy();
powerUps.splice(i, 1);
continue;
}
// Remove if off screen
if (powerUp.y > 2832) {
powerUp.destroy();
powerUps.splice(i, 1);
}
}
// Game over with lives system
if (bird.y < 0 || bird.y > 2732) {
if (game.lives > 0) {
game.lives--;
bird.y = Math.max(100, Math.min(2632, bird.y));
bird.ySpeed = 0;
} else {
LK.setScore(game.score);
LK.getSound('gameOverJingle').play();
LK.showGameOver();
}
}
}; /****
* Classes
****/
var Background = Container.expand(function () {
var self = Container.call(this);
// Create two background sprites for seamless looping
var bg1 = self.attachAsset('background', {
anchorX: 0,
anchorY: 0
});
var bg2 = self.attachAsset('background', {
anchorX: 0,
anchorY: 0
});
// Position second background above the first
bg2.y = -2732;
self.speed = 2;
self._update_migrated = function () {
// Move both backgrounds down
bg1.y += self.speed;
bg2.y += self.speed;
// Reset position when background moves off screen
if (bg1.y >= 2732) {
bg1.y = bg2.y - 2732;
}
if (bg2.y >= 2732) {
bg2.y = bg1.y - 2732;
}
};
return self;
});
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 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;
};
});
var PowerUp = Container.expand(function (type) {
var self = Container.call(this);
self.type = type;
self.multiplier = 1;
self.isLife = false;
var assetId = 'multiplier2x';
if (type === '2x') {
assetId = 'multiplier2x';
self.multiplier = 2;
} else if (type === '10x') {
assetId = 'multiplier10x';
self.multiplier = 10;
} else if (type === '100x') {
assetId = 'multiplier100x';
self.multiplier = 100;
} else if (type === 'life') {
assetId = 'lifeBonus';
self.isLife = true;
}
var graphics = self.attachAsset(assetId, {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 3;
self.lastY = undefined;
self._update_migrated = function () {
if (self.lastY === undefined) {
self.lastY = self.y;
}
self.y += self.speed;
};
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
****/
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;
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;
LK.gui.bottom.addChild(tutorialText);
game.score = 0;
game.obstacleSpeed = 5;
game.obstacleSpeedIncrease = 0.005;
game.checkObstacleCollision = function (obstacles) {
for (var i = 0; i < obstacles.length; i++) {
obstacles[i]._move_migrated(game.obstacleSpeed);
if (bird.intersects(obstacles[i])) {
LK.setScore(game.score);
LK.getSound('gameOverJingle').play();
LK.showGameOver();
return; // çarpışma sonrası devam etmesin
}
}
};
game.setBackgroundColor(0xadd8e6);
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 livesText = new Text2('Lives: 0', {
size: 80,
fill: '#00ff00',
font: 'Impact'
});
livesText.anchor.set(0.5, 0);
livesText.x = 0;
livesText.y = 200;
LK.gui.top.addChild(livesText);
var websiteText = new Text2('vayabi.net', {
size: 60,
fill: '#ffffff',
font: 'Impact'
});
websiteText.anchor.set(0.5, 0);
websiteText.x = 0;
websiteText.y = 290;
LK.gui.top.addChild(websiteText);
var logoGraphics = LK.getAsset('logo', {
anchorX: 1,
anchorY: 0,
scaleX: 0.5,
scaleY: 0.5
});
logoGraphics.x = -10;
logoGraphics.y = 10;
LK.gui.topRight.addChild(logoGraphics);
var background = game.addChildAt(new Background(), 0);
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 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;
var powerUps = [];
var powerUpSpawnTime = 0;
var powerUpSpawnDelay = 180; // 3 seconds at 60fps
game.lives = 0;
game.down = function (x, y, obj) {
bird.flap();
game.isMouseDown = true;
};
game.up = function (x, y, obj) {
game.isMouseDown = false;
};
game.update = function () {
background._update_migrated();
bird._update_migrated();
if (game.score > 2) {
tutorialText.y += 5;
tutorialTextWhite.y += 5;
}
scoreText.setText(game.score);
scoreText2.setText(game.score);
livesText.setText('Lives: ' + game.lives);
game.obstacleSpeed += game.obstacleSpeedIncrease;
obstacleSpawnRandomness -= obstacleSpawnRandomnessDecrease;
if (obstacleSpawnRandomness < 20) {
obstacleSpawnRandomness = 20;
}
if (LK.ticks >= leftObstacleSpawnTime) {
var newObstacle = game.addChild(new Obstacle());
newObstacle.x = 0;
newObstacle.y = obstacleSpawnY;
leftObstacles.push(newObstacle);
leftObstacleSpawnTime += Math.floor(Math.random() * obstacleSpawnRandomness) + obstacleSpawnRandomness;
}
if (LK.ticks >= rightObstacleSpawnTime) {
var newObstacle = game.addChild(new Obstacle());
newObstacle.x = 2048;
newObstacle.y = obstacleSpawnY;
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--) {
if (leftObstacles[i].y > 3232) {
leftObstacles[i].destroy();
leftObstacles.splice(i, 1);
}
}
for (var i = rightObstacles.length - 1; i >= 0; i--) {
if (rightObstacles[i].y > 3232) {
rightObstacles[i].destroy();
rightObstacles.splice(i, 1);
}
}
game.checkObstacleCollision(leftObstacles);
game.checkObstacleCollision(rightObstacles);
// Power-up spawning
if (LK.ticks >= powerUpSpawnTime) {
var rand = Math.random();
var powerUpType = '';
var spawnChance = 0;
if (rand < 0.0001) {
powerUpType = 'life';
spawnChance = 0.0001;
} else if (rand < 0.001) {
powerUpType = '100x';
spawnChance = 0.001;
} else if (rand < 0.1) {
powerUpType = '10x';
spawnChance = 0.1;
} else if (rand < 0.5) {
powerUpType = '2x';
spawnChance = 0.5;
}
if (powerUpType !== '') {
var newPowerUp = new PowerUp(powerUpType);
newPowerUp.x = Math.random() * (2048 - 240) + 120;
newPowerUp.y = -100;
game.addChild(newPowerUp);
powerUps.push(newPowerUp);
}
powerUpSpawnTime = LK.ticks + powerUpSpawnDelay;
}
// Update power-ups
for (var i = powerUps.length - 1; i >= 0; i--) {
var powerUp = powerUps[i];
powerUp._update_migrated();
// Check collection
if (bird.intersects(powerUp)) {
if (powerUp.isLife) {
game.lives++;
} else {
game.score = Math.floor(game.score * powerUp.multiplier);
LK.setScore(game.score);
}
powerUp.destroy();
powerUps.splice(i, 1);
continue;
}
// Remove if off screen
if (powerUp.y > 2832) {
powerUp.destroy();
powerUps.splice(i, 1);
}
}
// Game over with lives system
if (bird.y < 0 || bird.y > 2732) {
if (game.lives > 0) {
game.lives--;
bird.y = Math.max(100, Math.min(2632, bird.y));
bird.ySpeed = 0;
} else {
LK.setScore(game.score);
LK.getSound('gameOverJingle').play();
LK.showGameOver();
}
}
};