Code edit (1 edits merged)
Please save this source code
User prompt
make sure coin counter is displayed on the top right of the screen. adjust anchor so that it set correctly
User prompt
add a coint counter on the top right and make player collect coins when they collide
User prompt
when blocks are destroyed they can randomly drop coins or powerups
User prompt
Please fix the bug: 'ReferenceError: Block is not defined' in or related to this line: 'var newBlock = new Block();' Line Number: 213
User prompt
change enemy reference to block
User prompt
reduce a lot the ammout of stars in starfield
User prompt
center enemies on screen
User prompt
reduce enemy spacing on x
User prompt
reduce the side distance of enemies
Code edit (2 edits merged)
Please save this source code
User prompt
allow player to define a hitpoint per row per wave
User prompt
add more distance between row when more than one in a wave
User prompt
max enemies per line are 6, if wave has more enemies, the remaining enemies should be on top
User prompt
make sure to update the hitpoints of enemies with the number defined in the wave
User prompt
add a config setting to define how many enemies and how many hitpoints will those have in each wave
User prompt
first wave enemies will only have 1 hitpoint.
User prompt
enemies will be spawned by 6 one next to each other
User prompt
wait for 10 seconds between enemy waves
User prompt
each bullet will decrease one hit point and enemy will be destroyed when hitpoints is zero
User prompt
show hitpoints bellow each enemy
User prompt
add hitpoints to enemies
Code edit (1 edits merged)
Please save this source code
User prompt
eemies should be spawned in waves
User prompt
add starfield in the backgorund, moveing from down up
/****
* Classes
****/
// Bullet class
var Bullet = Container.expand(function () {
var self = Container.call(this);
var bulletGraphics = self.attachAsset('bullet', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = -10;
self.update = function () {
self.y += self.speed;
};
});
// Coin class
var Coin = Container.expand(function () {
var self = Container.call(this);
var coinGraphics = self.attachAsset('coin', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 3;
self.update = function () {
self.y += self.speed;
if (self.y > 2732) {
self.destroy();
}
};
});
// Enemy class
var Enemy = Container.expand(function () {
var self = Container.call(this);
var enemyGraphics = self.attachAsset('block', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 3;
self.hitpoints = 3; // Add hitpoints to enemies
self.update = function () {
self.y += self.speed;
// Create and update hitpoints display
if (!self.hitpointsDisplay) {
self.hitpointsDisplay = new Text2(self.hitpoints.toString(), {
size: 50,
fill: "#ffffff"
});
self.hitpointsDisplay.anchor.set(0.5, 0);
self.hitpointsDisplay.y = 60;
self.addChild(self.hitpointsDisplay);
} else {
self.hitpointsDisplay.setText(self.hitpoints.toString());
}
};
});
//<Assets used in the game will automatically appear here>
// Fairy class
var Fairy = Container.expand(function () {
var self = Container.call(this);
var fairyGraphics = self.attachAsset('fairy', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 5;
self.update = function () {
// Fairy movement logic
};
});
// Powerup class
var Powerup = Container.expand(function () {
var self = Container.call(this);
var powerupGraphics = self.attachAsset('powerup', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 3;
self.update = function () {
self.y += self.speed;
if (self.y > 2732) {
self.destroy();
}
};
});
// Star class
var Star = Container.expand(function () {
var self = Container.call(this);
var starGraphics = self.attachAsset('star', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 5;
self.update = function () {
self.y += self.speed;
if (self.y > 2732) {
self.y = -5;
self.x = Math.random() * 2048;
}
};
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x000000 //Init game with black background
});
/****
* Game Code
****/
// Initialize variables
var fairy;
var bullets = [];
var enemies = [];
var scoreTxt;
var score = 0;
var dragNode = null;
var coinCount = 0; // Initialize coin counter
var coinCounterTxt; // Declare coinCounterTxt variable
var isFairyHeld = false; // Track if the fairy is being held
var waveCount = 0; // Track the wave count
var waveConfig = [{
enemies: 6,
hitpoints: [1]
}, {
enemies: 12,
hitpoints: [2, 1]
}, {
enemies: 18,
hitpoints: [3, 2, 1]
}
// Add more wave configurations as needed
];
// Initialize game elements
function initGame() {
// Create and position the fairy
fairy = game.addChild(new Fairy());
fairy.x = 2048 / 2;
fairy.y = 2732 - 200;
// Create score text
scoreTxt = new Text2('0', {
size: 150,
fill: "#ffffff"
});
// Create starfield
for (var i = 0; i < 100; i++) {
var star = game.addChild(new Star());
star.x = Math.random() * 2048;
star.y = Math.random() * 2732;
}
scoreTxt.anchor.set(0.5, 0);
// Create coin counter text
var coinCounterTxt = new Text2('Coins: 0', {
size: 100,
fill: "#ffffff"
});
coinCounterTxt.anchor.set(1, 0); // Anchor to the top right
coinCounterTxt.x = 2048 - 200; // Position at the top right corner with a margin
coinCounterTxt.y = 20; // Add a margin from the top
LK.gui.top.addChild(coinCounterTxt);
LK.gui.top.addChild(scoreTxt);
// Set up game event listeners
game.down = function (x, y, obj) {
dragNode = fairy;
isFairyHeld = true; // Set isFairyHeld to true when the fairy is held
handleMove(x, y, obj);
};
game.up = function (x, y, obj) {
dragNode = null;
isFairyHeld = false; // Set isFairyHeld to false when the fairy is released
};
game.move = handleMove;
// Update game every tick
game.update = updateGame;
}
// Handle move events
function handleMove(x, y, obj) {
if (dragNode) {
dragNode.x = x;
if (y > 2732 * 0.6) {
dragNode.y = y;
} else {
dragNode.y = 2732 * 0.6;
}
}
}
// Update game logic
function updateGame() {
// Update starfield
for (var i = game.children.length - 1; i >= 0; i--) {
if (game.children[i] instanceof Star) {
game.children[i].update();
}
}
// Update bullets
for (var i = bullets.length - 1; i >= 0; i--) {
bullets[i].update();
if (bullets[i].y < -50) {
bullets[i].destroy();
bullets.splice(i, 1);
}
}
// Update enemies
for (var j = enemies.length - 1; j >= 0; j--) {
enemies[j].update();
if (enemies[j].y > 2732 + 50) {
enemies[j].destroy();
enemies.splice(j, 1);
}
}
// Check for collisions
// Check for coin collection
for (var i = game.children.length - 1; i >= 0; i--) {
if (game.children[i] instanceof Coin && game.children[i].intersects(fairy)) {
game.children[i].destroy();
coinCount++;
coinCounterTxt.setText('Coins: ' + coinCount);
}
}
for (var k = bullets.length - 1; k >= 0; k--) {
for (var l = enemies.length - 1; l >= 0; l--) {
if (bullets[k].intersects(enemies[l])) {
bullets[k].destroy();
bullets.splice(k, 1);
enemies[l].hitpoints--;
if (enemies[l].hitpoints <= 0) {
enemies[l].destroy();
enemies.splice(l, 1);
score++;
scoreTxt.setText(score);
// Randomly drop coins or powerups
var dropChance = Math.random();
if (dropChance < 0.5) {
var newCoin = new Coin();
newCoin.x = enemies[l].x;
newCoin.y = enemies[l].y;
game.addChild(newCoin);
} else if (dropChance < 0.8) {
var newPowerup = new Powerup();
newPowerup.x = enemies[l].x;
newPowerup.y = enemies[l].y;
game.addChild(newPowerup);
}
}
break;
}
}
}
// Spawn new bullets
if (LK.ticks % 20 == 0 && isFairyHeld) {
// Only spawn new bullets if the fairy is being held
var newBullet = new Bullet();
newBullet.x = fairy.x;
newBullet.y = fairy.y;
bullets.push(newBullet);
game.addChild(newBullet);
}
// Spawn new enemies in a line
if (LK.ticks % 600 == 0) {
waveCount++;
if (waveCount <= waveConfig.length) {
var currentWave = waveConfig[waveCount - 1];
var maxEnemiesPerLine = 6;
var enemySpacing = 2048 / (maxEnemiesPerLine + 1); // Adjust spacing to center enemies
var totalRows = Math.ceil(currentWave.enemies / maxEnemiesPerLine);
for (var i = 0; i < currentWave.enemies; i++) {
var newBlock = new Enemy();
var row = Math.floor(i / maxEnemiesPerLine);
newBlock.hitpoints = currentWave.hitpoints[row] || currentWave.hitpoints[currentWave.hitpoints.length - 1];
newBlock.x = i % maxEnemiesPerLine * enemySpacing + enemySpacing / 2;
newBlock.y = row * 200 - 50;
enemies.push(newBlock);
game.addChild(newBlock);
}
// Center the rows of enemies
var totalWidth = (Math.min(currentWave.enemies, maxEnemiesPerLine) - 1) * enemySpacing;
var offsetX = (2048 - totalWidth) / 2;
for (var j = 0; j < enemies.length; j++) {
enemies[j].x += offsetX;
}
}
}
}
// Initialize the game
initGame(); ===================================================================
--- original.js
+++ change.js
@@ -154,9 +154,9 @@
size: 100,
fill: "#ffffff"
});
coinCounterTxt.anchor.set(1, 0); // Anchor to the top right
- coinCounterTxt.x = 2048 - 20; // Position at the top right corner with a margin
+ coinCounterTxt.x = 2048 - 200; // Position at the top right corner with a margin
coinCounterTxt.y = 20; // Add a margin from the top
LK.gui.top.addChild(coinCounterTxt);
LK.gui.top.addChild(scoreTxt);
// Set up game event listeners
8-bit. cartoon. white star.. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
cartoon 8 bit fairy dust. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
Cartoon, 8bit, fireball. Black border. Cicular.. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
cartoon, 8 bit, shield. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
8bit, cartoon, axe. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
dark electric ball, 8bit, cartoon.. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
8bit, cartoon, treasure chest frame. very big empty center. only a fine border of chest. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.