User prompt
Add a loadin screen
User prompt
Ler the bird fly in the direction determined by the trajectory
User prompt
When a level completed level complete music one time playing
User prompt
When in the level level sound is started
User prompt
When next level started level complete music is stop
User prompt
When on the menu, menu music is start
User prompt
When started the game menü music is started, when tapping the level selector music is not start or not stop and when tapping the play button menü music is stop
User prompt
Level complete music is one time
User prompt
When a level completed start a level complete music
User prompt
When started this game menü music is start not when Level selector
User prompt
In menu, menu music is start, in levels menu music is stop
User prompt
Add angry birds menu music on menu
User prompt
Please fix the bug: 'Uncaught TypeError: Cannot read properties of undefined (reading 'toGlobal')' in or related to this line: 'var guiPos = LK.gui.topRight.toLocal(obj.parent.toGlobal(obj.position));' Line Number: 889
User prompt
Add back to menu bittin on levels
User prompt
Add angry birds logo on menü
User prompt
Add a menu background
User prompt
Add a level selecter
User prompt
Add a menü
User prompt
Add a angry birds menü music
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ var Bird = Container.expand(function () { var self = Container.call(this); var birdGraphics = self.attachAsset('bird', { anchorX: 0.5, anchorY: 0.5 }); self.velocityX = 0; self.velocityY = 0; self.launched = false; self.gravity = 0.3; self.bounce = 0.3; self.update = function () { if (self.launched) { self.velocityY += self.gravity; self.x += self.velocityX; self.y += self.velocityY; // Ground collision if (self.y > 2600) { self.y = 2600; self.velocityY *= -self.bounce; self.velocityX *= 0.8; if (Math.abs(self.velocityY) < 2) { self.velocityY = 0; } } // Side boundaries if (self.x < 0 || self.x > 2048) { self.velocityX *= -self.bounce; } } }; self.launch = function (velX, velY) { self.launched = true; self.velocityX = velX; self.velocityY = velY; LK.getSound('launch').play(); }; return self; }); var Block = Container.expand(function (type) { var self = Container.call(this); var assetName = type + 'Block'; var blockGraphics = self.attachAsset(assetName, { anchorX: 0.5, anchorY: 0.5 }); self.type = type; self.health = type === 'wood' ? 50 : type === 'stone' ? 100 : 30; // ice is weakest self.destroyed = false; self.takeDamage = function (damage) { self.health -= damage; if (self.health <= 0 && !self.destroyed) { self.destroyed = true; LK.effects.flashObject(self, 0xff0000, 200); LK.getSound('hit').play(); LK.setScore(LK.getScore() + 10); scoreText.setText(LK.getScore()); } }; return self; }); var BlueBird = Container.expand(function () { var self = Container.call(this); var birdGraphics = self.attachAsset('blueBird', { anchorX: 0.5, anchorY: 0.5 }); self.velocityX = 0; self.velocityY = 0; self.launched = false; self.gravity = 0.3; self.bounce = 0.3; self.update = function () { if (self.launched) { self.velocityY += self.gravity; self.x += self.velocityX; self.y += self.velocityY; // Ground collision if (self.y > 2600) { self.y = 2600; self.velocityY *= -self.bounce; self.velocityX *= 0.8; if (Math.abs(self.velocityY) < 2) { self.velocityY = 0; } } // Side boundaries if (self.x < 0 || self.x > 2048) { self.velocityX *= -self.bounce; } } }; self.launch = function (velX, velY) { self.launched = true; self.velocityX = velX; self.velocityY = velY; LK.getSound('launch').play(); }; self.hasSplit = false; // Track if bird has already split self.down = function (x, y, obj) { if (self.launched && !self.hasSplit) { self.hasSplit = true; // Prevent multiple splits // Create two additional blue birds - one above and one below var blueBirdAbove = game.addChild(new BlueBird()); blueBirdAbove.x = self.x; blueBirdAbove.y = self.y - 50; blueBirdAbove.launched = true; blueBirdAbove.velocityX = self.velocityX * 0.8; blueBirdAbove.velocityY = self.velocityY - 3; blueBirdAbove.hasSplit = true; // Prevent these copies from splitting birds.push(blueBirdAbove); var blueBirdBelow = game.addChild(new BlueBird()); blueBirdBelow.x = self.x; blueBirdBelow.y = self.y + 50; blueBirdBelow.launched = true; blueBirdBelow.velocityX = self.velocityX * 0.8; blueBirdBelow.velocityY = self.velocityY + 3; blueBirdBelow.hasSplit = true; // Prevent these copies from splitting birds.push(blueBirdBelow); } }; return self; }); var KingPig = Container.expand(function () { var self = Container.call(this); var kingPigGraphics = self.attachAsset('kingPig', { anchorX: 0.5, anchorY: 0.5 }); self.health = 300; self.destroyed = false; self.takeDamage = function (damage) { self.health -= damage; if (self.health <= 0 && !self.destroyed) { self.destroyed = true; LK.effects.flashObject(self, 0xffff00, 500); LK.getSound('destroy').play(); LK.setScore(LK.getScore() + 500); scoreText.setText(LK.getScore()); } }; return self; }); var Pig = Container.expand(function () { var self = Container.call(this); var pigGraphics = self.attachAsset('pig', { anchorX: 0.5, anchorY: 0.5 }); self.health = 100; self.destroyed = false; self.takeDamage = function (damage) { self.health -= damage; if (self.health <= 0 && !self.destroyed) { self.destroyed = true; LK.effects.flashObject(self, 0xffff00, 300); LK.getSound('destroy').play(); LK.setScore(LK.getScore() + 100); scoreText.setText(LK.getScore()); } }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x87CEEB // Sky blue background }); /**** * Game Code ****/ // Game variables var birds = []; var pigs = []; var blocks = []; var currentBird = null; var slingshot = null; var isDragging = false; var trajectoryDots = []; var slingshotX = 200; var slingshotY = 2400; var birdsRemaining = 8; var level = 1; // UI Elements var scoreText = new Text2('Score: 0', { size: 60, fill: 0xFFFFFF }); scoreText.anchor.set(0.5, 0); LK.gui.top.addChild(scoreText); var birdsText = new Text2('Birds: 8', { size: 50, fill: 0xFFFFFF }); birdsText.anchor.set(0, 0); birdsText.x = 100; birdsText.y = 100; LK.gui.topLeft.addChild(birdsText); var levelText = new Text2('Level: 1', { size: 50, fill: 0xFFFFFF }); levelText.anchor.set(1, 0); levelText.x = -100; levelText.y = 100; LK.gui.topRight.addChild(levelText); // Create ground var ground = game.addChild(LK.getAsset('ground', { anchorX: 0, anchorY: 1, x: 0, y: 2732 })); // Create clouds for background atmosphere var cloud1 = game.addChild(LK.getAsset('cloud', { anchorX: 0.5, anchorY: 0.5, x: 300, y: 400, alpha: 0.8 })); var cloud2 = game.addChild(LK.getAsset('cloud', { anchorX: 0.5, anchorY: 0.5, x: 800, y: 300, alpha: 0.7 })); var cloud3 = game.addChild(LK.getAsset('cloud', { anchorX: 0.5, anchorY: 0.5, x: 1400, y: 450, alpha: 0.6 })); var cloud4 = game.addChild(LK.getAsset('cloud', { anchorX: 0.5, anchorY: 0.5, x: 1800, y: 350, alpha: 0.8 })); // Create slingshot slingshot = game.addChild(LK.getAsset('slingshot', { anchorX: 0.5, anchorY: 1, x: slingshotX, y: slingshotY })); // Create level structures function createLevel1() { // Create pigs var pig1 = game.addChild(new Pig()); pig1.x = 1400; pig1.y = 2300; pigs.push(pig1); var pig2 = game.addChild(new Pig()); pig2.x = 1600; pig2.y = 2200; pigs.push(pig2); // Additional pigs var pig3 = game.addChild(new Pig()); pig3.x = 1250; pig3.y = 2300; pigs.push(pig3); var pig4 = game.addChild(new Pig()); pig4.x = 1400; pig4.y = 2100; pigs.push(pig4); var pig5 = game.addChild(new Pig()); pig5.x = 1750; pig5.y = 2200; pigs.push(pig5); // Create structure var block1 = game.addChild(new Block('wood')); block1.x = 1300; block1.y = 2350; blocks.push(block1); var block2 = game.addChild(new Block('wood')); block2.x = 1500; block2.y = 2350; blocks.push(block2); var block3 = game.addChild(new Block('stone')); block3.x = 1400; block3.y = 2250; blocks.push(block3); var block4 = game.addChild(new Block('ice')); block4.x = 1600; block4.y = 2300; blocks.push(block4); // Additional foundation blocks var block5 = game.addChild(new Block('wood')); block5.x = 1200; block5.y = 2350; blocks.push(block5); var block6 = game.addChild(new Block('wood')); block6.x = 1700; block6.y = 2350; blocks.push(block6); // Upper level blocks var block7 = game.addChild(new Block('ice')); block7.x = 1350; block7.y = 2200; blocks.push(block7); var block8 = game.addChild(new Block('ice')); block8.x = 1450; block8.y = 2200; blocks.push(block8); // Top blocks var block9 = game.addChild(new Block('stone')); block9.x = 1400; block9.y = 2150; blocks.push(block9); // Side tower blocks var block10 = game.addChild(new Block('wood')); block10.x = 1750; block10.y = 2300; blocks.push(block10); var block11 = game.addChild(new Block('ice')); block11.x = 1750; block11.y = 2250; blocks.push(block11); } // Initialize first bird function createNewBird() { if (birdsRemaining > 0) { if (level === 6 || level === 7 || level === 8 || level === 9) { currentBird = game.addChild(new BlueBird()); } else { currentBird = game.addChild(new Bird()); } currentBird.x = slingshotX; currentBird.y = slingshotY - 100; birds.push(currentBird); } } // Trajectory calculation function calculateTrajectory(startX, startY, velX, velY) { var dots = []; var x = startX; var y = startY; var vx = velX; var vy = velY; var gravity = 0.3; for (var i = 0; i < 50; i += 3) { dots.push({ x: x, y: y }); vx *= 0.99; vy += gravity; x += vx * 3; y += vy * 3; if (y > 2600 || x > 2048) break; } return dots; } // Clear trajectory dots function clearTrajectory() { for (var i = 0; i < trajectoryDots.length; i++) { trajectoryDots[i].destroy(); } trajectoryDots = []; } // Show trajectory dots function showTrajectory(dots) { clearTrajectory(); for (var i = 0; i < dots.length; i++) { var dot = game.addChild(LK.getAsset('trajectory', { anchorX: 0.5, anchorY: 0.5, x: dots[i].x, y: dots[i].y, alpha: 0.5 })); trajectoryDots.push(dot); } } // Check collisions function checkCollisions() { for (var i = 0; i < birds.length; i++) { var bird = birds[i]; if (!bird.launched) continue; // Check bird vs pigs for (var j = 0; j < pigs.length; j++) { var pig = pigs[j]; if (!pig.destroyed && bird.intersects(pig)) { var damage = Math.abs(bird.velocityX) + Math.abs(bird.velocityY); pig.takeDamage(damage * 2); } } // Check bird vs blocks for (var k = 0; k < blocks.length; k++) { var block = blocks[k]; if (!block.destroyed && bird.intersects(block)) { var damage = Math.abs(bird.velocityX) + Math.abs(bird.velocityY); block.takeDamage(damage); bird.velocityX *= 0.5; bird.velocityY *= 0.5; } } } } // Check win condition function checkWinCondition() { var allPigsDestroyed = true; for (var i = 0; i < pigs.length; i++) { if (!pigs[i].destroyed) { allPigsDestroyed = false; break; } } if (allPigsDestroyed) { if (level === 1) { // Progress to level 2 LK.setTimeout(function () { level = 2; levelText.setText('Level: ' + level); birdsRemaining = 8; birdsText.setText('Birds: ' + birdsRemaining); // Clear existing objects for (var i = 0; i < blocks.length; i++) { blocks[i].destroy(); } blocks = []; for (var j = 0; j < pigs.length; j++) { pigs[j].destroy(); } pigs = []; for (var k = 0; k < birds.length; k++) { birds[k].destroy(); } birds = []; currentBird = null; // Initialize level 2 initializeLevel(); createNewBird(); }, 1000); } else if (level === 2) { // Progress to level 3 LK.setTimeout(function () { level = 3; levelText.setText('Level: ' + level); birdsRemaining = 8; birdsText.setText('Birds: ' + birdsRemaining); // Clear existing objects for (var i = 0; i < blocks.length; i++) { blocks[i].destroy(); } blocks = []; for (var j = 0; j < pigs.length; j++) { pigs[j].destroy(); } pigs = []; for (var k = 0; k < birds.length; k++) { birds[k].destroy(); } birds = []; currentBird = null; // Initialize level 3 initializeLevel(); createNewBird(); }, 1000); } else if (level === 3) { // Progress to level 4 LK.setTimeout(function () { level = 4; levelText.setText('Level: ' + level); birdsRemaining = 8; birdsText.setText('Birds: ' + birdsRemaining); // Clear existing objects for (var i = 0; i < blocks.length; i++) { blocks[i].destroy(); } blocks = []; for (var j = 0; j < pigs.length; j++) { pigs[j].destroy(); } pigs = []; for (var k = 0; k < birds.length; k++) { birds[k].destroy(); } birds = []; currentBird = null; // Initialize level 4 initializeLevel(); createNewBird(); }, 1000); } else if (level === 4) { // Progress to level 5 LK.setTimeout(function () { level = 5; levelText.setText('Level: ' + level); birdsRemaining = 8; birdsText.setText('Birds: ' + birdsRemaining); // Clear existing objects for (var i = 0; i < blocks.length; i++) { blocks[i].destroy(); } blocks = []; for (var j = 0; j < pigs.length; j++) { pigs[j].destroy(); } pigs = []; for (var k = 0; k < birds.length; k++) { birds[k].destroy(); } birds = []; currentBird = null; // Initialize level 5 initializeLevel(); createNewBird(); }, 1000); } else if (level === 5) { // Progress to level 6 LK.setTimeout(function () { level = 6; levelText.setText('Level: ' + level); birdsRemaining = 8; birdsText.setText('Birds: ' + birdsRemaining); // Clear existing objects for (var i = 0; i < blocks.length; i++) { blocks[i].destroy(); } blocks = []; for (var j = 0; j < pigs.length; j++) { pigs[j].destroy(); } pigs = []; for (var k = 0; k < birds.length; k++) { birds[k].destroy(); } birds = []; currentBird = null; // Initialize level 6 initializeLevel(); createNewBird(); }, 1000); } else if (level === 6) { // Progress to level 7 LK.setTimeout(function () { level = 7; levelText.setText('Level: ' + level); birdsRemaining = 8; birdsText.setText('Birds: ' + birdsRemaining); // Clear existing objects for (var i = 0; i < blocks.length; i++) { blocks[i].destroy(); } blocks = []; for (var j = 0; j < pigs.length; j++) { pigs[j].destroy(); } pigs = []; for (var k = 0; k < birds.length; k++) { birds[k].destroy(); } birds = []; currentBird = null; // Initialize level 7 initializeLevel(); createNewBird(); }, 1000); } else if (level === 7) { // Progress to level 8 LK.setTimeout(function () { level = 8; levelText.setText('Level: ' + level); birdsRemaining = 8; birdsText.setText('Birds: ' + birdsRemaining); // Clear existing objects for (var i = 0; i < blocks.length; i++) { blocks[i].destroy(); } blocks = []; for (var j = 0; j < pigs.length; j++) { pigs[j].destroy(); } pigs = []; for (var k = 0; k < birds.length; k++) { birds[k].destroy(); } birds = []; currentBird = null; // Initialize level 8 initializeLevel(); createNewBird(); }, 1000); } else if (level === 8) { // Progress to level 9 LK.setTimeout(function () { level = 9; levelText.setText('Level: ' + level); birdsRemaining = 8; birdsText.setText('Birds: ' + birdsRemaining); // Clear existing objects for (var i = 0; i < blocks.length; i++) { blocks[i].destroy(); } blocks = []; for (var j = 0; j < pigs.length; j++) { pigs[j].destroy(); } pigs = []; for (var k = 0; k < birds.length; k++) { birds[k].destroy(); } birds = []; currentBird = null; // Initialize level 9 initializeLevel(); createNewBird(); }, 1000); } else if (level === 9) { // Progress to level 10 LK.setTimeout(function () { level = 10; levelText.setText('Level: ' + level); birdsRemaining = 8; birdsText.setText('Birds: ' + birdsRemaining); // Clear existing objects for (var i = 0; i < blocks.length; i++) { blocks[i].destroy(); } blocks = []; for (var j = 0; j < pigs.length; j++) { pigs[j].destroy(); } pigs = []; for (var k = 0; k < birds.length; k++) { birds[k].destroy(); } birds = []; currentBird = null; // Initialize level 10 initializeLevel(); createNewBird(); }, 1000); } else if (level === 10) { // Game completed LK.setTimeout(function () { LK.showYouWin(); }, 1000); } } else if (birdsRemaining <= 0 && (!currentBird || currentBird.launched && Math.abs(currentBird.velocityX) < 1 && Math.abs(currentBird.velocityY) < 1)) { LK.setTimeout(function () { LK.showGameOver(); }, 1000); } } // Game event handlers game.down = function (x, y, obj) { if (currentBird && !currentBird.launched) { isDragging = true; } else { // Check if there's a launched blue bird that can split for (var i = 0; i < birds.length; i++) { var bird = birds[i]; if (bird.launched && bird.attachAsset && bird.hasSplit !== undefined && !bird.hasSplit) { // This is a BlueBird that can split bird.hasSplit = true; // Create two additional blue birds - one above and one below var blueBirdAbove = game.addChild(new BlueBird()); blueBirdAbove.x = bird.x; blueBirdAbove.y = bird.y - 50; blueBirdAbove.launched = true; blueBirdAbove.velocityX = bird.velocityX * 0.8; blueBirdAbove.velocityY = bird.velocityY - 3; blueBirdAbove.hasSplit = true; birds.push(blueBirdAbove); var blueBirdBelow = game.addChild(new BlueBird()); blueBirdBelow.x = bird.x; blueBirdBelow.y = bird.y + 50; blueBirdBelow.launched = true; blueBirdBelow.velocityX = bird.velocityX * 0.8; blueBirdBelow.velocityY = bird.velocityY + 3; blueBirdBelow.hasSplit = true; birds.push(blueBirdBelow); break; // Only split one blue bird per touch } } } }; game.move = function (x, y, obj) { if (isDragging && currentBird && !currentBird.launched) { var maxDistance = 150; var deltaX = slingshotX - x; var deltaY = slingshotY - 100 - y; var distance = Math.sqrt(deltaX * deltaX + deltaY * deltaY); if (distance > maxDistance) { deltaX = deltaX / distance * maxDistance; deltaY = deltaY / distance * maxDistance; } currentBird.x = slingshotX - deltaX; currentBird.y = slingshotY - 100 - deltaY; // Show trajectory var velX = deltaX * 0.2; var velY = deltaY * 0.2; var trajectoryPoints = calculateTrajectory(currentBird.x, currentBird.y, velX, velY); showTrajectory(trajectoryPoints); } }; game.up = function (x, y, obj) { if (isDragging && currentBird && !currentBird.launched) { isDragging = false; clearTrajectory(); var deltaX = slingshotX - currentBird.x; var deltaY = slingshotY - 100 - currentBird.y; if (Math.abs(deltaX) > 5 || Math.abs(deltaY) > 5) { currentBird.launch(deltaX * 0.2, deltaY * 0.2); birdsRemaining--; birdsText.setText('Birds: ' + birdsRemaining); LK.setTimeout(function () { createNewBird(); }, 2000); } } }; // Main game update game.update = function () { checkCollisions(); checkWinCondition(); // Remove destroyed objects for (var i = blocks.length - 1; i >= 0; i--) { if (blocks[i].destroyed) { blocks[i].destroy(); blocks.splice(i, 1); } } for (var j = pigs.length - 1; j >= 0; j--) { if (pigs[j].destroyed) { pigs[j].alpha = Math.max(0, pigs[j].alpha - 0.02); if (pigs[j].alpha <= 0) { pigs[j].destroy(); pigs.splice(j, 1); } } } }; // Create level 2 structures function createLevel2() { // Create more pigs for level 2 var pig1 = game.addChild(new Pig()); pig1.x = 1300; pig1.y = 2300; pigs.push(pig1); var pig2 = game.addChild(new Pig()); pig2.x = 1500; pig2.y = 2300; pigs.push(pig2); var pig3 = game.addChild(new Pig()); pig3.x = 1700; pig3.y = 2300; pigs.push(pig3); var pig4 = game.addChild(new Pig()); pig4.x = 1400; pig4.y = 2150; pigs.push(pig4); var pig5 = game.addChild(new Pig()); pig5.x = 1600; pig5.y = 2150; pigs.push(pig5); var pig6 = game.addChild(new Pig()); pig6.x = 1500; pig6.y = 2000; pigs.push(pig6); // Create more complex structure for level 2 // Base foundation var block1 = game.addChild(new Block('stone')); block1.x = 1250; block1.y = 2350; blocks.push(block1); var block2 = game.addChild(new Block('stone')); block2.x = 1350; block2.y = 2350; blocks.push(block2); var block3 = game.addChild(new Block('stone')); block3.x = 1450; block3.y = 2350; blocks.push(block3); var block4 = game.addChild(new Block('stone')); block4.x = 1550; block4.y = 2350; blocks.push(block4); var block5 = game.addChild(new Block('stone')); block5.x = 1650; block5.y = 2350; blocks.push(block5); var block6 = game.addChild(new Block('stone')); block6.x = 1750; block6.y = 2350; blocks.push(block6); // Second level var block7 = game.addChild(new Block('wood')); block7.x = 1300; block7.y = 2250; blocks.push(block7); var block8 = game.addChild(new Block('wood')); block8.x = 1400; block8.y = 2250; blocks.push(block8); var block9 = game.addChild(new Block('wood')); block9.x = 1500; block9.y = 2250; blocks.push(block9); var block10 = game.addChild(new Block('wood')); block10.x = 1600; block10.y = 2250; blocks.push(block10); var block11 = game.addChild(new Block('wood')); block11.x = 1700; block11.y = 2250; blocks.push(block11); // Third level var block12 = game.addChild(new Block('ice')); block12.x = 1350; block12.y = 2150; blocks.push(block12); var block13 = game.addChild(new Block('ice')); block13.x = 1450; block13.y = 2150; blocks.push(block13); var block14 = game.addChild(new Block('ice')); block14.x = 1550; block14.y = 2150; blocks.push(block14); var block15 = game.addChild(new Block('ice')); block15.x = 1650; block15.y = 2150; blocks.push(block15); // Top level var block16 = game.addChild(new Block('wood')); block16.x = 1400; block16.y = 2050; blocks.push(block16); var block17 = game.addChild(new Block('wood')); block17.x = 1500; block17.y = 2050; blocks.push(block17); var block18 = game.addChild(new Block('wood')); block18.x = 1600; block18.y = 2050; blocks.push(block18); } // Create level 3 structures function createLevel3() { // Create simple structure with fewer pigs for easier level var pig1 = game.addChild(new Pig()); pig1.x = 1400; pig1.y = 2300; pigs.push(pig1); var pig2 = game.addChild(new Pig()); pig2.x = 1600; pig2.y = 2300; pigs.push(pig2); var pig3 = game.addChild(new Pig()); pig3.x = 1500; pig3.y = 2150; pigs.push(pig3); // Simple structure for level 3 // Base blocks var block1 = game.addChild(new Block('wood')); block1.x = 1350; block1.y = 2350; blocks.push(block1); var block2 = game.addChild(new Block('wood')); block2.x = 1450; block2.y = 2350; blocks.push(block2); var block3 = game.addChild(new Block('wood')); block3.x = 1550; block3.y = 2350; blocks.push(block3); var block4 = game.addChild(new Block('wood')); block4.x = 1650; block4.y = 2350; blocks.push(block4); // Upper blocks var block5 = game.addChild(new Block('ice')); block5.x = 1400; block5.y = 2250; blocks.push(block5); var block6 = game.addChild(new Block('ice')); block6.x = 1500; block6.y = 2250; blocks.push(block6); var block7 = game.addChild(new Block('ice')); block7.x = 1600; block7.y = 2250; blocks.push(block7); // Top block var block8 = game.addChild(new Block('stone')); block8.x = 1500; block8.y = 2200; blocks.push(block8); } // Create level 4 structures function createLevel4() { // Create minimal structure with fewer blocks and pigs for easy final level var pig1 = game.addChild(new Pig()); pig1.x = 1500; pig1.y = 2300; pigs.push(pig1); var pig2 = game.addChild(new Pig()); pig2.x = 1500; pig2.y = 2200; pigs.push(pig2); // Minimal structure for level 4 - fewer blocks // Base blocks var block1 = game.addChild(new Block('ice')); block1.x = 1450; block1.y = 2350; blocks.push(block1); var block2 = game.addChild(new Block('ice')); block2.x = 1550; block2.y = 2350; blocks.push(block2); // Single upper block var block3 = game.addChild(new Block('wood')); block3.x = 1500; block3.y = 2250; blocks.push(block3); } // Create level 5 structures function createLevel5() { // Create easy structure with minimal blocks and pigs var pig1 = game.addChild(new Pig()); pig1.x = 1400; pig1.y = 2300; pigs.push(pig1); var pig2 = game.addChild(new Pig()); pig2.x = 1600; pig2.y = 2300; pigs.push(pig2); // Simple structure for level 5 - few blocks var block1 = game.addChild(new Block('wood')); block1.x = 1350; block1.y = 2350; blocks.push(block1); var block2 = game.addChild(new Block('wood')); block2.x = 1650; block2.y = 2350; blocks.push(block2); var block3 = game.addChild(new Block('ice')); block3.x = 1500; block3.y = 2250; blocks.push(block3); } // Create level 6 structures function createLevel6() { // Create easy structure with minimal blocks and pigs var pig1 = game.addChild(new Pig()); pig1.x = 1500; pig1.y = 2300; pigs.push(pig1); var pig2 = game.addChild(new Pig()); pig2.x = 1500; pig2.y = 2150; pigs.push(pig2); // Very simple structure for level 6 - minimal blocks var block1 = game.addChild(new Block('ice')); block1.x = 1450; block1.y = 2350; blocks.push(block1); var block2 = game.addChild(new Block('ice')); block2.x = 1550; block2.y = 2350; blocks.push(block2); var block3 = game.addChild(new Block('wood')); block3.x = 1500; block3.y = 2200; blocks.push(block3); } // Create level 7 structures function createLevel7() { // Create final easy level with minimal blocks and pigs var pig1 = game.addChild(new Pig()); pig1.x = 1500; pig1.y = 2300; pigs.push(pig1); // Minimal structure for final level var block1 = game.addChild(new Block('ice')); block1.x = 1500; block1.y = 2350; blocks.push(block1); } // Create level 8 structures function createLevel8() { // Create easy level with minimal blocks and pigs var pig1 = game.addChild(new Pig()); pig1.x = 1400; pig1.y = 2300; pigs.push(pig1); var pig2 = game.addChild(new Pig()); pig2.x = 1600; pig2.y = 2300; pigs.push(pig2); // Simple structure for level 8 - few blocks var block1 = game.addChild(new Block('wood')); block1.x = 1350; block1.y = 2350; blocks.push(block1); var block2 = game.addChild(new Block('wood')); block2.x = 1650; block2.y = 2350; blocks.push(block2); } // Create level 9 structures function createLevel9() { // Create easy level with minimal blocks and pigs var pig1 = game.addChild(new Pig()); pig1.x = 1500; pig1.y = 2300; pigs.push(pig1); var pig2 = game.addChild(new Pig()); pig2.x = 1500; pig2.y = 2200; pigs.push(pig2); // Simple structure for level 9 - few blocks var block1 = game.addChild(new Block('ice')); block1.x = 1450; block1.y = 2350; blocks.push(block1); var block2 = game.addChild(new Block('ice')); block2.x = 1550; block2.y = 2350; blocks.push(block2); var block3 = game.addChild(new Block('wood')); block3.x = 1500; block3.y = 2250; blocks.push(block3); } // Create level 10 structures function createLevel10() { // Create final level with no blocks and one King pig var kingPig1 = game.addChild(new KingPig()); kingPig1.x = 1500; kingPig1.y = 2300; pigs.push(kingPig1); // No blocks in level 10 - just the King pig standing on the ground } // Initialize level based on current level function initializeLevel() { if (level === 1) { createLevel1(); } else if (level === 2) { createLevel2(); } else if (level === 3) { createLevel3(); } else if (level === 4) { createLevel4(); } else if (level === 5) { createLevel5(); } else if (level === 6) { createLevel6(); } else if (level === 7) { createLevel7(); } else if (level === 8) { createLevel8(); } else if (level === 9) { createLevel9(); } else if (level === 10) { createLevel10(); } } // Initialize level initializeLevel(); createNewBird(); // Start playing angry birds music LK.playMusic('angryBirdsMusic');
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var Bird = Container.expand(function () {
var self = Container.call(this);
var birdGraphics = self.attachAsset('bird', {
anchorX: 0.5,
anchorY: 0.5
});
self.velocityX = 0;
self.velocityY = 0;
self.launched = false;
self.gravity = 0.3;
self.bounce = 0.3;
self.update = function () {
if (self.launched) {
self.velocityY += self.gravity;
self.x += self.velocityX;
self.y += self.velocityY;
// Ground collision
if (self.y > 2600) {
self.y = 2600;
self.velocityY *= -self.bounce;
self.velocityX *= 0.8;
if (Math.abs(self.velocityY) < 2) {
self.velocityY = 0;
}
}
// Side boundaries
if (self.x < 0 || self.x > 2048) {
self.velocityX *= -self.bounce;
}
}
};
self.launch = function (velX, velY) {
self.launched = true;
self.velocityX = velX;
self.velocityY = velY;
LK.getSound('launch').play();
};
return self;
});
var Block = Container.expand(function (type) {
var self = Container.call(this);
var assetName = type + 'Block';
var blockGraphics = self.attachAsset(assetName, {
anchorX: 0.5,
anchorY: 0.5
});
self.type = type;
self.health = type === 'wood' ? 50 : type === 'stone' ? 100 : 30; // ice is weakest
self.destroyed = false;
self.takeDamage = function (damage) {
self.health -= damage;
if (self.health <= 0 && !self.destroyed) {
self.destroyed = true;
LK.effects.flashObject(self, 0xff0000, 200);
LK.getSound('hit').play();
LK.setScore(LK.getScore() + 10);
scoreText.setText(LK.getScore());
}
};
return self;
});
var BlueBird = Container.expand(function () {
var self = Container.call(this);
var birdGraphics = self.attachAsset('blueBird', {
anchorX: 0.5,
anchorY: 0.5
});
self.velocityX = 0;
self.velocityY = 0;
self.launched = false;
self.gravity = 0.3;
self.bounce = 0.3;
self.update = function () {
if (self.launched) {
self.velocityY += self.gravity;
self.x += self.velocityX;
self.y += self.velocityY;
// Ground collision
if (self.y > 2600) {
self.y = 2600;
self.velocityY *= -self.bounce;
self.velocityX *= 0.8;
if (Math.abs(self.velocityY) < 2) {
self.velocityY = 0;
}
}
// Side boundaries
if (self.x < 0 || self.x > 2048) {
self.velocityX *= -self.bounce;
}
}
};
self.launch = function (velX, velY) {
self.launched = true;
self.velocityX = velX;
self.velocityY = velY;
LK.getSound('launch').play();
};
self.hasSplit = false; // Track if bird has already split
self.down = function (x, y, obj) {
if (self.launched && !self.hasSplit) {
self.hasSplit = true; // Prevent multiple splits
// Create two additional blue birds - one above and one below
var blueBirdAbove = game.addChild(new BlueBird());
blueBirdAbove.x = self.x;
blueBirdAbove.y = self.y - 50;
blueBirdAbove.launched = true;
blueBirdAbove.velocityX = self.velocityX * 0.8;
blueBirdAbove.velocityY = self.velocityY - 3;
blueBirdAbove.hasSplit = true; // Prevent these copies from splitting
birds.push(blueBirdAbove);
var blueBirdBelow = game.addChild(new BlueBird());
blueBirdBelow.x = self.x;
blueBirdBelow.y = self.y + 50;
blueBirdBelow.launched = true;
blueBirdBelow.velocityX = self.velocityX * 0.8;
blueBirdBelow.velocityY = self.velocityY + 3;
blueBirdBelow.hasSplit = true; // Prevent these copies from splitting
birds.push(blueBirdBelow);
}
};
return self;
});
var KingPig = Container.expand(function () {
var self = Container.call(this);
var kingPigGraphics = self.attachAsset('kingPig', {
anchorX: 0.5,
anchorY: 0.5
});
self.health = 300;
self.destroyed = false;
self.takeDamage = function (damage) {
self.health -= damage;
if (self.health <= 0 && !self.destroyed) {
self.destroyed = true;
LK.effects.flashObject(self, 0xffff00, 500);
LK.getSound('destroy').play();
LK.setScore(LK.getScore() + 500);
scoreText.setText(LK.getScore());
}
};
return self;
});
var Pig = Container.expand(function () {
var self = Container.call(this);
var pigGraphics = self.attachAsset('pig', {
anchorX: 0.5,
anchorY: 0.5
});
self.health = 100;
self.destroyed = false;
self.takeDamage = function (damage) {
self.health -= damage;
if (self.health <= 0 && !self.destroyed) {
self.destroyed = true;
LK.effects.flashObject(self, 0xffff00, 300);
LK.getSound('destroy').play();
LK.setScore(LK.getScore() + 100);
scoreText.setText(LK.getScore());
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x87CEEB // Sky blue background
});
/****
* Game Code
****/
// Game variables
var birds = [];
var pigs = [];
var blocks = [];
var currentBird = null;
var slingshot = null;
var isDragging = false;
var trajectoryDots = [];
var slingshotX = 200;
var slingshotY = 2400;
var birdsRemaining = 8;
var level = 1;
// UI Elements
var scoreText = new Text2('Score: 0', {
size: 60,
fill: 0xFFFFFF
});
scoreText.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreText);
var birdsText = new Text2('Birds: 8', {
size: 50,
fill: 0xFFFFFF
});
birdsText.anchor.set(0, 0);
birdsText.x = 100;
birdsText.y = 100;
LK.gui.topLeft.addChild(birdsText);
var levelText = new Text2('Level: 1', {
size: 50,
fill: 0xFFFFFF
});
levelText.anchor.set(1, 0);
levelText.x = -100;
levelText.y = 100;
LK.gui.topRight.addChild(levelText);
// Create ground
var ground = game.addChild(LK.getAsset('ground', {
anchorX: 0,
anchorY: 1,
x: 0,
y: 2732
}));
// Create clouds for background atmosphere
var cloud1 = game.addChild(LK.getAsset('cloud', {
anchorX: 0.5,
anchorY: 0.5,
x: 300,
y: 400,
alpha: 0.8
}));
var cloud2 = game.addChild(LK.getAsset('cloud', {
anchorX: 0.5,
anchorY: 0.5,
x: 800,
y: 300,
alpha: 0.7
}));
var cloud3 = game.addChild(LK.getAsset('cloud', {
anchorX: 0.5,
anchorY: 0.5,
x: 1400,
y: 450,
alpha: 0.6
}));
var cloud4 = game.addChild(LK.getAsset('cloud', {
anchorX: 0.5,
anchorY: 0.5,
x: 1800,
y: 350,
alpha: 0.8
}));
// Create slingshot
slingshot = game.addChild(LK.getAsset('slingshot', {
anchorX: 0.5,
anchorY: 1,
x: slingshotX,
y: slingshotY
}));
// Create level structures
function createLevel1() {
// Create pigs
var pig1 = game.addChild(new Pig());
pig1.x = 1400;
pig1.y = 2300;
pigs.push(pig1);
var pig2 = game.addChild(new Pig());
pig2.x = 1600;
pig2.y = 2200;
pigs.push(pig2);
// Additional pigs
var pig3 = game.addChild(new Pig());
pig3.x = 1250;
pig3.y = 2300;
pigs.push(pig3);
var pig4 = game.addChild(new Pig());
pig4.x = 1400;
pig4.y = 2100;
pigs.push(pig4);
var pig5 = game.addChild(new Pig());
pig5.x = 1750;
pig5.y = 2200;
pigs.push(pig5);
// Create structure
var block1 = game.addChild(new Block('wood'));
block1.x = 1300;
block1.y = 2350;
blocks.push(block1);
var block2 = game.addChild(new Block('wood'));
block2.x = 1500;
block2.y = 2350;
blocks.push(block2);
var block3 = game.addChild(new Block('stone'));
block3.x = 1400;
block3.y = 2250;
blocks.push(block3);
var block4 = game.addChild(new Block('ice'));
block4.x = 1600;
block4.y = 2300;
blocks.push(block4);
// Additional foundation blocks
var block5 = game.addChild(new Block('wood'));
block5.x = 1200;
block5.y = 2350;
blocks.push(block5);
var block6 = game.addChild(new Block('wood'));
block6.x = 1700;
block6.y = 2350;
blocks.push(block6);
// Upper level blocks
var block7 = game.addChild(new Block('ice'));
block7.x = 1350;
block7.y = 2200;
blocks.push(block7);
var block8 = game.addChild(new Block('ice'));
block8.x = 1450;
block8.y = 2200;
blocks.push(block8);
// Top blocks
var block9 = game.addChild(new Block('stone'));
block9.x = 1400;
block9.y = 2150;
blocks.push(block9);
// Side tower blocks
var block10 = game.addChild(new Block('wood'));
block10.x = 1750;
block10.y = 2300;
blocks.push(block10);
var block11 = game.addChild(new Block('ice'));
block11.x = 1750;
block11.y = 2250;
blocks.push(block11);
}
// Initialize first bird
function createNewBird() {
if (birdsRemaining > 0) {
if (level === 6 || level === 7 || level === 8 || level === 9) {
currentBird = game.addChild(new BlueBird());
} else {
currentBird = game.addChild(new Bird());
}
currentBird.x = slingshotX;
currentBird.y = slingshotY - 100;
birds.push(currentBird);
}
}
// Trajectory calculation
function calculateTrajectory(startX, startY, velX, velY) {
var dots = [];
var x = startX;
var y = startY;
var vx = velX;
var vy = velY;
var gravity = 0.3;
for (var i = 0; i < 50; i += 3) {
dots.push({
x: x,
y: y
});
vx *= 0.99;
vy += gravity;
x += vx * 3;
y += vy * 3;
if (y > 2600 || x > 2048) break;
}
return dots;
}
// Clear trajectory dots
function clearTrajectory() {
for (var i = 0; i < trajectoryDots.length; i++) {
trajectoryDots[i].destroy();
}
trajectoryDots = [];
}
// Show trajectory dots
function showTrajectory(dots) {
clearTrajectory();
for (var i = 0; i < dots.length; i++) {
var dot = game.addChild(LK.getAsset('trajectory', {
anchorX: 0.5,
anchorY: 0.5,
x: dots[i].x,
y: dots[i].y,
alpha: 0.5
}));
trajectoryDots.push(dot);
}
}
// Check collisions
function checkCollisions() {
for (var i = 0; i < birds.length; i++) {
var bird = birds[i];
if (!bird.launched) continue;
// Check bird vs pigs
for (var j = 0; j < pigs.length; j++) {
var pig = pigs[j];
if (!pig.destroyed && bird.intersects(pig)) {
var damage = Math.abs(bird.velocityX) + Math.abs(bird.velocityY);
pig.takeDamage(damage * 2);
}
}
// Check bird vs blocks
for (var k = 0; k < blocks.length; k++) {
var block = blocks[k];
if (!block.destroyed && bird.intersects(block)) {
var damage = Math.abs(bird.velocityX) + Math.abs(bird.velocityY);
block.takeDamage(damage);
bird.velocityX *= 0.5;
bird.velocityY *= 0.5;
}
}
}
}
// Check win condition
function checkWinCondition() {
var allPigsDestroyed = true;
for (var i = 0; i < pigs.length; i++) {
if (!pigs[i].destroyed) {
allPigsDestroyed = false;
break;
}
}
if (allPigsDestroyed) {
if (level === 1) {
// Progress to level 2
LK.setTimeout(function () {
level = 2;
levelText.setText('Level: ' + level);
birdsRemaining = 8;
birdsText.setText('Birds: ' + birdsRemaining);
// Clear existing objects
for (var i = 0; i < blocks.length; i++) {
blocks[i].destroy();
}
blocks = [];
for (var j = 0; j < pigs.length; j++) {
pigs[j].destroy();
}
pigs = [];
for (var k = 0; k < birds.length; k++) {
birds[k].destroy();
}
birds = [];
currentBird = null;
// Initialize level 2
initializeLevel();
createNewBird();
}, 1000);
} else if (level === 2) {
// Progress to level 3
LK.setTimeout(function () {
level = 3;
levelText.setText('Level: ' + level);
birdsRemaining = 8;
birdsText.setText('Birds: ' + birdsRemaining);
// Clear existing objects
for (var i = 0; i < blocks.length; i++) {
blocks[i].destroy();
}
blocks = [];
for (var j = 0; j < pigs.length; j++) {
pigs[j].destroy();
}
pigs = [];
for (var k = 0; k < birds.length; k++) {
birds[k].destroy();
}
birds = [];
currentBird = null;
// Initialize level 3
initializeLevel();
createNewBird();
}, 1000);
} else if (level === 3) {
// Progress to level 4
LK.setTimeout(function () {
level = 4;
levelText.setText('Level: ' + level);
birdsRemaining = 8;
birdsText.setText('Birds: ' + birdsRemaining);
// Clear existing objects
for (var i = 0; i < blocks.length; i++) {
blocks[i].destroy();
}
blocks = [];
for (var j = 0; j < pigs.length; j++) {
pigs[j].destroy();
}
pigs = [];
for (var k = 0; k < birds.length; k++) {
birds[k].destroy();
}
birds = [];
currentBird = null;
// Initialize level 4
initializeLevel();
createNewBird();
}, 1000);
} else if (level === 4) {
// Progress to level 5
LK.setTimeout(function () {
level = 5;
levelText.setText('Level: ' + level);
birdsRemaining = 8;
birdsText.setText('Birds: ' + birdsRemaining);
// Clear existing objects
for (var i = 0; i < blocks.length; i++) {
blocks[i].destroy();
}
blocks = [];
for (var j = 0; j < pigs.length; j++) {
pigs[j].destroy();
}
pigs = [];
for (var k = 0; k < birds.length; k++) {
birds[k].destroy();
}
birds = [];
currentBird = null;
// Initialize level 5
initializeLevel();
createNewBird();
}, 1000);
} else if (level === 5) {
// Progress to level 6
LK.setTimeout(function () {
level = 6;
levelText.setText('Level: ' + level);
birdsRemaining = 8;
birdsText.setText('Birds: ' + birdsRemaining);
// Clear existing objects
for (var i = 0; i < blocks.length; i++) {
blocks[i].destroy();
}
blocks = [];
for (var j = 0; j < pigs.length; j++) {
pigs[j].destroy();
}
pigs = [];
for (var k = 0; k < birds.length; k++) {
birds[k].destroy();
}
birds = [];
currentBird = null;
// Initialize level 6
initializeLevel();
createNewBird();
}, 1000);
} else if (level === 6) {
// Progress to level 7
LK.setTimeout(function () {
level = 7;
levelText.setText('Level: ' + level);
birdsRemaining = 8;
birdsText.setText('Birds: ' + birdsRemaining);
// Clear existing objects
for (var i = 0; i < blocks.length; i++) {
blocks[i].destroy();
}
blocks = [];
for (var j = 0; j < pigs.length; j++) {
pigs[j].destroy();
}
pigs = [];
for (var k = 0; k < birds.length; k++) {
birds[k].destroy();
}
birds = [];
currentBird = null;
// Initialize level 7
initializeLevel();
createNewBird();
}, 1000);
} else if (level === 7) {
// Progress to level 8
LK.setTimeout(function () {
level = 8;
levelText.setText('Level: ' + level);
birdsRemaining = 8;
birdsText.setText('Birds: ' + birdsRemaining);
// Clear existing objects
for (var i = 0; i < blocks.length; i++) {
blocks[i].destroy();
}
blocks = [];
for (var j = 0; j < pigs.length; j++) {
pigs[j].destroy();
}
pigs = [];
for (var k = 0; k < birds.length; k++) {
birds[k].destroy();
}
birds = [];
currentBird = null;
// Initialize level 8
initializeLevel();
createNewBird();
}, 1000);
} else if (level === 8) {
// Progress to level 9
LK.setTimeout(function () {
level = 9;
levelText.setText('Level: ' + level);
birdsRemaining = 8;
birdsText.setText('Birds: ' + birdsRemaining);
// Clear existing objects
for (var i = 0; i < blocks.length; i++) {
blocks[i].destroy();
}
blocks = [];
for (var j = 0; j < pigs.length; j++) {
pigs[j].destroy();
}
pigs = [];
for (var k = 0; k < birds.length; k++) {
birds[k].destroy();
}
birds = [];
currentBird = null;
// Initialize level 9
initializeLevel();
createNewBird();
}, 1000);
} else if (level === 9) {
// Progress to level 10
LK.setTimeout(function () {
level = 10;
levelText.setText('Level: ' + level);
birdsRemaining = 8;
birdsText.setText('Birds: ' + birdsRemaining);
// Clear existing objects
for (var i = 0; i < blocks.length; i++) {
blocks[i].destroy();
}
blocks = [];
for (var j = 0; j < pigs.length; j++) {
pigs[j].destroy();
}
pigs = [];
for (var k = 0; k < birds.length; k++) {
birds[k].destroy();
}
birds = [];
currentBird = null;
// Initialize level 10
initializeLevel();
createNewBird();
}, 1000);
} else if (level === 10) {
// Game completed
LK.setTimeout(function () {
LK.showYouWin();
}, 1000);
}
} else if (birdsRemaining <= 0 && (!currentBird || currentBird.launched && Math.abs(currentBird.velocityX) < 1 && Math.abs(currentBird.velocityY) < 1)) {
LK.setTimeout(function () {
LK.showGameOver();
}, 1000);
}
}
// Game event handlers
game.down = function (x, y, obj) {
if (currentBird && !currentBird.launched) {
isDragging = true;
} else {
// Check if there's a launched blue bird that can split
for (var i = 0; i < birds.length; i++) {
var bird = birds[i];
if (bird.launched && bird.attachAsset && bird.hasSplit !== undefined && !bird.hasSplit) {
// This is a BlueBird that can split
bird.hasSplit = true;
// Create two additional blue birds - one above and one below
var blueBirdAbove = game.addChild(new BlueBird());
blueBirdAbove.x = bird.x;
blueBirdAbove.y = bird.y - 50;
blueBirdAbove.launched = true;
blueBirdAbove.velocityX = bird.velocityX * 0.8;
blueBirdAbove.velocityY = bird.velocityY - 3;
blueBirdAbove.hasSplit = true;
birds.push(blueBirdAbove);
var blueBirdBelow = game.addChild(new BlueBird());
blueBirdBelow.x = bird.x;
blueBirdBelow.y = bird.y + 50;
blueBirdBelow.launched = true;
blueBirdBelow.velocityX = bird.velocityX * 0.8;
blueBirdBelow.velocityY = bird.velocityY + 3;
blueBirdBelow.hasSplit = true;
birds.push(blueBirdBelow);
break; // Only split one blue bird per touch
}
}
}
};
game.move = function (x, y, obj) {
if (isDragging && currentBird && !currentBird.launched) {
var maxDistance = 150;
var deltaX = slingshotX - x;
var deltaY = slingshotY - 100 - y;
var distance = Math.sqrt(deltaX * deltaX + deltaY * deltaY);
if (distance > maxDistance) {
deltaX = deltaX / distance * maxDistance;
deltaY = deltaY / distance * maxDistance;
}
currentBird.x = slingshotX - deltaX;
currentBird.y = slingshotY - 100 - deltaY;
// Show trajectory
var velX = deltaX * 0.2;
var velY = deltaY * 0.2;
var trajectoryPoints = calculateTrajectory(currentBird.x, currentBird.y, velX, velY);
showTrajectory(trajectoryPoints);
}
};
game.up = function (x, y, obj) {
if (isDragging && currentBird && !currentBird.launched) {
isDragging = false;
clearTrajectory();
var deltaX = slingshotX - currentBird.x;
var deltaY = slingshotY - 100 - currentBird.y;
if (Math.abs(deltaX) > 5 || Math.abs(deltaY) > 5) {
currentBird.launch(deltaX * 0.2, deltaY * 0.2);
birdsRemaining--;
birdsText.setText('Birds: ' + birdsRemaining);
LK.setTimeout(function () {
createNewBird();
}, 2000);
}
}
};
// Main game update
game.update = function () {
checkCollisions();
checkWinCondition();
// Remove destroyed objects
for (var i = blocks.length - 1; i >= 0; i--) {
if (blocks[i].destroyed) {
blocks[i].destroy();
blocks.splice(i, 1);
}
}
for (var j = pigs.length - 1; j >= 0; j--) {
if (pigs[j].destroyed) {
pigs[j].alpha = Math.max(0, pigs[j].alpha - 0.02);
if (pigs[j].alpha <= 0) {
pigs[j].destroy();
pigs.splice(j, 1);
}
}
}
};
// Create level 2 structures
function createLevel2() {
// Create more pigs for level 2
var pig1 = game.addChild(new Pig());
pig1.x = 1300;
pig1.y = 2300;
pigs.push(pig1);
var pig2 = game.addChild(new Pig());
pig2.x = 1500;
pig2.y = 2300;
pigs.push(pig2);
var pig3 = game.addChild(new Pig());
pig3.x = 1700;
pig3.y = 2300;
pigs.push(pig3);
var pig4 = game.addChild(new Pig());
pig4.x = 1400;
pig4.y = 2150;
pigs.push(pig4);
var pig5 = game.addChild(new Pig());
pig5.x = 1600;
pig5.y = 2150;
pigs.push(pig5);
var pig6 = game.addChild(new Pig());
pig6.x = 1500;
pig6.y = 2000;
pigs.push(pig6);
// Create more complex structure for level 2
// Base foundation
var block1 = game.addChild(new Block('stone'));
block1.x = 1250;
block1.y = 2350;
blocks.push(block1);
var block2 = game.addChild(new Block('stone'));
block2.x = 1350;
block2.y = 2350;
blocks.push(block2);
var block3 = game.addChild(new Block('stone'));
block3.x = 1450;
block3.y = 2350;
blocks.push(block3);
var block4 = game.addChild(new Block('stone'));
block4.x = 1550;
block4.y = 2350;
blocks.push(block4);
var block5 = game.addChild(new Block('stone'));
block5.x = 1650;
block5.y = 2350;
blocks.push(block5);
var block6 = game.addChild(new Block('stone'));
block6.x = 1750;
block6.y = 2350;
blocks.push(block6);
// Second level
var block7 = game.addChild(new Block('wood'));
block7.x = 1300;
block7.y = 2250;
blocks.push(block7);
var block8 = game.addChild(new Block('wood'));
block8.x = 1400;
block8.y = 2250;
blocks.push(block8);
var block9 = game.addChild(new Block('wood'));
block9.x = 1500;
block9.y = 2250;
blocks.push(block9);
var block10 = game.addChild(new Block('wood'));
block10.x = 1600;
block10.y = 2250;
blocks.push(block10);
var block11 = game.addChild(new Block('wood'));
block11.x = 1700;
block11.y = 2250;
blocks.push(block11);
// Third level
var block12 = game.addChild(new Block('ice'));
block12.x = 1350;
block12.y = 2150;
blocks.push(block12);
var block13 = game.addChild(new Block('ice'));
block13.x = 1450;
block13.y = 2150;
blocks.push(block13);
var block14 = game.addChild(new Block('ice'));
block14.x = 1550;
block14.y = 2150;
blocks.push(block14);
var block15 = game.addChild(new Block('ice'));
block15.x = 1650;
block15.y = 2150;
blocks.push(block15);
// Top level
var block16 = game.addChild(new Block('wood'));
block16.x = 1400;
block16.y = 2050;
blocks.push(block16);
var block17 = game.addChild(new Block('wood'));
block17.x = 1500;
block17.y = 2050;
blocks.push(block17);
var block18 = game.addChild(new Block('wood'));
block18.x = 1600;
block18.y = 2050;
blocks.push(block18);
}
// Create level 3 structures
function createLevel3() {
// Create simple structure with fewer pigs for easier level
var pig1 = game.addChild(new Pig());
pig1.x = 1400;
pig1.y = 2300;
pigs.push(pig1);
var pig2 = game.addChild(new Pig());
pig2.x = 1600;
pig2.y = 2300;
pigs.push(pig2);
var pig3 = game.addChild(new Pig());
pig3.x = 1500;
pig3.y = 2150;
pigs.push(pig3);
// Simple structure for level 3
// Base blocks
var block1 = game.addChild(new Block('wood'));
block1.x = 1350;
block1.y = 2350;
blocks.push(block1);
var block2 = game.addChild(new Block('wood'));
block2.x = 1450;
block2.y = 2350;
blocks.push(block2);
var block3 = game.addChild(new Block('wood'));
block3.x = 1550;
block3.y = 2350;
blocks.push(block3);
var block4 = game.addChild(new Block('wood'));
block4.x = 1650;
block4.y = 2350;
blocks.push(block4);
// Upper blocks
var block5 = game.addChild(new Block('ice'));
block5.x = 1400;
block5.y = 2250;
blocks.push(block5);
var block6 = game.addChild(new Block('ice'));
block6.x = 1500;
block6.y = 2250;
blocks.push(block6);
var block7 = game.addChild(new Block('ice'));
block7.x = 1600;
block7.y = 2250;
blocks.push(block7);
// Top block
var block8 = game.addChild(new Block('stone'));
block8.x = 1500;
block8.y = 2200;
blocks.push(block8);
}
// Create level 4 structures
function createLevel4() {
// Create minimal structure with fewer blocks and pigs for easy final level
var pig1 = game.addChild(new Pig());
pig1.x = 1500;
pig1.y = 2300;
pigs.push(pig1);
var pig2 = game.addChild(new Pig());
pig2.x = 1500;
pig2.y = 2200;
pigs.push(pig2);
// Minimal structure for level 4 - fewer blocks
// Base blocks
var block1 = game.addChild(new Block('ice'));
block1.x = 1450;
block1.y = 2350;
blocks.push(block1);
var block2 = game.addChild(new Block('ice'));
block2.x = 1550;
block2.y = 2350;
blocks.push(block2);
// Single upper block
var block3 = game.addChild(new Block('wood'));
block3.x = 1500;
block3.y = 2250;
blocks.push(block3);
}
// Create level 5 structures
function createLevel5() {
// Create easy structure with minimal blocks and pigs
var pig1 = game.addChild(new Pig());
pig1.x = 1400;
pig1.y = 2300;
pigs.push(pig1);
var pig2 = game.addChild(new Pig());
pig2.x = 1600;
pig2.y = 2300;
pigs.push(pig2);
// Simple structure for level 5 - few blocks
var block1 = game.addChild(new Block('wood'));
block1.x = 1350;
block1.y = 2350;
blocks.push(block1);
var block2 = game.addChild(new Block('wood'));
block2.x = 1650;
block2.y = 2350;
blocks.push(block2);
var block3 = game.addChild(new Block('ice'));
block3.x = 1500;
block3.y = 2250;
blocks.push(block3);
}
// Create level 6 structures
function createLevel6() {
// Create easy structure with minimal blocks and pigs
var pig1 = game.addChild(new Pig());
pig1.x = 1500;
pig1.y = 2300;
pigs.push(pig1);
var pig2 = game.addChild(new Pig());
pig2.x = 1500;
pig2.y = 2150;
pigs.push(pig2);
// Very simple structure for level 6 - minimal blocks
var block1 = game.addChild(new Block('ice'));
block1.x = 1450;
block1.y = 2350;
blocks.push(block1);
var block2 = game.addChild(new Block('ice'));
block2.x = 1550;
block2.y = 2350;
blocks.push(block2);
var block3 = game.addChild(new Block('wood'));
block3.x = 1500;
block3.y = 2200;
blocks.push(block3);
}
// Create level 7 structures
function createLevel7() {
// Create final easy level with minimal blocks and pigs
var pig1 = game.addChild(new Pig());
pig1.x = 1500;
pig1.y = 2300;
pigs.push(pig1);
// Minimal structure for final level
var block1 = game.addChild(new Block('ice'));
block1.x = 1500;
block1.y = 2350;
blocks.push(block1);
}
// Create level 8 structures
function createLevel8() {
// Create easy level with minimal blocks and pigs
var pig1 = game.addChild(new Pig());
pig1.x = 1400;
pig1.y = 2300;
pigs.push(pig1);
var pig2 = game.addChild(new Pig());
pig2.x = 1600;
pig2.y = 2300;
pigs.push(pig2);
// Simple structure for level 8 - few blocks
var block1 = game.addChild(new Block('wood'));
block1.x = 1350;
block1.y = 2350;
blocks.push(block1);
var block2 = game.addChild(new Block('wood'));
block2.x = 1650;
block2.y = 2350;
blocks.push(block2);
}
// Create level 9 structures
function createLevel9() {
// Create easy level with minimal blocks and pigs
var pig1 = game.addChild(new Pig());
pig1.x = 1500;
pig1.y = 2300;
pigs.push(pig1);
var pig2 = game.addChild(new Pig());
pig2.x = 1500;
pig2.y = 2200;
pigs.push(pig2);
// Simple structure for level 9 - few blocks
var block1 = game.addChild(new Block('ice'));
block1.x = 1450;
block1.y = 2350;
blocks.push(block1);
var block2 = game.addChild(new Block('ice'));
block2.x = 1550;
block2.y = 2350;
blocks.push(block2);
var block3 = game.addChild(new Block('wood'));
block3.x = 1500;
block3.y = 2250;
blocks.push(block3);
}
// Create level 10 structures
function createLevel10() {
// Create final level with no blocks and one King pig
var kingPig1 = game.addChild(new KingPig());
kingPig1.x = 1500;
kingPig1.y = 2300;
pigs.push(kingPig1);
// No blocks in level 10 - just the King pig standing on the ground
}
// Initialize level based on current level
function initializeLevel() {
if (level === 1) {
createLevel1();
} else if (level === 2) {
createLevel2();
} else if (level === 3) {
createLevel3();
} else if (level === 4) {
createLevel4();
} else if (level === 5) {
createLevel5();
} else if (level === 6) {
createLevel6();
} else if (level === 7) {
createLevel7();
} else if (level === 8) {
createLevel8();
} else if (level === 9) {
createLevel9();
} else if (level === 10) {
createLevel10();
}
}
// Initialize level
initializeLevel();
createNewBird();
// Start playing angry birds music
LK.playMusic('angryBirdsMusic');
Green pig no angry. In-Game asset. 2d. High contrast. No shadows
Angry birds red. In-Game asset. 2d. High contrast. No shadows
Blue glass block. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
Wood block. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
Gray stone block. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
Angry birds slingshot. In-Game asset. 2d. High contrast. No shadows
Cloud. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
Angry birds 2 King pig. In-Game asset. 2d. High contrast. No shadows
Angry birds blue bird. In-Game asset. 2d. High contrast. No shadows
Angry birds vertical poster. In-Game asset. 2d. High contrast. No shadows
Angry birds logo. In-Game asset. 2d. High contrast. No shadows