/**** * Classes ****/ // Define the CloseRangeMonster class var CloseRangeMonster = Container.expand(function () { var self = Container.call(this); var monsterGraphics = self.attachAsset('monster', { anchorX: 0.5, anchorY: 0.5, scaleX: 2, scaleY: 2 }); self.speed = 3; self.update = function () { // Close range monster update logic }; }); var Ghost = Container.expand(function () { var self = Container.call(this); var ghostGraphics = self.attachAsset('ghost', { anchorX: 0.5, anchorY: 0.5, scaleX: 2, scaleY: 2 }); self.speed = 3; self.update = function () { // Ghost update logic }; }); var LongRangeMonster = Container.expand(function () { var self = Container.call(this); var monsterGraphics = self.attachAsset('monster', { anchorX: 0.5, anchorY: 0.5, scaleX: 2, scaleY: 2 }); self.speed = 2; self.update = function () { // Long range monster update logic }; }); var Player = Container.expand(function () { var self = Container.call(this); var playerGraphics = self.attachAsset('player', { anchorX: 0.5, anchorY: 0.5, scaleX: 2, scaleY: 2 }); self.speed = 5; self.weapon = new Weapon(); // Add a weapon property for the player self.life = 100; // Add a life property for the player self.superPower = false; // Add a super power property for the player self.healthBar = LK.getAsset('healthBar', { // Add a health bar for the player anchorX: 0.5, anchorY: 0.5, scaleX: 2, scaleY: 2 }); self.addChild(self.healthBar); self.update = function () { // Player update logic if (self.weapon) { self.weapon.update(); // Check if the weapon intersects with any monster closeRangeMonsters.forEach(function (monster) { if (self.weapon.intersects(monster)) { // Decrease monster's life monster.life -= self.weapon.damage; // If monster's life is less than or equal to 0, remove the monster if (monster.life <= 0) { game.removeChild(monster); var index = closeRangeMonsters.indexOf(monster); if (index > -1) { closeRangeMonsters.splice(index, 1); } } } }); longRangeMonsters.forEach(function (monster) { if (self.weapon.intersects(monster)) { // Decrease monster's life monster.life -= self.weapon.damage; // If monster's life is less than or equal to 0, remove the monster if (monster.life <= 0) { game.removeChild(monster); var index = longRangeMonsters.indexOf(monster); if (index > -1) { longRangeMonsters.splice(index, 1); } } } }); } self.healthBar.scaleX = self.life / 100; // Update the health bar according to the player's life if (self.superPower) { // Super power logic } }; }); // Define the Puzzle class var Puzzle = Container.expand(function () { var self = Container.call(this); var puzzleGraphics = self.attachAsset('puzzle', { anchorX: 0.5, anchorY: 0.5 }); self.solved = false; self.solve = function () { self.solved = true; // Puzzle solve logic }; }); // Define the Weapon class var Weapon = Container.expand(function () { var self = Container.call(this); self.damage = 10; // Damage that the weapon can cause self.update = function () { // Weapon update logic }; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x000000 //Init game with black background }); /**** * Game Code ****/ var background = game.addChild(LK.getAsset('background', { anchorX: 0.0, anchorY: 0.0, x: 0, y: 0 })); // Play the terrible song LK.playMusic('terribleSong', { loop: true }); // Initialize maze var maze = LK.getAsset('maze', { anchorX: 0.0, anchorY: 0.0, x: 0, y: 0 }); game.addChild(maze); // Define maze boundaries var mazeBoundaries = { left: 100, right: 1948, top: 100, bottom: 2632 }; // Check if player exits the maze function checkPlayerExit() { if (player.x > mazeBoundaries.right || player.x < mazeBoundaries.left || player.y > mazeBoundaries.bottom || player.y < mazeBoundaries.top) { LK.showGameOver(); // Using showGameOver as a placeholder for win screen } } var emptyItems = []; var player = game.addChild(new Player()); player.x = 1024; // Center horizontally player.y = 1366; // Center vertically for (var i = 0; i < 5; i++) { var emptyItem = LK.getAsset('emptyItem', { anchorX: 0.5, anchorY: 0.5, x: Math.random() * 2048, y: Math.random() * 2732 }); emptyItems.push(emptyItem); game.addChild(emptyItem); } // Check if player exits the maze checkPlayerExit(); var closeRangeMonsters = []; for (var i = 0; i < 1; i++) { var closeRangeMonster = new CloseRangeMonster(); closeRangeMonster.x = Math.random() * 2048; closeRangeMonster.y = Math.random() * 2732; closeRangeMonsters.push(closeRangeMonster); game.addChild(closeRangeMonster); } var longRangeMonsters = []; for (var i = 0; i < 2; i++) { var longRangeMonster = new LongRangeMonster(); longRangeMonster.x = Math.random() * 2048; longRangeMonster.y = Math.random() * 2732; longRangeMonsters.push(longRangeMonster); game.addChild(longRangeMonster); } var puzzles = []; for (var i = 0; i < 3; i++) { var puzzle = new Puzzle(); puzzle.x = Math.random() * 2048; puzzle.y = Math.random() * 2732; puzzles.push(puzzle); game.addChild(puzzle); } // Handle player movement game.down = function (x, y, obj) { var targetX = x; var targetY = y; var angle = Math.atan2(targetY - player.y, targetX - player.x); player.vx = player.speed * Math.cos(angle); player.vy = player.speed * Math.sin(angle); }; game.up = function (x, y, obj) { player.vx = 0; player.vy = 0; }; // Update game logic game.update = function () { // Update player position player.x += player.vx; player.y += player.vy; // Increase player speed every 10 seconds if (LK.ticks % 600 == 0) { player.speed += 1; } // Check if player exits the maze checkPlayerExit(); // Update ghosts closeRangeMonsters.forEach(function (monster) { var angle = Math.atan2(player.y - monster.y, player.x - monster.x); monster.x += monster.speed * Math.cos(angle); monster.y += monster.speed * Math.sin(angle); // Check collision with player if (player.intersects(monster)) { LK.effects.flashScreen(0xff0000, 1000); LK.showGameOver(); } }); longRangeMonsters.forEach(function (monster) { var angle = Math.atan2(player.y - monster.y, player.x - monster.x); monster.x += monster.speed * Math.cos(angle); monster.y += monster.speed * Math.sin(angle); // Check collision with player if (player.intersects(monster)) { LK.effects.flashScreen(0xff0000, 1000); LK.showGameOver(); } }); // Check puzzles puzzles.forEach(function (puzzle) { if (!puzzle.solved && player.intersects(puzzle)) { puzzle.solve(); // Update score or game state } }); };
/****
* Classes
****/
// Define the CloseRangeMonster class
var CloseRangeMonster = Container.expand(function () {
var self = Container.call(this);
var monsterGraphics = self.attachAsset('monster', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 2,
scaleY: 2
});
self.speed = 3;
self.update = function () {
// Close range monster update logic
};
});
var Ghost = Container.expand(function () {
var self = Container.call(this);
var ghostGraphics = self.attachAsset('ghost', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 2,
scaleY: 2
});
self.speed = 3;
self.update = function () {
// Ghost update logic
};
});
var LongRangeMonster = Container.expand(function () {
var self = Container.call(this);
var monsterGraphics = self.attachAsset('monster', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 2,
scaleY: 2
});
self.speed = 2;
self.update = function () {
// Long range monster update logic
};
});
var Player = Container.expand(function () {
var self = Container.call(this);
var playerGraphics = self.attachAsset('player', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 2,
scaleY: 2
});
self.speed = 5;
self.weapon = new Weapon(); // Add a weapon property for the player
self.life = 100; // Add a life property for the player
self.superPower = false; // Add a super power property for the player
self.healthBar = LK.getAsset('healthBar', {
// Add a health bar for the player
anchorX: 0.5,
anchorY: 0.5,
scaleX: 2,
scaleY: 2
});
self.addChild(self.healthBar);
self.update = function () {
// Player update logic
if (self.weapon) {
self.weapon.update();
// Check if the weapon intersects with any monster
closeRangeMonsters.forEach(function (monster) {
if (self.weapon.intersects(monster)) {
// Decrease monster's life
monster.life -= self.weapon.damage;
// If monster's life is less than or equal to 0, remove the monster
if (monster.life <= 0) {
game.removeChild(monster);
var index = closeRangeMonsters.indexOf(monster);
if (index > -1) {
closeRangeMonsters.splice(index, 1);
}
}
}
});
longRangeMonsters.forEach(function (monster) {
if (self.weapon.intersects(monster)) {
// Decrease monster's life
monster.life -= self.weapon.damage;
// If monster's life is less than or equal to 0, remove the monster
if (monster.life <= 0) {
game.removeChild(monster);
var index = longRangeMonsters.indexOf(monster);
if (index > -1) {
longRangeMonsters.splice(index, 1);
}
}
}
});
}
self.healthBar.scaleX = self.life / 100; // Update the health bar according to the player's life
if (self.superPower) {
// Super power logic
}
};
});
// Define the Puzzle class
var Puzzle = Container.expand(function () {
var self = Container.call(this);
var puzzleGraphics = self.attachAsset('puzzle', {
anchorX: 0.5,
anchorY: 0.5
});
self.solved = false;
self.solve = function () {
self.solved = true;
// Puzzle solve logic
};
});
// Define the Weapon class
var Weapon = Container.expand(function () {
var self = Container.call(this);
self.damage = 10; // Damage that the weapon can cause
self.update = function () {
// Weapon update logic
};
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x000000 //Init game with black background
});
/****
* Game Code
****/
var background = game.addChild(LK.getAsset('background', {
anchorX: 0.0,
anchorY: 0.0,
x: 0,
y: 0
}));
// Play the terrible song
LK.playMusic('terribleSong', {
loop: true
});
// Initialize maze
var maze = LK.getAsset('maze', {
anchorX: 0.0,
anchorY: 0.0,
x: 0,
y: 0
});
game.addChild(maze);
// Define maze boundaries
var mazeBoundaries = {
left: 100,
right: 1948,
top: 100,
bottom: 2632
};
// Check if player exits the maze
function checkPlayerExit() {
if (player.x > mazeBoundaries.right || player.x < mazeBoundaries.left || player.y > mazeBoundaries.bottom || player.y < mazeBoundaries.top) {
LK.showGameOver(); // Using showGameOver as a placeholder for win screen
}
}
var emptyItems = [];
var player = game.addChild(new Player());
player.x = 1024; // Center horizontally
player.y = 1366; // Center vertically
for (var i = 0; i < 5; i++) {
var emptyItem = LK.getAsset('emptyItem', {
anchorX: 0.5,
anchorY: 0.5,
x: Math.random() * 2048,
y: Math.random() * 2732
});
emptyItems.push(emptyItem);
game.addChild(emptyItem);
}
// Check if player exits the maze
checkPlayerExit();
var closeRangeMonsters = [];
for (var i = 0; i < 1; i++) {
var closeRangeMonster = new CloseRangeMonster();
closeRangeMonster.x = Math.random() * 2048;
closeRangeMonster.y = Math.random() * 2732;
closeRangeMonsters.push(closeRangeMonster);
game.addChild(closeRangeMonster);
}
var longRangeMonsters = [];
for (var i = 0; i < 2; i++) {
var longRangeMonster = new LongRangeMonster();
longRangeMonster.x = Math.random() * 2048;
longRangeMonster.y = Math.random() * 2732;
longRangeMonsters.push(longRangeMonster);
game.addChild(longRangeMonster);
}
var puzzles = [];
for (var i = 0; i < 3; i++) {
var puzzle = new Puzzle();
puzzle.x = Math.random() * 2048;
puzzle.y = Math.random() * 2732;
puzzles.push(puzzle);
game.addChild(puzzle);
}
// Handle player movement
game.down = function (x, y, obj) {
var targetX = x;
var targetY = y;
var angle = Math.atan2(targetY - player.y, targetX - player.x);
player.vx = player.speed * Math.cos(angle);
player.vy = player.speed * Math.sin(angle);
};
game.up = function (x, y, obj) {
player.vx = 0;
player.vy = 0;
};
// Update game logic
game.update = function () {
// Update player position
player.x += player.vx;
player.y += player.vy;
// Increase player speed every 10 seconds
if (LK.ticks % 600 == 0) {
player.speed += 1;
}
// Check if player exits the maze
checkPlayerExit();
// Update ghosts
closeRangeMonsters.forEach(function (monster) {
var angle = Math.atan2(player.y - monster.y, player.x - monster.x);
monster.x += monster.speed * Math.cos(angle);
monster.y += monster.speed * Math.sin(angle);
// Check collision with player
if (player.intersects(monster)) {
LK.effects.flashScreen(0xff0000, 1000);
LK.showGameOver();
}
});
longRangeMonsters.forEach(function (monster) {
var angle = Math.atan2(player.y - monster.y, player.x - monster.x);
monster.x += monster.speed * Math.cos(angle);
monster.y += monster.speed * Math.sin(angle);
// Check collision with player
if (player.intersects(monster)) {
LK.effects.flashScreen(0xff0000, 1000);
LK.showGameOver();
}
});
// Check puzzles
puzzles.forEach(function (puzzle) {
if (!puzzle.solved && player.intersects(puzzle)) {
puzzle.solve();
// Update score or game state
}
});
};