/**** * Classes ****/ var Bomb = Container.expand(function () { var self = Container.call(this); var bombGraphics = self.attachAsset('bomb', { anchorX: 0.5, anchorY: 0.5 }); self.update = function () { // Bomb specific update logic if needed }; }); // Bottle class var Bottle = Container.expand(function () { var self = Container.call(this); var bottleGraphics = self.attachAsset('bottle', { anchorX: 0.5, anchorY: 0.5 }); self.update = function () { // Bottle specific update logic if needed }; }); var Character = Container.expand(function () { var self = Container.call(this); var characterGraphics = self.attachAsset('character', { anchorX: 0.5, anchorY: 0.5 }); characterGraphics.rotation = .5; characterGraphics.alpha = .8; self.update = function () { // Character specific update logic if needed }; }); var GameOverScreen = Container.expand(function () { var self = Container.call(this); var gameOverText = new Text2('Game Over', { size: 200, fill: "#ff0000" }); gameOverText.anchor.set(0.5, 0.5); gameOverText.x = 2048 / 2; gameOverText.y = 2732 / 2 - 200; self.addChild(gameOverText); finalScoreText = new Text2('Final Score: ' + LK.getScore(), { size: 150, fill: "#ffffff" }); finalScoreText.anchor.set(0.5, 0.5); finalScoreText.x = 2048 / 2; finalScoreText.y = 2732 / 2; self.addChild(finalScoreText); var restartButton = new Text2('Restart', { size: 150, fill: "#00ff00" }); restartButton.anchor.set(0.5, 0.5); restartButton.x = 2048 / 2; restartButton.y = 2732 / 2 + 200; self.addChild(restartButton); restartButton.down = function () { // Restart the game LK.showGameOver(); }; return self; }); var GoldenBottle = Container.expand(function () { var self = Container.call(this); var bottleGraphics = self.attachAsset('goldenbottle', { anchorX: 0.5, anchorY: 0.5 }); self.update = function () { // GoldenBottle specific update logic if needed }; }); //<Assets used in the game will automatically appear here> // Stone class var Stone = Container.expand(function () { var self = Container.call(this); var stoneGraphics = self.attachAsset('stone', { anchorX: 0.5, anchorY: 0.5 }); self.speed = -10; self.update = function () { self.y += self.speed; }; }); // SuperBottle class var SuperBottle = Container.expand(function () { var self = Container.call(this); var bottleGraphics = self.attachAsset('superbottle', { anchorX: 0.5, anchorY: 0.5 }); self.update = function () { // SuperBottle specific update logic if needed }; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x000000 //Init game with black background }); /**** * Game Code ****/ // Add background image var background = LK.getAsset('background', { anchorX: 0.5, anchorY: 0.5, x: 2048 / 2, y: 2732 / 2 }); game.addChild(background); // Function to handle stone throwing function throwStone(x, y) { var newStone = new Stone(); newStone.x = x; newStone.y = y; stones.push(newStone); game.addChild(newStone); // Play rock sound when shooting a stone LK.getSound('rock').play(); } // Initialize arrays and variables var stones = []; var bottles = []; var powerups = []; var finalScoreText; var bombActive = false; var powerups = []; var score = 0; var bottlesHit = 0; var scoreTxt = new Text2('0', { size: 150, fill: "#ffffff" }); // Removed interval to spawn bomb every 10 seconds var character = null; var goldenBottleSpawned = false; scoreTxt.anchor.set(0.5, 0); scoreTxt.y = 100; // Lower the score board a little bit LK.gui.top.addChild(scoreTxt); // Function to handle stone throwing // Function to create bottles at random positions function createBottle() { var isBomb = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; var newBottle; if (isBomb || Math.random() < 0.05 && !bombActive) { bombActive = true; newBottle = new Bomb(); // Make the bomb disappear after 3 seconds LK.setTimeout(function () { if (bottles.includes(newBottle)) { newBottle.destroy(); bottles.splice(bottles.indexOf(newBottle), 1); bombActive = false; } }, 3000); } else if (Math.random() < 0.01) { // 1 in 100 chance newBottle = new SuperBottle(); } else { newBottle = new Bottle(); } do { newBottle.x = Math.random() * 2048; newBottle.y = Math.random() * 1000 + 500; } while (bottles.some(function (bottle) { return Math.hypot(newBottle.x - bottle.x, newBottle.y - bottle.y) < 20; })); if (bottles.length < 5) { bottles.push(newBottle); game.addChild(newBottle); } } // Create initial bottles for (var i = 0; i < 5; i++) { createBottle(); } // Continuously spawn bottles LK.setInterval(function () { if (bottles.length < 5) { createBottle(); } }, 1000); // Initialize character character = new Character(); character.visible = false; // Initially hide the character game.addChild(character); character.x = 200; character.y = 200; // Initialize character icon and timer text for buff duration var characterIcon = LK.getAsset('characterIcon', { anchorX: 0.5, anchorY: 0.5, x: 2048 - 100, y: 50 }); characterIcon.visible = false; // Initially hide the character icon LK.gui.topRight.addChild(characterIcon); var buffTimerTxt = new Text2('0:00', { size: 50, fill: "#ffffff" }); buffTimerTxt.anchor.set(0.5, 0); // Set anchor to the center of the top edge buffTimerTxt.x = characterIcon.x; buffTimerTxt.y = characterIcon.y + 60; // Position it below the character icon buffTimerTxt.visible = false; // Initially hide the timer text LK.gui.topRight.addChild(buffTimerTxt); // Handle game down event game.down = function (x, y, obj) { throwStone(x, y); }; // Update game logic game.update = function () { // Update stones for (var i = stones.length - 1; i >= 0; i--) { stones[i].update(); // Check for collision with bottles for (var j = bottles.length - 1; j >= 0; j--) { if (stones[i].intersects(bottles[j])) { if (bottles[j] instanceof Bomb) { // Play bombblast sound when a bomb is hit LK.getSound('bombblast').play(); // Handle bomb explosion logic // For example, destroy all bottles in a certain radius for (var k = bottles.length - 1; k >= 0; k--) { if (bottles[k] && bottles[j] && Math.hypot(bottles[k].x - bottles[j].x, bottles[k].y - bottles[j].y) < 200) { bottles[k].destroy(); bottles.splice(k, 1); } } // Show game over screen var gameOverScreen = new GameOverScreen(); game.addChild(gameOverScreen); // Update final score text if (finalScoreText) { finalScoreText.setText('Final Score: ' + LK.getScore()); } // Reset score and timer score = 0; LK.setScore(score); scoreTxt.setText(score); gameStartTime = Date.now(); bombActive = false; } // Update score if (bottles[j] instanceof SuperBottle) { score += 50; } else { score += 1; } bottlesHit += 1; // Removed bomb creation logic LK.setScore(score); scoreTxt.setText(score); LK.getSound('glass').play(); // Destroy bottle and stone if (bottles[j]) { bottles[j].destroy(); bottles.splice(j, 1); } stones[i].destroy(); stones.splice(i, 1); goldenBottleSpawned = false; // Create a new bottle createBottle(); break; } } // Destroy stones that are off screen if (stones[i] && stones[i].y < -50) { stones[i].destroy(); stones.splice(i, 1); } } // Update powerups for (var k = powerups.length - 1; k >= 0; k--) { powerups[k].update(); } // Update timer text var elapsedTime = Math.floor((Date.now() - gameStartTime) / 1000); timerTxt.setText(formatTime(elapsedTime)); }; var lastStoneThrowTime = 0; // Initialize timer text var timerTxt = new Text2('0:00', { size: 100, fill: "#ffffff" }); timerTxt.anchor.set(0, 0); // Set anchor to the top-left corner timerTxt.x = 20; // Position it with some padding from the top-left corner timerTxt.y = 150; LK.gui.topLeft.addChild(timerTxt); // Function to format time in minutes and seconds function formatTime(seconds) { var minutes = Math.floor(seconds / 60); var remainingSeconds = seconds % 60; return "".concat(minutes, ":").concat(remainingSeconds < 10 ? '0' : '').concat(remainingSeconds); } // Initialize game start time var gameStartTime = Date.now(); // Removed bombActive variable initialization
/****
* Classes
****/
var Bomb = Container.expand(function () {
var self = Container.call(this);
var bombGraphics = self.attachAsset('bomb', {
anchorX: 0.5,
anchorY: 0.5
});
self.update = function () {
// Bomb specific update logic if needed
};
});
// Bottle class
var Bottle = Container.expand(function () {
var self = Container.call(this);
var bottleGraphics = self.attachAsset('bottle', {
anchorX: 0.5,
anchorY: 0.5
});
self.update = function () {
// Bottle specific update logic if needed
};
});
var Character = Container.expand(function () {
var self = Container.call(this);
var characterGraphics = self.attachAsset('character', {
anchorX: 0.5,
anchorY: 0.5
});
characterGraphics.rotation = .5;
characterGraphics.alpha = .8;
self.update = function () {
// Character specific update logic if needed
};
});
var GameOverScreen = Container.expand(function () {
var self = Container.call(this);
var gameOverText = new Text2('Game Over', {
size: 200,
fill: "#ff0000"
});
gameOverText.anchor.set(0.5, 0.5);
gameOverText.x = 2048 / 2;
gameOverText.y = 2732 / 2 - 200;
self.addChild(gameOverText);
finalScoreText = new Text2('Final Score: ' + LK.getScore(), {
size: 150,
fill: "#ffffff"
});
finalScoreText.anchor.set(0.5, 0.5);
finalScoreText.x = 2048 / 2;
finalScoreText.y = 2732 / 2;
self.addChild(finalScoreText);
var restartButton = new Text2('Restart', {
size: 150,
fill: "#00ff00"
});
restartButton.anchor.set(0.5, 0.5);
restartButton.x = 2048 / 2;
restartButton.y = 2732 / 2 + 200;
self.addChild(restartButton);
restartButton.down = function () {
// Restart the game
LK.showGameOver();
};
return self;
});
var GoldenBottle = Container.expand(function () {
var self = Container.call(this);
var bottleGraphics = self.attachAsset('goldenbottle', {
anchorX: 0.5,
anchorY: 0.5
});
self.update = function () {
// GoldenBottle specific update logic if needed
};
});
//<Assets used in the game will automatically appear here>
// Stone class
var Stone = Container.expand(function () {
var self = Container.call(this);
var stoneGraphics = self.attachAsset('stone', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = -10;
self.update = function () {
self.y += self.speed;
};
});
// SuperBottle class
var SuperBottle = Container.expand(function () {
var self = Container.call(this);
var bottleGraphics = self.attachAsset('superbottle', {
anchorX: 0.5,
anchorY: 0.5
});
self.update = function () {
// SuperBottle specific update logic if needed
};
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x000000 //Init game with black background
});
/****
* Game Code
****/
// Add background image
var background = LK.getAsset('background', {
anchorX: 0.5,
anchorY: 0.5,
x: 2048 / 2,
y: 2732 / 2
});
game.addChild(background);
// Function to handle stone throwing
function throwStone(x, y) {
var newStone = new Stone();
newStone.x = x;
newStone.y = y;
stones.push(newStone);
game.addChild(newStone);
// Play rock sound when shooting a stone
LK.getSound('rock').play();
}
// Initialize arrays and variables
var stones = [];
var bottles = [];
var powerups = [];
var finalScoreText;
var bombActive = false;
var powerups = [];
var score = 0;
var bottlesHit = 0;
var scoreTxt = new Text2('0', {
size: 150,
fill: "#ffffff"
});
// Removed interval to spawn bomb every 10 seconds
var character = null;
var goldenBottleSpawned = false;
scoreTxt.anchor.set(0.5, 0);
scoreTxt.y = 100; // Lower the score board a little bit
LK.gui.top.addChild(scoreTxt);
// Function to handle stone throwing
// Function to create bottles at random positions
function createBottle() {
var isBomb = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
var newBottle;
if (isBomb || Math.random() < 0.05 && !bombActive) {
bombActive = true;
newBottle = new Bomb();
// Make the bomb disappear after 3 seconds
LK.setTimeout(function () {
if (bottles.includes(newBottle)) {
newBottle.destroy();
bottles.splice(bottles.indexOf(newBottle), 1);
bombActive = false;
}
}, 3000);
} else if (Math.random() < 0.01) {
// 1 in 100 chance
newBottle = new SuperBottle();
} else {
newBottle = new Bottle();
}
do {
newBottle.x = Math.random() * 2048;
newBottle.y = Math.random() * 1000 + 500;
} while (bottles.some(function (bottle) {
return Math.hypot(newBottle.x - bottle.x, newBottle.y - bottle.y) < 20;
}));
if (bottles.length < 5) {
bottles.push(newBottle);
game.addChild(newBottle);
}
}
// Create initial bottles
for (var i = 0; i < 5; i++) {
createBottle();
}
// Continuously spawn bottles
LK.setInterval(function () {
if (bottles.length < 5) {
createBottle();
}
}, 1000);
// Initialize character
character = new Character();
character.visible = false; // Initially hide the character
game.addChild(character);
character.x = 200;
character.y = 200;
// Initialize character icon and timer text for buff duration
var characterIcon = LK.getAsset('characterIcon', {
anchorX: 0.5,
anchorY: 0.5,
x: 2048 - 100,
y: 50
});
characterIcon.visible = false; // Initially hide the character icon
LK.gui.topRight.addChild(characterIcon);
var buffTimerTxt = new Text2('0:00', {
size: 50,
fill: "#ffffff"
});
buffTimerTxt.anchor.set(0.5, 0); // Set anchor to the center of the top edge
buffTimerTxt.x = characterIcon.x;
buffTimerTxt.y = characterIcon.y + 60; // Position it below the character icon
buffTimerTxt.visible = false; // Initially hide the timer text
LK.gui.topRight.addChild(buffTimerTxt);
// Handle game down event
game.down = function (x, y, obj) {
throwStone(x, y);
};
// Update game logic
game.update = function () {
// Update stones
for (var i = stones.length - 1; i >= 0; i--) {
stones[i].update();
// Check for collision with bottles
for (var j = bottles.length - 1; j >= 0; j--) {
if (stones[i].intersects(bottles[j])) {
if (bottles[j] instanceof Bomb) {
// Play bombblast sound when a bomb is hit
LK.getSound('bombblast').play();
// Handle bomb explosion logic
// For example, destroy all bottles in a certain radius
for (var k = bottles.length - 1; k >= 0; k--) {
if (bottles[k] && bottles[j] && Math.hypot(bottles[k].x - bottles[j].x, bottles[k].y - bottles[j].y) < 200) {
bottles[k].destroy();
bottles.splice(k, 1);
}
}
// Show game over screen
var gameOverScreen = new GameOverScreen();
game.addChild(gameOverScreen);
// Update final score text
if (finalScoreText) {
finalScoreText.setText('Final Score: ' + LK.getScore());
}
// Reset score and timer
score = 0;
LK.setScore(score);
scoreTxt.setText(score);
gameStartTime = Date.now();
bombActive = false;
}
// Update score
if (bottles[j] instanceof SuperBottle) {
score += 50;
} else {
score += 1;
}
bottlesHit += 1;
// Removed bomb creation logic
LK.setScore(score);
scoreTxt.setText(score);
LK.getSound('glass').play();
// Destroy bottle and stone
if (bottles[j]) {
bottles[j].destroy();
bottles.splice(j, 1);
}
stones[i].destroy();
stones.splice(i, 1);
goldenBottleSpawned = false;
// Create a new bottle
createBottle();
break;
}
}
// Destroy stones that are off screen
if (stones[i] && stones[i].y < -50) {
stones[i].destroy();
stones.splice(i, 1);
}
}
// Update powerups
for (var k = powerups.length - 1; k >= 0; k--) {
powerups[k].update();
}
// Update timer text
var elapsedTime = Math.floor((Date.now() - gameStartTime) / 1000);
timerTxt.setText(formatTime(elapsedTime));
};
var lastStoneThrowTime = 0;
// Initialize timer text
var timerTxt = new Text2('0:00', {
size: 100,
fill: "#ffffff"
});
timerTxt.anchor.set(0, 0); // Set anchor to the top-left corner
timerTxt.x = 20; // Position it with some padding from the top-left corner
timerTxt.y = 150;
LK.gui.topLeft.addChild(timerTxt);
// Function to format time in minutes and seconds
function formatTime(seconds) {
var minutes = Math.floor(seconds / 60);
var remainingSeconds = seconds % 60;
return "".concat(minutes, ":").concat(remainingSeconds < 10 ? '0' : '').concat(remainingSeconds);
}
// Initialize game start time
var gameStartTime = Date.now();
// Removed bombActive variable initialization
2d stone transparent background. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
Shop icon in a square box. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
golden bottle transparent background. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
shopmenu transparent background. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
dark wooden floor. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
2x points buff. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
bomb transparent background. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.