User prompt
Add 1 bird
User prompt
Add more blocks and pigs
User prompt
Make hardest level
User prompt
Add level 3 and game will end after the level 3
User prompt
In level 2 when we pull and realese the sling the bird doesnt stop
User prompt
Make level 2 slingshot system same level 1 slingshot system
User prompt
Add level 2 and game will end after the level 2
User prompt
The game does not end when you pass level 1
User prompt
Make level 3
User prompt
Make level 2
User prompt
Add angry birds background
Code edit (1 edits merged)
Please save this source code
User prompt
Slingshot Siege
Initial prompt
Make a angry birds
/****
* 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 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
});
/****
* 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 = 3;
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: 3', {
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 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);
// 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);
}
// Initialize first bird
function createNewBird() {
if (birdsRemaining > 0) {
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) {
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;
}
};
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);
}
}
}
};
// Initialize level
createLevel1();
createNewBird(); ===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,331 @@
-/****
+/****
+* 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 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: 0x000000
-});
\ No newline at end of file
+ backgroundColor: 0x87CEEB
+});
+
+/****
+* 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 = 3;
+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: 3', {
+ 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 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);
+ // 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);
+}
+// Initialize first bird
+function createNewBird() {
+ if (birdsRemaining > 0) {
+ 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) {
+ 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;
+ }
+};
+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);
+ }
+ }
+ }
+};
+// Initialize level
+createLevel1();
+createNewBird();
\ No newline at end of file
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