/**** * Classes ****/ // Balloon class var Knife = Container.expand(function () { var self = Container.call(this); var knifeGraphics = self.attachAsset('balloon', { // Reusing balloon asset for knife anchorX: 0.5, anchorY: 0.5 }); self.verticalSpeed = 5; self.horizontalSpeed = 0; self.direction = 1; // 1 for up, -1 for down self.move = function () { self.y -= self.verticalSpeed * self.direction; // Reverse direction if it hits the top or bottom of the screen if (self.y < 0 || self.y > game.height) { self.direction *= -1; } }; self.shift = function (shiftX) { self.x += shiftX; // Keep within game bounds if (self.x < 0) { self.x = 0; } if (self.x > game.width) { self.x = game.width; } }; }); // Basket class var Basket = Container.expand(function () { var self = Container.call(this); var basketGraphics = self.attachAsset('basket', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 40; self.move = function (direction) { switch (direction) { case 'left': self.x = Math.max(0, self.x - self.speed); break; case 'right': self.x = Math.min(game.width, self.x + self.speed); break; case 'up': self.y = Math.max(0, self.y - self.speed); break; case 'down': self.y = Math.min(game.height, self.y + self.speed); break; } }; }); // Upgrade button class var UpgradeButton = Container.expand(function () { var self = Container.call(this); var buttonGraphics = self.attachAsset('button', { anchorX: 0.5, anchorY: 0.5 }); self.on('down', function () { // Upgrade logic goes here console.log('Upgrade button pressed'); }); }); // Bomb class var Bomb = Container.expand(function () { var self = Container.call(this); var bombGraphics = self.attachAsset('bomb', { anchorX: 0.5, anchorY: 0.5 }); self.verticalSpeed = 7; self.move = function () { self.y -= self.verticalSpeed; if (self.y < -self.height) { self.destroy(); } }; }); var Cloud = Container.expand(function () { var self = Container.call(this); var cloudGraphics = self.attachAsset('cloud', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 1; self.move = function () { self.x += self.speed; // Reset cloud position if it moves off screen if (self.x > game.width + self.width) { self.x = -self.width; } }; }); /**** * Initialize Game ****/ // Initialize the upgrade button var game = new LK.Game({ backgroundColor: 0x87CEEB // Light blue color to represent the sky }); /**** * Game Code ****/ // Define the balloon asset // Initialize the basket // Initialize cloud assets var basket = game.addChild(new Basket()); basket.x = game.width / 2; basket.y = game.height - basket.height / 2; // Initialize the knives array var knives = []; // Handle touch move events to move the basket in all directions function handleMove(obj) { var event = obj.event; var pos = event.getLocalPosition(game); var deltaX = pos.x - basket.x; var deltaY = pos.y - basket.y; if (Math.abs(deltaX) > Math.abs(deltaY)) { // Horizontal movement if (deltaX < 0) { basket.move('left'); } else if (deltaX > 0) { basket.move('right'); } } else { // Vertical movement if (deltaY < 0) { basket.move('up'); } else if (deltaY > 0) { basket.move('down'); } } } // Attach the move event listener to the game game.on('move', handleMove); // Game tick event for updating game elements LK.on('tick', function () { // Move and check knives for (var i = knives.length - 1; i >= 0; i--) { knives[i].move(); // Shift knives to the sides if (LK.ticks % 60 == 0) { // Every second knives[i].shift((Math.random() * 2 - 1) * 20); // Random shift between -20 and 20 } // Check if knife is off-screen if (knives[i].y < 0 || knives[i].y > game.height) { knives[i].destroy(); knives.splice(i, 1); } // Check for collision with basket if (basket.intersects(knives[i])) { knives[i].destroy(); knives.splice(i, 1); // Increment score LK.setScore(LK.getScore() + 1); } } // Spawn knives at a regular interval if (LK.ticks % 120 == 0) { // Every 2 seconds var newKnife = new Knife(); newKnife.x = Math.random() * (game.width - newKnife.width) + newKnife.width / 2; newKnife.y = game.height; knives.push(newKnife); game.addChild(newKnife); } // Spawn clouds at a regular interval if (LK.ticks % 300 == 0) { // Every 5 seconds var newCloud = new Cloud(); newCloud.x = -newCloud.width; newCloud.y = Math.random() * (game.height * 0.3); // Random height in the top 30% of the screen game.addChild(newCloud); } // Spawn bombs at a regular interval if (LK.ticks % 180 == 0) { // Every 3 seconds var newBomb = new Bomb(); newBomb.x = Math.random() * (game.width - newBomb.width) + newBomb.width / 2; newBomb.y = 0; // Start from the top of the screen knives.push(newBomb); // Add to the knives array to be managed } }); // Initialize the score text var scoreTxt = new Text2('0', { size: 150, fill: "#ffffff" }); scoreTxt.anchor.set(0.5, 0); LK.gui.top.addChild(scoreTxt); // Initialize the upgrade button var upgradeButton = new UpgradeButton(); upgradeButton.x = game.width / 2; upgradeButton.y = game.height - 200; // Position the button at the bottom LK.gui.bottom.addChild(upgradeButton); // Update the score text every tick LK.on('tick', function () { scoreTxt.setText(LK.getScore()); });
/****
* Classes
****/
// Balloon class
var Knife = Container.expand(function () {
var self = Container.call(this);
var knifeGraphics = self.attachAsset('balloon', {
// Reusing balloon asset for knife
anchorX: 0.5,
anchorY: 0.5
});
self.verticalSpeed = 5;
self.horizontalSpeed = 0;
self.direction = 1; // 1 for up, -1 for down
self.move = function () {
self.y -= self.verticalSpeed * self.direction;
// Reverse direction if it hits the top or bottom of the screen
if (self.y < 0 || self.y > game.height) {
self.direction *= -1;
}
};
self.shift = function (shiftX) {
self.x += shiftX;
// Keep within game bounds
if (self.x < 0) {
self.x = 0;
}
if (self.x > game.width) {
self.x = game.width;
}
};
});
// Basket class
var Basket = Container.expand(function () {
var self = Container.call(this);
var basketGraphics = self.attachAsset('basket', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 40;
self.move = function (direction) {
switch (direction) {
case 'left':
self.x = Math.max(0, self.x - self.speed);
break;
case 'right':
self.x = Math.min(game.width, self.x + self.speed);
break;
case 'up':
self.y = Math.max(0, self.y - self.speed);
break;
case 'down':
self.y = Math.min(game.height, self.y + self.speed);
break;
}
};
});
// Upgrade button class
var UpgradeButton = Container.expand(function () {
var self = Container.call(this);
var buttonGraphics = self.attachAsset('button', {
anchorX: 0.5,
anchorY: 0.5
});
self.on('down', function () {
// Upgrade logic goes here
console.log('Upgrade button pressed');
});
});
// Bomb class
var Bomb = Container.expand(function () {
var self = Container.call(this);
var bombGraphics = self.attachAsset('bomb', {
anchorX: 0.5,
anchorY: 0.5
});
self.verticalSpeed = 7;
self.move = function () {
self.y -= self.verticalSpeed;
if (self.y < -self.height) {
self.destroy();
}
};
});
var Cloud = Container.expand(function () {
var self = Container.call(this);
var cloudGraphics = self.attachAsset('cloud', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 1;
self.move = function () {
self.x += self.speed;
// Reset cloud position if it moves off screen
if (self.x > game.width + self.width) {
self.x = -self.width;
}
};
});
/****
* Initialize Game
****/
// Initialize the upgrade button
var game = new LK.Game({
backgroundColor: 0x87CEEB // Light blue color to represent the sky
});
/****
* Game Code
****/
// Define the balloon asset
// Initialize the basket
// Initialize cloud assets
var basket = game.addChild(new Basket());
basket.x = game.width / 2;
basket.y = game.height - basket.height / 2;
// Initialize the knives array
var knives = [];
// Handle touch move events to move the basket in all directions
function handleMove(obj) {
var event = obj.event;
var pos = event.getLocalPosition(game);
var deltaX = pos.x - basket.x;
var deltaY = pos.y - basket.y;
if (Math.abs(deltaX) > Math.abs(deltaY)) {
// Horizontal movement
if (deltaX < 0) {
basket.move('left');
} else if (deltaX > 0) {
basket.move('right');
}
} else {
// Vertical movement
if (deltaY < 0) {
basket.move('up');
} else if (deltaY > 0) {
basket.move('down');
}
}
}
// Attach the move event listener to the game
game.on('move', handleMove);
// Game tick event for updating game elements
LK.on('tick', function () {
// Move and check knives
for (var i = knives.length - 1; i >= 0; i--) {
knives[i].move();
// Shift knives to the sides
if (LK.ticks % 60 == 0) {
// Every second
knives[i].shift((Math.random() * 2 - 1) * 20); // Random shift between -20 and 20
}
// Check if knife is off-screen
if (knives[i].y < 0 || knives[i].y > game.height) {
knives[i].destroy();
knives.splice(i, 1);
}
// Check for collision with basket
if (basket.intersects(knives[i])) {
knives[i].destroy();
knives.splice(i, 1);
// Increment score
LK.setScore(LK.getScore() + 1);
}
}
// Spawn knives at a regular interval
if (LK.ticks % 120 == 0) {
// Every 2 seconds
var newKnife = new Knife();
newKnife.x = Math.random() * (game.width - newKnife.width) + newKnife.width / 2;
newKnife.y = game.height;
knives.push(newKnife);
game.addChild(newKnife);
}
// Spawn clouds at a regular interval
if (LK.ticks % 300 == 0) {
// Every 5 seconds
var newCloud = new Cloud();
newCloud.x = -newCloud.width;
newCloud.y = Math.random() * (game.height * 0.3); // Random height in the top 30% of the screen
game.addChild(newCloud);
}
// Spawn bombs at a regular interval
if (LK.ticks % 180 == 0) {
// Every 3 seconds
var newBomb = new Bomb();
newBomb.x = Math.random() * (game.width - newBomb.width) + newBomb.width / 2;
newBomb.y = 0; // Start from the top of the screen
knives.push(newBomb); // Add to the knives array to be managed
}
});
// Initialize the score text
var scoreTxt = new Text2('0', {
size: 150,
fill: "#ffffff"
});
scoreTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreTxt);
// Initialize the upgrade button
var upgradeButton = new UpgradeButton();
upgradeButton.x = game.width / 2;
upgradeButton.y = game.height - 200; // Position the button at the bottom
LK.gui.bottom.addChild(upgradeButton);
// Update the score text every tick
LK.on('tick', function () {
scoreTxt.setText(LK.getScore());
});
knife to stab balloons. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
baloon. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
blue bomb. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
clouds on the sky. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.