User prompt
make the button be on the bottom left
User prompt
Fix Bug: 'TypeError: self.containsPoint is not a function' in this line: 'if (self.containsPoint(pos)) {' Line Number: 158
User prompt
Fix Bug: 'TypeError: self.containsPoint is not a function' in this line: 'if (self.containsPoint(pos)) {' Line Number: 157
User prompt
Fix Bug: 'TypeError: self.containsPoint is not a function' in this line: 'if (self.containsPoint(pos)) {' Line Number: 154
User prompt
make button at the bottom of the screen.
User prompt
the hero is above the red line. It is meant to be below the red line
User prompt
move the red line to 5/8 of the screen
User prompt
Fix Bug: 'Uncaught TypeError: Cannot read properties of undefined (reading 'y')' in this line: 'hero.y = redLine.y - hero.height / 2;' Line Number: 187
User prompt
move the hero just below the red line
User prompt
move the hero a bit up
User prompt
move the hero to 0
User prompt
move the hero a bit up
User prompt
Fix Bug: 'Uncaught TypeError: Cannot read properties of undefined (reading 'height')' in this line: 'self.creditTxt.y = highScoreTxt.height * 2 + 40;' Line Number: 147
User prompt
under the high score, add a currency called "Cosmic Credits" which you will get 5 of every time you kill an enemy
User prompt
make the easter egg spawn all the time
User prompt
make the easter egg rarity be the same as the enemy
User prompt
the easter egg might be a bit too rare
User prompt
make easter eggs which the player could find
User prompt
the (WIP) in high score should not disappear when the score count is updated
User prompt
make high score say: High Score (WIP): (whatever the score count is)
User prompt
the '(WIP)' should appear
User prompt
the '(WIP)' in the HighScore should not disappear when the score counter goes up for high score
User prompt
for the high score make it say: High Score (WIP): (whatever the high score is)
User prompt
make the bulletpack gradually move faster as the game progresses
User prompt
the high score should stay when the game ends
/****
* Classes
****/
// BulletPack class
var BulletPack = Container.expand(function () {
var self = Container.call(this);
var bulletPackGraphics = self.createAsset('bulletPack', 'Bullet Pack', 0.5, 0.5);
self.speed = 4;
self.direction = Math.random() < 0.5 ? -1 : 1;
self.move = function () {
self.y += self.speed;
self.x += self.direction * 10;
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.createAsset('hero', 'Hero', 0.5, 0.5);
self.bulletLimit = 3; // Initialize bullet limit
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.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.createAsset('purpleBullet', 'Purple Bullet', 0.0625, 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.createAsset('enemy', 'Enemy character', 0.5, 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 += 0.02 + LK.ticks * 0.0001; // Increase speed over time with an accelerating factor
};
});
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)) {
onClickCallback();
}
});
});
// 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
});
}
}
});
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;
};
});
/****
* Initialize Game
****/
// Create left movement button
var game = new LK.Game({
backgroundColor: 0x000000 // Init game with black background
});
/****
* Game Code
****/
// Initialize important asset arrays
var heroBullets = [];
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', {
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
var bulletCountTxt = new Text2('Bullets: 3', {
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', 'Horizontal Red Line', 0, 0);
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;
// hero.y = pos.y; // Removed the line that sets the hero's y position
});
// 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 and bullet packs
for (var j = enemies.length - 1; j >= 0; j--) {
if (bullet.intersects(enemies[j])) {
if (enemies[j] instanceof BulletPack) {
// If the enemy is a bullet pack
// Increment character's bullet limit by 5
hero.bulletLimit += 5;
} else {
// If the enemy is an actual enemy
// 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);
if (typeof localStorage !== 'undefined' && newScore > highScore) {
localStorage.setItem('highScore', newScore.toString());
}
// Increment character's bullet limit
hero.bulletLimit++;
}
bulletCountTxt.setText('Bullets: ' + hero.bulletLimit); // Update bullet count display
// Destroy enemy/bullet pack and bullet
enemies[j].destroy();
enemies.splice(j, 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 enemies and check if they pass the red line
for (var k = enemies.length - 1; k >= 0; k--) {
enemies[k].move();
if (enemies[k].y > game.height * 0.75) {
enemies[k].destroy();
enemies[k] = null;
enemies.splice(k, 1);
}
}
var enemySpawnRate = 60; // Initialize enemy spawn rate
// Spawn enemies and bullet packs
if (LK.ticks % enemySpawnRate == 0) {
var enemy = new Enemy();
enemy.x = Math.random() * (game.width - enemy.width) + enemy.width / 2;
enemy.y = -enemy.height;
enemies.push(enemy);
game.addChild(enemy);
if (enemySpawnRate > 30) {
enemySpawnRate -= 0.5;
} // Decrease spawn rate over time to a minimum of 30 ticks
}
if (LK.ticks % 600 == 0) {
// Spawn a bullet pack every 600 ticks
var bulletPack = new BulletPack();
bulletPack.x = Math.random() * (game.width - bulletPack.width) + bulletPack.width / 2;
bulletPack.y = -bulletPack.height;
enemies.push(bulletPack); // Add bullet pack to enemies array for collision detection
game.addChild(bulletPack);
}
});
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