User prompt
Fix Bug: 'Uncaught TypeError: LK.initGame is not a function' in or related to this line: 'LK.initGame({' Line Number: 187
User prompt
Fix Bug: 'Uncaught TypeError: LK.init is not a function' in or related to this line: 'LK.init({' Line Number: 187
Code edit (1 edits merged)
Please save this source code
User prompt
Fix Bug: 'Uncaught TypeError: LK.Point is not a constructor' in or related to this line: 'self.anchor = new LK.Point();' Line Number: 94
User prompt
Fix Bug: 'Uncaught TypeError: Point is not a constructor' in or related to this line: 'self.anchor = new Point();' Line Number: 94
User prompt
Fix Bug: 'Uncaught TypeError: Cannot read properties of undefined (reading 'set')' in or related to this line: 'difficultyButton.anchor.set(0.5, 0.5);' Line Number: 204
User prompt
Fix Bug: 'Uncaught TypeError: Point is not a constructor' in or related to this line: 'buttonText.anchor = new Point(0.5, 0.5);' Line Number: 89
User prompt
Fix Bug: 'Uncaught TypeError: Cannot read properties of undefined (reading 'set')' in or related to this line: 'difficultyButton.anchor.set(0.5, 0.5);' Line Number: 204
User prompt
Fix Bug: 'Uncaught TypeError: Cannot read properties of undefined (reading 'set')' in or related to this line: 'difficultyButton.anchor.set(0.5, 0.5);' Line Number: 203
User prompt
Fix Bug: 'ReferenceError: difficultyText is not defined' in or related to this line: 'var difficultyButton = new Button(difficultyText, container.width / 2, titleText.height + 50, function () {' Line Number: 381
User prompt
Fix Bug: 'ReferenceError: container is not defined' in or related to this line: 'container.addChild(titleText);' Line Number: 379
User prompt
Fix Bug: 'TypeError: game.clearChildren is not a function' in or related to this line: 'game.clearChildren();' Line Number: 199
User prompt
Fix Bug: 'TypeError: game.removeAllChildren is not a function' in or related to this line: 'game.removeAllChildren();' Line Number: 199
User prompt
Fix Bug: 'TypeError: game.clearChildren is not a function' in or related to this line: 'game.clearChildren();' Line Number: 199
User prompt
Fix Bug: 'Uncaught TypeError: LK.hideLoader is not a function' in or related to this line: 'LK.hideLoader();' Line Number: 403
User prompt
Fix Bug: 'Uncaught TypeError: LK.showMenuPage is not a function' in or related to this line: 'LK.showMenuPage(easyMenuPage);' Line Number: 401
User prompt
Fix Bug: 'Uncaught TypeError: LK.hideMenuPage is not a function' in or related to this line: 'LK.hideMenuPage(container);' Line Number: 209
User prompt
Fix Bug: 'Uncaught TypeError: LK.hideMenuPage is not a function' in or related to this line: 'LK.hideMenuPage(container);' Line Number: 209
User prompt
Fix Bug: 'Uncaught TypeError: Cannot read properties of undefined (reading 'set')' in or related to this line: 'difficultyButton.anchor.set(0.5, 0);' Line Number: 203
User prompt
Fix Bug: 'Uncaught TypeError: Cannot read properties of undefined (reading 'set')' in or related to this line: 'difficultyButton.anchor.set(0.5, 0);' Line Number: 201
User prompt
Fix Bug: 'Uncaught TypeError: Cannot read properties of undefined (reading 'set')' in or related to this line: 'difficultyButton.anchor.set(0.5, 0);' Line Number: 202
User prompt
Fix Bug: 'Uncaught TypeError: Cannot read properties of undefined (reading 'set')' in or related to this line: 'this.anchor.set(0.5, 0.5);' Line Number: 89
User prompt
Fix Bug: 'Uncaught TypeError: Cannot read properties of undefined (reading 'set')' in or related to this line: 'difficultyButton.anchor.set(0.5, 0);' Line Number: 201
User prompt
Fix Bug: 'Uncaught TypeError: Cannot read properties of undefined (reading 'set')' in or related to this line: 'difficultyButton.anchor.set(0.5, 0);' Line Number: 201
User prompt
Fix Bug: 'Uncaught ReferenceError: createMenuPage is not defined' in or related to this line: 'createMenuPage(self, 'Easy', 'easy', '#00ff00');' Line Number: 159
/****
* Classes
****/
// BulletPack class
var BulletPack = Container.expand(function () {
var self = Container.call(this);
var bulletPackGraphics = self.attachAsset('bulletPack', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 4;
self.direction = Math.random() < 0.5 ? -1 : 1;
self.move = function () {
var speedIncreaseFactor = 0.1 + LK.ticks * 0.0002;
self.y += self.speed + speedIncreaseFactor;
self.x += self.direction * (10 + speedIncreaseFactor);
if (self.x < 0 || self.x > game.width) {
self.direction *= -1;
}
};
});
// Character class
var Hero = Container.expand(function () {
var self = Container.call(this);
var heroGraphics = self.attachAsset('hero', {
anchorX: 0.5,
anchorY: 0.5
});
self.bulletLimit = difficulty === 'medium' ? 3 : 5; // Initialize bullet limit based on difficulty
self.bulletsInPlay = 0; // Track bullets currently in play
self.canShoot = true; // Allow shooting initially
self.update = function () {
// Hero update logic
};
self.shoot = function () {
if (this.bulletLimit > 0 && this.canShoot) {
var bullet = new Bullet();
bullet.x = this.x;
bullet.y = this.y - this.height / 2;
heroBullets.push(bullet);
game.addChild(bullet);
this.bulletsInPlay++; // Increment bullets in play
this.bulletLimit--;
bulletCountTxt.setText('Bullets: ' + this.bulletLimit); // Update bullet count display
this.canShoot = false; // Set shooting cooldown
LK.setTimeout(function () {
self.canShoot = true;
}, 500); // Cooldown of 500ms before next shot
}
};
});
// Bullet class
var Bullet = Container.expand(function () {
var self = Container.call(this);
var bulletGraphics = self.attachAsset('Bullet', {
anchorX: 0.0625,
anchorY: 0.0625
});
self.speed = -10;
self.move = function () {
self.y += self.speed;
};
});
// Enemy class
var Enemy = Container.expand(function () {
var self = Container.call(this);
var enemyGraphics = self.attachAsset('enemy', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 4;
self.direction = Math.random() < 0.5 ? -1 : 1;
self.move = function () {
self.y += self.speed;
var speedIncreaseFactor = 0.1 + LK.ticks * 0.0002; // Increase the speed factor over time
self.x += self.direction * (4 + speedIncreaseFactor);
if (self.x < 0 || self.x > game.width) {
self.direction *= -1;
}
self.speed += difficulty === 'easy' ? 0.01 + LK.ticks * 0.00005 : difficulty === 'medium' ? 0.02 + LK.ticks * 0.0001 : 0.03 + LK.ticks * 0.00015; // Increase speed over time with an accelerating factor based on difficulty
};
});
var Button = Container.expand(function (text, positionX, positionY, onClickCallback) {
var self = Container.call(this);
var buttonText = new Text2(text, {
size: 200,
fill: "#ffffff"
});
buttonText.anchor.set(0.5);
self.addChild(buttonText);
self.x = positionX;
self.y = positionY;
self.interactive = true;
self.on('down', function (obj) {
var event = obj.event;
var pos = event.getLocalPosition(game);
if (self.containsPoint(pos)) {
self.alpha = 0.5;
onClickCallback();
}
});
self.on('up', function (obj) {
self.alpha = 1.0;
});
self.containsPoint = function (point) {
return point.x >= self.x - self.width / 2 && point.x <= self.x + self.width / 2 && point.y >= self.y - self.height / 2 && point.y <= self.y + self.height / 2;
};
});
// JoystickAsset class
var JoystickAsset = Container.expand(function () {
var self = Container.call(this);
self.interactive = true;
self.isDragging = false;
self.onMoveCallback = null;
self.setMoveCallback = function (callback) {
self.onMoveCallback = function (direction) {
callback({
x: direction.x,
y: 0
});
};
};
self.on('down', function (obj) {
self.isDragging = true;
});
self.on('up', function (obj) {
self.isDragging = false;
stickGraphics.x = stickOrigin.x;
stickGraphics.y = stickOrigin.y;
if (self.onMoveCallback) {
self.onMoveCallback({
x: 0,
y: 0
});
}
});
self.on('move', function (obj) {
if (self.isDragging) {
var event = obj.event;
var pos = event.getLocalPosition(self);
var dx = pos.x - stickOrigin.x;
var maxDistance = stickGraphics.width * 0.5;
if (Math.abs(dx) > maxDistance) {
dx = maxDistance * (dx > 0 ? 1 : -1);
}
stickGraphics.x = stickOrigin.x + dx;
stickGraphics.y = stickOrigin.y;
if (self.onMoveCallback) {
self.onMoveCallback({
x: dx / maxDistance,
y: 0
});
}
}
});
});
var EasyMenuPage = Container.expand(function () {
var self = Container.call(this);
createMenuPage(self, 'Easy', 'easy', '#00ff00');
});
var MediumMenuPage = Container.expand(function () {
var self = Container.call(this);
createMenuPage(self, 'Medium', 'medium', '#ffff00');
});
var HardMenuPage = Container.expand(function () {
var self = Container.call(this);
createMenuPage(self, 'Hard', 'hard', '#ff0000');
});
/****
* Initialize Game
****/
// Default difficulty setting
var game = new LK.Game({
title: '(WIP)',
backgroundColor: 0x000000 // Init game with black background
});
/****
* Game Code
****/
var heroBullets = [];
var bulletPacks = []; // Declare bulletPacks array in the global scope
var bulletCountTxt; // Declare bulletCountTxt in the global scope
function createMenuPage(container, difficultyText, difficultyLevel, color) {
// Create title text
var titleText = new Text2('Select Difficulty', {
size: 100,
fill: "#ffffff"
});
titleText.anchor.set(0.5, 0);
container.addChild(titleText);
// Create difficulty button
var difficultyButton = new Button(difficultyText, container.width / 2, titleText.height + 50, function () {
// Set difficulty and start the game
difficulty = difficultyLevel;
game.clearChildren();
initializeGame();
LK.hideMenuPage(container);
});
difficultyButton.anchor.set(0.5, 0);
container.addChild(difficultyButton);
// Set background color
container.backgroundColor = color;
// Hide the page initially
LK.hideMenuPage(container);
}
function initializeGame() {
// Initialize important asset arrays
var enemies = [];
// Create character
var hero = game.addChild(new Hero());
hero.x = game.width / 2;
hero.y = game.height - 100;
// Create score display
var scoreTxt = new Text2('Score: 0', {
size: 50,
fill: "#ffffff"
});
var highScoreTxt = new Text2('High Score: 0 (WIP)', {
size: 50,
fill: "#ffffff"
});
scoreTxt.anchor.set(1, 0);
highScoreTxt.anchor.set(1, 0);
highScoreTxt.y = scoreTxt.height + 20;
LK.gui.topRight.addChild(scoreTxt);
LK.gui.topRight.addChild(highScoreTxt);
// Create bullet count display
bulletCountTxt = new Text2('Bullets: ' + (difficulty === 'medium' ? 3 : 5), {
size: 100,
fill: "#ffffff"
});
bulletCountTxt.anchor.set(0, 0);
bulletCountTxt.y = scoreTxt.height + 50; // Position below the score display
LK.gui.topLeft.addChild(bulletCountTxt);
// Create instructions display
var instructionsTxt = new Text2('Tap anywhere to shoot', {
size: 50,
fill: "#ffffff"
});
instructionsTxt.anchor.set(0, 0);
LK.gui.topLeft.addChild(instructionsTxt);
// Create a red line 3/4 down the screen
var redLine = LK.getAsset('redLine', {});
redLine.width = game.width;
redLine.height = 5;
redLine.y = game.height * 0.75;
game.addChild(redLine);
// Create joystick instance
var joystick = new JoystickAsset();
joystick.x = joystick.width / 2 + 150;
joystick.y = game.height - joystick.height / 2 - 150;
joystick.setMoveCallback(function (direction) {
hero.x = Math.max(hero.width / 2, Math.min(game.width - hero.width / 2, hero.x + direction.x * 10));
});
game.addChild(joystick);
// Handle hero dragging
var dragNode = null;
game.on('down', function (obj) {
hero.shoot();
});
game.on('move', function (obj) {
var event = obj.event;
var pos = event.getLocalPosition(game);
hero.x = pos.x;
});
// Global event listener for shooting bullets
// Game tick event
LK.on('tick', function () {
// Update character
hero.update();
// Move and check bullets
for (var i = heroBullets.length - 1; i >= 0; i--) {
var bullet = heroBullets[i];
bullet.move();
// Check for bullet collision with enemies
for (var j = enemies.length - 1; j >= 0; j--) {
if (bullet.intersects(enemies[j])) {
// Update score
var newScore = LK.getScore() + 1;
LK.setScore(newScore);
scoreTxt.setText('Score: ' + newScore);
var highScore = Math.max(newScore, Number((typeof localStorage !== 'undefined' ? localStorage.getItem('highScore') : '0') || '0'));
highScoreTxt.setText('High Score: ' + highScore + ' (WIP)');
if (typeof localStorage !== 'undefined') {
localStorage.setItem('highScore', highScore);
}
// Increment character's bullet limit
hero.bulletLimit++;
bulletCountTxt.setText('Bullets: ' + hero.bulletLimit); // Update bullet count display
// Destroy enemy and bullet
enemies[j].destroy();
enemies.splice(j, 1);
bullet.destroy();
heroBullets.splice(i, 1);
break;
}
}
// Check for bullet collision with bullet packs
for (var k = bulletPacks.length - 1; k >= 0; k--) {
if (bullet.intersects(bulletPacks[k])) {
// Increment character's bullet limit by 5
hero.bulletLimit += 5;
bulletCountTxt.setText('Bullets: ' + hero.bulletLimit); // Update bullet count display
// Destroy bullet pack and bullet
bulletPacks[k].destroy();
bulletPacks.splice(k, 1);
bullet.destroy();
heroBullets.splice(i, 1);
break;
}
}
// Remove off-screen bullets and end the game if it's the last one
if (bullet.y < 0) {
bullet.destroy();
heroBullets.splice(i, 1);
if (heroBullets.length === 0 && hero.bulletLimit === 0) {
LK.showGameOver(); // End the game when the last bullet is out of frame
}
}
}
// Move and check enemies
for (var i = enemies.length - 1; i >= 0; i--) {
var enemy = enemies[i];
enemy.move();
// Check for collision with the hero
if (hero.intersects(enemy)) {
LK.showGameOver();
return; // Stop processing further updates if there's a collision with the hero
}
// Remove off-screen enemies
if (enemy.y > game.height) {
enemy.destroy();
enemies.splice(i, 1);
}
}
// Move and check bullet packs
for (var i = bulletPacks.length - 1; i >= 0; i--) {
var bulletPack = bulletPacks[i];
bulletPack.move();
// Remove off-screen bullet packs
if (bulletPack.y > game.height) {
bulletPack.destroy();
bulletPacks.splice(i, 1);
}
}
// Spawn enemies randomly
if (Math.random() < 0.02) {
var enemy = new Enemy();
enemy.x = Math.random() * game.width;
enemy.y = -100;
enemies.push(enemy);
game.addChild(enemy);
}
});
// Spawn bullet packs randomly
if (Math.random() < 0.01) {
var bulletPack = new BulletPack();
bulletPack.x = Math.random() * game.width;
bulletPack.y = -100;
bulletPacks.push(bulletPack);
game.addChild(bulletPack);
}
// End of 'tick' event listener
// End of initializeGame function
function createMenuPage(container, difficultyText, difficultyLevel, color) {
// ... (previous code)
}
// Create title text
var titleText = new Text2('Select Difficulty', {
size: 100,
fill: "#ffffff"
});
titleText.anchor.set(0.5, 0);
container.addChild(titleText);
// Create difficulty button
var difficultyButton = new Button(difficultyText, container.width / 2, titleText.height + 50, function () {
// Set difficulty and start the game
difficulty = difficultyLevel;
game.clearChildren();
initializeGame();
LK.hideMenuPage(container);
});
difficultyButton.anchor.set(0.5, 0);
container.addChild(difficultyButton);
// Set background color
container.backgroundColor = color;
// Hide the page initially
LK.hideMenuPage(container);
}
// Initial setup
var difficulty = null;
// Show menu pages
var easyMenuPage = new EasyMenuPage();
var mediumMenuPage = new MediumMenuPage();
var hardMenuPage = new HardMenuPage();
LK.showMenuPage(easyMenuPage);
// Hide loader
LK.hideLoader();
android. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
letter X png. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
space background. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
galaxy background. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
galaxy background. High quality
space background.. High contrast