/**** * Classes ****/ var Arrow = Container.expand(function () { var self = Container.call(this); var arrowGraphics = self.attachAsset('Arrow', { anchorX: 0.5, anchorY: 0.5 }); self.getNearestChest = function () { var nearestChest = null; var nearestDistance = Infinity; chests.forEach(function (chest) { var dx = chest.x - self.x; var dy = chest.y - self.y; var distance = Math.sqrt(dx * dx + dy * dy); if (distance < nearestDistance) { nearestChest = chest; nearestDistance = distance; } }); return nearestChest; }; }); var Chest = Container.expand(function () { var self = Container.call(this); var chestGraphics = self.attachAsset('Chest', { anchorX: 0.5, anchorY: 0.9, alpha: 0 }); self.down = function (x, y, obj) { self.destroy(); var chestOpen = game.addChild(new ChestOpen()); chestOpen.x = self.x; chestOpen.y = self.y; chestsOpened++; LK.setScore(LK.getScore() + 6); scoreTxt.setText(LK.getScore().toString()); for (var i = 0; i < 50 * (2 + chestsOpened); i++) { var coin = game.addChild(new Coin()); coin.x = self.x - Math.random() * 1; coin.y = self.y - Math.random() * 1; coin.speedY = -40 + Math.random() * 5; coin.speedX = 10 - Math.random() * 20; } if (chestsOpened >= 3) { LK.getSound('solemn_music').play(); LK.setTimeout(function () { LK.showGameOver(); }, 5000); } else { LK.getSound('ChestOpenSound').play(); } }; }); var ChestOpen = Container.expand(function () { var self = Container.call(this); var chestOpenGraphics = self.attachAsset('ChestOpen', { anchorX: 0.5, anchorY: 0.95 }); }); var Coin = Container.expand(function () { var self = Container.call(this); var coinGraphics = self.attachAsset('Coin', { anchorX: 0.5, anchorY: 0.5 }); self.speedX = 0; self.speedY = 0; self.gravity = 1; self.update = function () { self.y += self.speedY; self.speedY += self.gravity; self.x += self.speedX; if (self.y > 2732) { self.destroy(); } }; }); var Cursor = Container.expand(function () { var self = Container.call(this); var cursorGraphics = self.attachAsset('Cursor', { anchorX: 0.5, anchorY: 0.5 }); }); var EnvironmentFlower = Container.expand(function () { var self = Container.call(this); var flowerGraphics = self.attachAsset('EnvironmentFlower', { anchorX: 0.5, anchorY: 1 }); self.isTooClose = function (x, y) { var tooClose = false; game.children.forEach(function (child) { var dx = child.x - x; var dy = child.y - y; var distance = Math.sqrt(dx * dx + dy * dy); if (distance < 100) { tooClose = true; } }); return tooClose; }; self.down = function (x, y, obj) { var arrow = game.addChild(new Arrow()); arrow.x = self.x; arrow.y = self.y; // Get the nearest chest var nearestChest = arrow.getNearestChest(); // Calculate the angle between the arrow and the nearest chest var dx = nearestChest.x - self.x; var dy = nearestChest.y - self.y; var angle = Math.atan2(dy, dx); // Rotate the arrow to face the nearest chest arrow.rotation = angle; // 33% chance to create a coin and increase the score by 1 if (Math.random() < 0.33) { var coin = game.addChild(new Coin()); coin.x = self.x; coin.y = self.y; coin.speedX = -10 + Math.random() * 20; coin.speedY = -40 + Math.random() * 10; // Set the vertical speed to -40 to make the coin fly upwards LK.setScore(LK.getScore() + 1); scoreTxt.setText(LK.getScore().toString()); } self.destroy(); }; }); var Pit = Container.expand(function () { var self = Container.call(this); var pitGraphics = self.attachAsset('pit', { anchorX: 0.5, anchorY: 0.5 }); }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x228B22 }); /**** * Game Code ****/ for (var i = 0; i < 40; i++) { var flower = new EnvironmentFlower(); var x, y; do { x = Math.random() * 2048; y = Math.random() * 2732; } while (flower.isTooClose(x, y)); flower.x = x; flower.y = y; game.addChild(flower); } var chests = []; var chestsOpened = 0; for (var i = 0; i < 3; i++) { var chest = game.addChild(new Chest()); var x, y; do { x = Math.random() * 2048; y = Math.random() * 2732; } while (isTooCloseToFlower(x, y)); chest.x = x; chest.y = y; chests.push(chest); } function isTooCloseToFlower(x, y) { var tooClose = false; game.children.forEach(function (child) { if (child instanceof EnvironmentFlower) { var dx = child.x - x; var dy = child.y - y; var distance = Math.sqrt(dx * dx + dy * dy); if (distance < 33) { tooClose = true; } } }); return tooClose; } var cursor = new Cursor(); game.addChild(cursor); game.move = function (x, y, obj) { cursor.x = x; cursor.y = y; game.setChildIndex(cursor, game.children.length - 1); }; // Initialize the score LK.setScore(7); // Create a text object to display the score var scoreTxt = new Text2(LK.getScore().toString(), { size: 100, fill: "#ffffff" }); // Set the anchor to the center of the top edge of the text scoreTxt.anchor.set(0.5, 0); // Add the score text to the GUI overlay at the top-center of the screen LK.gui.top.addChild(scoreTxt); game.down = function (x, y, obj) { // Create a pit at the clicked location var pit = game.addChild(new Pit()); pit.x = x; pit.y = y; // Decrease the score by one LK.setScore(LK.getScore() - 1); // Play a random click sound var clickSounds = ['click', 'click2', 'click3', 'click4', 'click5', 'click6']; var randomSound = clickSounds[Math.floor(Math.random() * clickSounds.length)]; LK.getSound(randomSound).play(); // Update the score text scoreTxt.setText(LK.getScore().toString()); // End the game if the score is less than 0 if (LK.getScore() < 0) { LK.showGameOver(); } };
/****
* Classes
****/
var Arrow = Container.expand(function () {
var self = Container.call(this);
var arrowGraphics = self.attachAsset('Arrow', {
anchorX: 0.5,
anchorY: 0.5
});
self.getNearestChest = function () {
var nearestChest = null;
var nearestDistance = Infinity;
chests.forEach(function (chest) {
var dx = chest.x - self.x;
var dy = chest.y - self.y;
var distance = Math.sqrt(dx * dx + dy * dy);
if (distance < nearestDistance) {
nearestChest = chest;
nearestDistance = distance;
}
});
return nearestChest;
};
});
var Chest = Container.expand(function () {
var self = Container.call(this);
var chestGraphics = self.attachAsset('Chest', {
anchorX: 0.5,
anchorY: 0.9,
alpha: 0
});
self.down = function (x, y, obj) {
self.destroy();
var chestOpen = game.addChild(new ChestOpen());
chestOpen.x = self.x;
chestOpen.y = self.y;
chestsOpened++;
LK.setScore(LK.getScore() + 6);
scoreTxt.setText(LK.getScore().toString());
for (var i = 0; i < 50 * (2 + chestsOpened); i++) {
var coin = game.addChild(new Coin());
coin.x = self.x - Math.random() * 1;
coin.y = self.y - Math.random() * 1;
coin.speedY = -40 + Math.random() * 5;
coin.speedX = 10 - Math.random() * 20;
}
if (chestsOpened >= 3) {
LK.getSound('solemn_music').play();
LK.setTimeout(function () {
LK.showGameOver();
}, 5000);
} else {
LK.getSound('ChestOpenSound').play();
}
};
});
var ChestOpen = Container.expand(function () {
var self = Container.call(this);
var chestOpenGraphics = self.attachAsset('ChestOpen', {
anchorX: 0.5,
anchorY: 0.95
});
});
var Coin = Container.expand(function () {
var self = Container.call(this);
var coinGraphics = self.attachAsset('Coin', {
anchorX: 0.5,
anchorY: 0.5
});
self.speedX = 0;
self.speedY = 0;
self.gravity = 1;
self.update = function () {
self.y += self.speedY;
self.speedY += self.gravity;
self.x += self.speedX;
if (self.y > 2732) {
self.destroy();
}
};
});
var Cursor = Container.expand(function () {
var self = Container.call(this);
var cursorGraphics = self.attachAsset('Cursor', {
anchorX: 0.5,
anchorY: 0.5
});
});
var EnvironmentFlower = Container.expand(function () {
var self = Container.call(this);
var flowerGraphics = self.attachAsset('EnvironmentFlower', {
anchorX: 0.5,
anchorY: 1
});
self.isTooClose = function (x, y) {
var tooClose = false;
game.children.forEach(function (child) {
var dx = child.x - x;
var dy = child.y - y;
var distance = Math.sqrt(dx * dx + dy * dy);
if (distance < 100) {
tooClose = true;
}
});
return tooClose;
};
self.down = function (x, y, obj) {
var arrow = game.addChild(new Arrow());
arrow.x = self.x;
arrow.y = self.y;
// Get the nearest chest
var nearestChest = arrow.getNearestChest();
// Calculate the angle between the arrow and the nearest chest
var dx = nearestChest.x - self.x;
var dy = nearestChest.y - self.y;
var angle = Math.atan2(dy, dx);
// Rotate the arrow to face the nearest chest
arrow.rotation = angle;
// 33% chance to create a coin and increase the score by 1
if (Math.random() < 0.33) {
var coin = game.addChild(new Coin());
coin.x = self.x;
coin.y = self.y;
coin.speedX = -10 + Math.random() * 20;
coin.speedY = -40 + Math.random() * 10; // Set the vertical speed to -40 to make the coin fly upwards
LK.setScore(LK.getScore() + 1);
scoreTxt.setText(LK.getScore().toString());
}
self.destroy();
};
});
var Pit = Container.expand(function () {
var self = Container.call(this);
var pitGraphics = self.attachAsset('pit', {
anchorX: 0.5,
anchorY: 0.5
});
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x228B22
});
/****
* Game Code
****/
for (var i = 0; i < 40; i++) {
var flower = new EnvironmentFlower();
var x, y;
do {
x = Math.random() * 2048;
y = Math.random() * 2732;
} while (flower.isTooClose(x, y));
flower.x = x;
flower.y = y;
game.addChild(flower);
}
var chests = [];
var chestsOpened = 0;
for (var i = 0; i < 3; i++) {
var chest = game.addChild(new Chest());
var x, y;
do {
x = Math.random() * 2048;
y = Math.random() * 2732;
} while (isTooCloseToFlower(x, y));
chest.x = x;
chest.y = y;
chests.push(chest);
}
function isTooCloseToFlower(x, y) {
var tooClose = false;
game.children.forEach(function (child) {
if (child instanceof EnvironmentFlower) {
var dx = child.x - x;
var dy = child.y - y;
var distance = Math.sqrt(dx * dx + dy * dy);
if (distance < 33) {
tooClose = true;
}
}
});
return tooClose;
}
var cursor = new Cursor();
game.addChild(cursor);
game.move = function (x, y, obj) {
cursor.x = x;
cursor.y = y;
game.setChildIndex(cursor, game.children.length - 1);
};
// Initialize the score
LK.setScore(7);
// Create a text object to display the score
var scoreTxt = new Text2(LK.getScore().toString(), {
size: 100,
fill: "#ffffff"
});
// Set the anchor to the center of the top edge of the text
scoreTxt.anchor.set(0.5, 0);
// Add the score text to the GUI overlay at the top-center of the screen
LK.gui.top.addChild(scoreTxt);
game.down = function (x, y, obj) {
// Create a pit at the clicked location
var pit = game.addChild(new Pit());
pit.x = x;
pit.y = y;
// Decrease the score by one
LK.setScore(LK.getScore() - 1);
// Play a random click sound
var clickSounds = ['click', 'click2', 'click3', 'click4', 'click5', 'click6'];
var randomSound = clickSounds[Math.floor(Math.random() * clickSounds.length)];
LK.getSound(randomSound).play();
// Update the score text
scoreTxt.setText(LK.getScore().toString());
// End the game if the score is less than 0
if (LK.getScore() < 0) {
LK.showGameOver();
}
};